Distribuera data-API-byggare till Azure Kubernetes Service

Den här guiden visar hur du distribuerar Data API Builder (DAB) till Azure Kubernetes Service (AKS) med hjälp av en anpassad containeravbildning som skickas till Azure Container Registry. AKS tillhandahåller hanterade Kubernetes med inbyggd skalning, hälsoavsökningar och hemlig hantering.

Diagram för den övergripande arkitekturen efter distributionen till Azure Kubernetes Service är klar.

Förutsättningar

Skapa konfigurationsfilen

  1. Skapa en lokal katalog för dina konfigurationsfiler.

  2. Initiera en baskonfigurationsfil med hjälp av dab init. @env() Använd anslutningssträngsfunktionen så att hemligheten matas in vid körningstid, inte bakas in i bilden.

    dab init \
      --database-type mssql \
      --connection-string "@env('DATABASE_CONNECTION_STRING')"
    
  3. Lägg till minst en entitet med .dab add Upprepa för varje tabell eller vy som du vill exponera.

    dab add Books \
      --source dbo.Books \
      --permissions "anonymous:read"
    
  4. Granska dab-config.json innan du fortsätter.

Skapa och push-överföra en anpassad containeravbildning

Skapa en avbildning som innehåller dab-config.json/App/dab-config.json.

  1. Skapa ett Azure Container Registry om du inte redan har ett.

    az acr create \
      --resource-group <resource-group> \
      --name <registry-name> \
      --sku Basic \
      --admin-enabled true
    
  2. Skapa en Dockerfile i samma katalog som dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  3. Skapa och pusha avbildningen med ACR Tasks.

    az acr build \
      --registry <registry-name> \
      --image dab:latest \
      .
    
  4. Observera den fullständiga bildreferensen: <registry-name>.azurecr.io/dab:latest.

Ansluta AKS till ACR

Ge AKS-klustret pull-åtkomst till registret.

az aks update \
  --name <cluster-name> \
  --resource-group <resource-group> \
  --attach-acr <registry-name>

Lagra anslutningssträngen som en Kubernetes-hemlighet

Lagra databasanslutningssträngen som en Kubernetes-hemlighet så att den aldrig finns i manifestfilen.

kubectl create secret generic dab-secrets \
  --from-literal=DATABASE_CONNECTION_STRING="<your-connection-string>"

Varning

Placera aldrig anslutningssträngar direkt i Kubernetes-manifestfiler eller containeravbildningar. Använd sekretessdata eller Azure Key Vault.

Skapa Kubernetes-manifestet

Skapa en fil med namnet dab-deployment.yaml med följande innehåll. Ersätt <registry-name> med ditt ACR-namn.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dab
  labels:
    app: dab
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dab
  template:
    metadata:
      labels:
        app: dab
    spec:
      containers:
        - name: dab
          image: <registry-name>.azurecr.io/dab:latest
          ports:
            - containerPort: 5000
          env:
            - name: DATABASE_CONNECTION_STRING
              valueFrom:
                secretKeyRef:
                  name: dab-secrets
                  key: DATABASE_CONNECTION_STRING
          readinessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 15
            periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
  name: dab-service
spec:
  selector:
    app: dab
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
  type: LoadBalancer

Anmärkning

readinessProbe och livenessProbe använder DAB-slutpunkten /health. Mer information finns i Hälsokontroller.

Distribuera till AKS

  1. Hämta autentiseringsuppgifter för klustret.

    az aks get-credentials \
      --resource-group <resource-group> \
      --name <cluster-name>
    
  2. Tillämpa manifestet.

    kubectl apply -f dab-deployment.yaml
    
  3. Titta på distributionen tills poddar är klara.

    kubectl rollout status deployment/dab
    
  4. Hämta den externa IP-adressen som tilldelats till tjänsten.

    kubectl get service dab-service
    

    Kolumnen EXTERNAL-IP visar den offentliga IP-adressen. Vänta en minut för att lastbalanseraren ska förberedas.

Verifiera driftsättningen

  1. Gå till http://<external-ip>/health. Ett hälsosamt svar ser ut så här:

    {
      "status": "healthy",
      "version": "2.0.0",
      "app-name": "dab_oss_2.0.0"
    }
    
  2. Testa en entitetsslutpunkt.

    curl http://<external-ip>/api/Books
    

Skala utplaceringen

Ändra antalet repliker för att skala horisontellt.

kubectl scale deployment/dab --replicas=4

Eller uppdatera spec.replicas i dab-deployment.yaml och tillämpa igen.

Rensa resurser

Ta bort distributionen och tjänsten när den inte längre behövs.

kubectl delete -f dab-deployment.yaml
kubectl delete secret dab-secrets

Ta bort AKS-klustret och registret genom att ta bort resursgruppen.

az group delete \
  --name <resource-group> \
  --yes --no-wait