Wdrażanie konstruktora interfejsu API danych w usłudze Azure Kubernetes Service

W tym przewodniku pokazano, jak wdrożyć Data API builder (DAB) do Azure Kubernetes Service (AKS) przy użyciu niestandardowego obrazu kontenera wypchniętego do Azure Container Registry. Usługa AKS zapewnia zarządzane Kubernetes z wbudowanym skalowaniem, sondami kondycji i zarządzaniem tajemnicami.

Diagram ogólnej architektury po zakończeniu wdrażania Azure Kubernetes Service.

Wymagania wstępne

Kompilowanie pliku konfiguracji

  1. Utwórz katalog lokalny dla plików konfiguracji.

  2. Zainicjuj podstawowy plik konfiguracji przy użyciu polecenia dab init. Użyj funkcji @env() dla parametry połączenia, aby tajny klucz był wstrzykiwany w czasie wykonywania, a nie zintegrowany z obrazem.

    dab init \
      --database-type mssql \
      --connection-string "@env('DATABASE_CONNECTION_STRING')"
    
  3. Dodaj co najmniej jedną jednostkę przy użyciu polecenia dab add. Powtórz dla każdej tabeli lub widoku, który chcesz uwidocznić.

    dab add Books \
      --source dbo.Books \
      --permissions "anonymous:read"
    
  4. Przed kontynuowaniem przejrzyj dab-config.json .

Budowanie i przesyłanie niestandardowego obrazu kontenera

Zbuduj obraz zawierający dab-config.json w /App/dab-config.json.

  1. Utwórz usługę Azure Container Registry, jeśli jeszcze jej nie masz.

    az acr create \
      --resource-group <resource-group> \
      --name <registry-name> \
      --sku Basic \
      --admin-enabled true
    
  2. Utwórz element Dockerfile w tym samym katalogu co dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  3. Skompiluj i wypchnij obraz przy użyciu usługi ACR Tasks.

    az acr build \
      --registry <registry-name> \
      --image dab:latest \
      .
    
  4. Zanotuj pełne odniesienie do obrazu: <registry-name>.azurecr.io/dab:latest.

Łączenie usługi AKS z usługą ACR

Udziel klastrowi AKS dostępu do pobierania z rejestru.

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

Przechowaj ciąg połączenia jako sekret w platformie Kubernetes

Zapisz parametry połączenia z bazą danych jako sekret w Kubernetes, aby nigdy nie były w pliku manifestu.

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

Ostrzeżenie

Nigdy nie umieszczaj parametrów połączenia bezpośrednio w plikach manifestu platformy Kubernetes lub obrazach kontenerów. Użyj tajemnic lub usługi Azure Key Vault.

Tworzenie manifestu platformy Kubernetes

Utwórz plik o nazwie dab-deployment.yaml z następującą zawartością. Zastąp <registry-name> nazwą ACR.

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

Uwaga / Notatka

Element readinessProbe i livenessProbe używają punktu końcowego DAB /health . Aby uzyskać więcej informacji, zobacz Kontrole kondycji.

Wdrażanie do AKS

  1. Pobierz poświadczenia dla klastra.

    az aks get-credentials \
      --resource-group <resource-group> \
      --name <cluster-name>
    
  2. Zastosuj manifest.

    kubectl apply -f dab-deployment.yaml
    
  3. Obejrzyj wdrożenie do momentu, gdy pody będą gotowe.

    kubectl rollout status deployment/dab
    
  4. Pobierz zewnętrzny adres IP przypisany do usługi.

    kubectl get service dab-service
    

    Kolumna EXTERNAL-IP zawiera publiczny adres IP. Pozwól modułowi równoważenia obciążenia działać przez minutę.

Weryfikowanie wdrożenia

  1. Przejdź do http://<external-ip>/health. Zdrowa odpowiedź wygląda następująco:

    {
      "status": "healthy",
      "version": "2.0.0",
      "app-name": "dab_oss_2.0.0"
    }
    
  2. Testowanie punktu końcowego jednostki.

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

Skalowanie wdrożenia

Zmień liczbę replik, aby skalować horyzontalnie.

kubectl scale deployment/dab --replicas=4

Możesz też zaktualizować spec.replicas w dab-deployment.yaml i ponownie zastosować.

Uprzątnij zasoby

Usuń wdrożenie i usługę, gdy nie będzie już potrzebne.

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

Aby usunąć klaster usługi AKS i rejestr, usuń grupę zasobów.

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