Data API Builder implementeren in Azure Kubernetes Service

In deze handleiding wordt getoond hoe u Data API Builder (DAB) implementeert naar de Azure Kubernetes Service (AKS) met behulp van een aangepaste containerimage die naar Azure Container Registry wordt gepusht. AKS biedt beheerde Kubernetes met ingebouwde schaalaanpassing, statustests en geheimbeheer.

Diagram van de algehele architectuur nadat de implementatie naar Azure Kubernetes Service is voltooid.

Vereiste voorwaarden

Het configuratiebestand bouwen

  1. Maak een lokale map voor uw configuratiebestanden.

  2. Initialiseer een basisconfiguratiebestand met behulp van dab init. Gebruik de @env() functie voor de verbindingsreeks, zodat het geheim tijdens runtime wordt geïnjecteerd en niet in de afbeelding is gebakken.

    dab init \
      --database-type mssql \
      --connection-string "@env('DATABASE_CONNECTION_STRING')"
    
  3. Voeg ten minste één entiteit toe met behulp van dab add. Herhaal dit voor elke tabel of weergave die u wilt weergeven.

    dab add Books \
      --source dbo.Books \
      --permissions "anonymous:read"
    
  4. Controleer dab-config.json voordat u doorgaat.

Een aangepaste containerimage bouwen en pushen

Bouw een image die dab-config.json bevat bij /App/dab-config.json.

  1. Maak een Azure Container Registry als u er nog geen hebt.

    az acr create \
      --resource-group <resource-group> \
      --name <registry-name> \
      --sku Basic \
      --admin-enabled true
    
  2. Maak een Dockerfile in dezelfde map als dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  3. Bouw en push de afbeelding met ACR Tasks.

    az acr build \
      --registry <registry-name> \
      --image dab:latest \
      .
    
  4. Let op de volledige afbeeldingsreferentie: <registry-name>.azurecr.io/dab:latest.

AKS verbinden met ACR

Ververleent uw AKS-cluster pull-toegang tot het register.

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

De verbindingsreeks opslaan als een Kubernetes-geheim

Sla de databaseverbindingsreeks op als een Kubernetes-geheim, zodat deze zich nooit in het manifestbestand bevindt.

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

Waarschuwing

Plaats verbindingsreeksen nooit rechtstreeks in kubernetes-manifestbestanden of containerinstallatiekopieën. Gebruik geheimen of Azure Key Vault.

Het Kubernetes-manifest maken

Maak een bestand met de naam dab-deployment.yaml met de volgende inhoud. Vervang <registry-name> door uw ACR-naam.

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

Opmerking

readinessProbe en livenessProbe gebruiken het DAB-eindpunt/health. Zie Statuscontroles voor meer informatie.

Implementeren naar AKS

  1. Haal referenties op voor uw cluster.

    az aks get-credentials \
      --resource-group <resource-group> \
      --name <cluster-name>
    
  2. Pas het manifest toe.

    kubectl apply -f dab-deployment.yaml
    
  3. Houd de implementatie in de gaten totdat de pods klaar zijn.

    kubectl rollout status deployment/dab
    
  4. Haal het externe IP-adres op dat is toegewezen aan de service.

    kubectl get service dab-service
    

    In EXTERNAL-IP de kolom wordt het openbare IP-adres weergegeven. Wacht even totdat de load balancer kan worden ingericht.

De implementatie controleren

  1. Navigeer naar http://<external-ip>/health. Een goed antwoord ziet er als volgt uit:

    {
      "status": "healthy",
      "version": "2.0.0",
      "app-name": "dab_oss_2.0.0"
    }
    
  2. Test een entiteitseindpunt.

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

De implementatie schalen

Wijzig het aantal replica's om horizontaal te schalen.

kubectl scale deployment/dab --replicas=4

Werk spec.replicas bij in dab-deployment.yaml en pas opnieuw toe.

De hulpbronnen opschonen

Verwijder de implementatie en service wanneer u deze niet meer nodig hebt.

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

Als u het AKS-cluster en het register wilt verwijderen, verwijdert u de resourcegroep.

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