Udostępnij za pośrednictwem


Wdrażanie kontenera usługi Azure SQL Edge na platformie Kubernetes

Ważne

Azure SQL Edge nie obsługuje już platformy ARM64.

Azure SQL Edge można wdrożyć w klastrze Kubernetes zarówno jako moduł IoT Edge za pośrednictwem usługi Azure IoT Edge działającego na platformie Kubernetes, jak i jako autonomicznego zasobnika kontenera. W pozostałej części tego artykułu skupimy się na autonomicznym wdrożeniu kontenera w klastrze Kubernetes. Aby uzyskać informacje na temat wdrażania usługi Azure IoT Edge na platformie Kubernetes, zobacz Azure IoT Edge on Kubernetes (wersja zapoznawcza).

W tym samouczku pokazano, jak skonfigurować wystąpienie usługi Azure SQL Edge o wysokiej dostępności w kontenerze w klastrze Kubernetes.

  • Tworzenie hasła sa
  • Tworzenie magazynu
  • Tworzenie wdrożenia
  • Nawiązywanie połączenia za pomocą programu SQL Server Management Studio (SSMS)
  • Weryfikowanie niepowodzenia i odzyskiwania

Platforma Kubernetes 1.6 lub nowsza obsługuje klasy magazynu, oświadczenia trwałego woluminu i typ woluminu dysku platformy Azure. Wystąpienia usługi Azure SQL Edge można tworzyć i zarządzać nimi natywnie na platformie Kubernetes. W przykładzie w tym artykule pokazano, jak utworzyć wdrożenie w celu osiągnięcia konfiguracji wysokiej dostępności podobnej do wystąpienia klastra trybu failover dysku udostępnionego. W tej konfiguracji platforma Kubernetes odgrywa rolę koordynatora klastra. Gdy wystąpienie usługi Azure SQL Edge w kontenerze zakończy się niepowodzeniem, program orchestrator uruchamia kolejne wystąpienie kontenera, które jest dołączane do tego samego magazynu trwałego.

Diagram Azure SQL Edge w klastrze Kubernetes.

Na powyższym diagramie azure-sql-edge jest kontenerem w zasobniku. Platforma Kubernetes organizuje zasoby w klastrze. Zestaw replik gwarantuje, że zasobnik zostanie automatycznie odzyskany po awarii węzła. Aplikacje łączą się z usługą. W takim przypadku usługa reprezentuje moduł równoważenia obciążenia, który hostuje adres IP, który pozostaje taki sam po awarii azure-sql-edge.

Na poniższym diagramie azure-sql-edge kontener zakończył się niepowodzeniem. Jako koordynator platforma Kubernetes gwarantuje poprawną liczbę wystąpień w dobrej kondycji w zestawie replik i uruchamia nowy kontener zgodnie z konfiguracją. Koordynator uruchamia nowy zasobnik w tym samym węźle i azure-sql-edge ponownie łączy się z tym samym magazynem trwałym. Usługa łączy się z utworzonym ponownie elementem azure-sql-edge.

Diagram Azure SQL Edge w klastrze Kubernetes po awarii zasobnika.

Na poniższym diagramie węzeł hostowany azure-sql-edge kontener nie powiódł się. Koordynator uruchamia nowy zasobnik w innym węźle i azure-sql-edge ponownie łączy się z tym samym magazynem trwałym. Usługa łączy się z utworzonym ponownie elementem azure-sql-edge.

Diagram Azure SQL Edge w klastrze Kubernetes po awarii węzła.

Wymagania wstępne

  • Klaster Kubernetes

    • Samouczek wymaga klastra Kubernetes. Kroki używania narzędzia kubectl do zarządzania klastrem.

    • Na potrzeby tego samouczka używamy Azure Kubernetes Service do wdrażania usługi Azure SQL Edge. Zobacz Deploy an Azure Kubernetes Service cluster (AKS) to create and connect to a single-node Kubernetes cluster in AKS with kubectl.

    Uwaga

    Aby chronić przed awarią węzła, klaster Kubernetes wymaga więcej niż jednego węzła.

  • Interfejs wiersza polecenia platformy Azure

    • Instrukcje opisane w tym samouczku zostały zweryfikowane względem interfejsu wiersza polecenia platformy Azure 2.10.1.

Tworzenie przestrzeni nazw Kubernetes dla wdrożenia usługi SQL Edge

Utwórz nową przestrzeń nazw w klastrze kubernetes. Ta przestrzeń nazw służy do wdrażania programu SQL Edge i wszystkich wymaganych artefaktów. Aby uzyskać więcej informacji na temat przestrzeni nazw platformy Kubernetes, zobacz przestrzenie nazw.

kubectl create namespace <namespace name>

Tworzenie hasła sa

Utwórz hasło sa w klastrze Kubernetes. Platforma Kubernetes może zarządzać poufnymi informacjami o konfiguracji, takimi jak hasła jako wpisy tajne.

Następujące polecenie tworzy hasło dla konta sa:

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n <namespace name>

Zastąp ciąg MyC0m9l&xP@ssw0rd złożonym hasłem.

Tworzenie magazynu

Konfigurowanie trwałego woluminu i trwałego oświadczenia woluminu w klastrze Kubernetes. Wykonaj poniższe czynności:

  1. Utwórz manifest, aby zdefiniować klasę magazynu i oświadczenie trwałego woluminu. Manifest określa aprowizację magazynu, parametry i zasady odzyskiwania. Klaster Kubernetes używa tego manifestu do utworzenia magazynu trwałego.

    Poniższy przykład yaml definiuje klasę magazynu i trwałe oświadczenie woluminu. Aprowizacja klasy magazynu to azure-disk, ponieważ ten klaster Kubernetes znajduje się na platformie Azure. Typ konta magazynu to Standard_LRS. Oświadczenie trwałego woluminu nosi nazwę mssql-data. Metadane oświadczeń trwałych woluminów zawierają adnotację łączącą ją z klasą magazynu.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
         name: azure-disk
    provisioner: kubernetes.io/azure-disk
    parameters:
      storageaccounttype: Standard_LRS
      kind: managed
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mssql-data
      annotations:
        volume.beta.kubernetes.io/storage-class: azure-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    Zapisz plik (na przykład pvc.yaml).

  2. Utwórz oświadczenie trwałego woluminu na platformie Kubernetes.

    kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
    

    <Path to pvc.yaml file> to lokalizacja, w której zapisano plik.

    Wolumin trwały jest tworzony automatycznie jako konto usługi Azure Storage i powiązany z trwałym oświadczeniem woluminu.

    Zrzut ekranu przedstawiający trwałe polecenie oświadczenia woluminu.

  3. Sprawdź trwałe oświadczenie woluminu.

    kubectl describe pvc <PersistentVolumeClaim>  -n <name of the namespace>
    

    <PersistentVolumeClaim> jest nazwą oświadczenia trwałego woluminu.

    W poprzednim kroku oświadczenie trwałego woluminu nosi nazwę mssql-data. Aby wyświetlić metadane dotyczące trwałego oświadczenia woluminu, uruchom następujące polecenie:

    kubectl describe pvc mssql-data  -n <namespace name>
    

    Zwrócone metadane zawierają wartość o nazwie Volume. Ta wartość jest mapowania na nazwę obiektu blob.

    Zrzut ekranu przedstawiający zwrócone metadane, w tym wolumin.

  4. Sprawdź wolumin trwały.

    kubectl describe pv -n <namespace name>
    

    kubectl zwraca metadane dotyczące woluminu trwałego, który został utworzony automatycznie i powiązany z trwałym oświadczeniem woluminu.

Tworzenie wdrożenia

W tym przykładzie kontener hostujący wystąpienie usługi Azure SQL Edge jest opisany jako obiekt wdrożenia Kubernetes. Wdrożenie tworzy zestaw replik. Zestaw replik tworzy zasobnik.

W tym kroku utwórz manifest opisujący kontener na podstawie obrazu platformy Docker usługi Azure SQL Edge. Manifest odwołuje się do oświadczenia trwałego woluminu mssql-data i wpisu tajnego mssql , który został już zastosowany do klastra Kubernetes. Manifest opisuje również usługę. Ta usługa jest modułem równoważenia obciążenia. Moduł równoważenia obciążenia gwarantuje, że adres IP będzie się powtarzać po odzyskaniu wystąpienia usługi Azure SQL Edge.

  1. Utwórz manifest (plik YAML), aby opisać wdrożenie. W poniższym przykładzie opisano wdrożenie, w tym kontener oparty na obrazie kontenera usługi Azure SQL Edge.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sqledge-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sqledge
      template:
        metadata:
          labels:
            app: sqledge
        spec:
          volumes:
            - name: sqldata
              persistentVolumeClaim:
                claimName: mssql-data
          containers:
            - name: azuresqledge
              image: mcr.microsoft.com/azure-sql-edge:latest
              ports:
                - containerPort: 1433
              volumeMounts:
                - name: sqldata
                  mountPath: /var/opt/mssql
              env:
                - name: MSSQL_PID
                  value: "Developer"
                - name: ACCEPT_EULA
                  value: "Y"
                - name: SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: SA_PASSWORD
                - name: MSSQL_AGENT_ENABLED
                  value: "TRUE"
                - name: MSSQL_COLLATION
                  value: "SQL_Latin1_General_CP1_CI_AS"
                - name: MSSQL_LCID
                  value: "1033"
          terminationGracePeriodSeconds: 30
          securityContext:
            fsGroup: 10001
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sqledge-deployment
    spec:
      selector:
        app: sqledge
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
          name: sql
      type: LoadBalancer
    

    Skopiuj powyższy kod do nowego pliku o nazwie sqldeployment.yaml. Zaktualizuj następujące wartości:

    • value: "Developer"MSSQL_PID: ustawia kontener na uruchamianie wersji Azure SQL Edge Developer. Wersja deweloperów nie jest licencjonowana na dane produkcyjne. Jeśli wdrożenie jest używane w środowisku produkcyjnym, ustaw wersję na Premium.

      Uwaga

      Aby uzyskać więcej informacji, zobacz Jak licencjonować Azure SQL Edge.

    • persistentVolumeClaim: Ta wartość wymaga wpisu, który claimName: mapuje nazwę używaną dla oświadczenia trwałego woluminu. W tym samouczku użyto regionu mssql-data.

    • name: SA_PASSWORD: Konfiguruje obraz kontenera w celu ustawienia hasła administratora systemu , zgodnie z definicją w tej sekcji.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
      

      Gdy platforma Kubernetes wdraża kontener, odwołuje się do wpisu tajnego o nazwie mssql , aby uzyskać wartość hasła.

    Uwaga

    Korzystając z LoadBalancer typu usługi, wystąpienie usługi Azure SQL Edge jest dostępne zdalnie (za pośrednictwem Internetu) na porcie 1433.

    Zapisz plik (na przykład sqledgedeploy.yaml).

  2. Utwórz wdrożenie.

    kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
    

    <Path to sqldeployment.yaml file> to lokalizacja, w której zapisano plik.

    Zrzut ekranu przedstawiający polecenie wdrożenia.

    Zostanie utworzone wdrożenie i usługa. Wystąpienie usługi Azure SQL Edge znajduje się w kontenerze połączonym z magazynem trwałym.

    Aby wyświetlić stan zasobnika, wpisz kubectl get pod -n <namespace name>.

    Zrzut ekranu przedstawiający polecenie get pod.

    Na powyższym obrazie zasobnik ma stan Running. Ten stan wskazuje, że kontener jest gotowy. Może to potrwać kilka minut.

    Uwaga

    Po utworzeniu wdrożenia może upłynąć kilka minut, zanim zasobnik będzie widoczny. Opóźnienie jest spowodowane tym, że klaster ściąga obraz kontenera usługi Azure SQL Edge z centrum Platformy Docker. Po pierwszym ściągnięciu obrazu kolejne wdrożenia mogą być szybsze, jeśli wdrożenie jest w węźle, który ma już zapisany obraz w pamięci podręcznej.

  3. Sprawdź, czy usługi są uruchomione. Uruchom następujące polecenie:

    kubectl get services -n <namespace name>
    

    To polecenie zwraca uruchomione usługi, a także wewnętrzne i zewnętrzne adresy IP dla usług. Zanotuj zewnętrzny adres mssql-deployment IP usługi. Użyj tego adresu IP, aby nawiązać połączenie z usługą Azure SQL Edge.

    Zrzut ekranu przedstawiający polecenie get service.

    Aby uzyskać więcej informacji na temat stanu obiektów w klastrze Kubernetes, uruchom polecenie:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

Nawiązywanie połączenia z wystąpieniem usługi Azure SQL Edge

Jeśli skonfigurowano kontener zgodnie z opisem, możesz nawiązać połączenie z aplikacją spoza sieci wirtualnej platformy Azure. sa Użyj konta i zewnętrznego adresu IP dla usługi. Użyj hasła skonfigurowanego jako wpis tajny platformy Kubernetes. Aby uzyskać więcej informacji na temat nawiązywania połączenia z wystąpieniem usługi Azure SQL Edge, zobacz Nawiązywanie połączenia z usługą Azure SQL Edge.

Weryfikowanie niepowodzenia i odzyskiwania

Aby zweryfikować niepowodzenie i odzyskiwanie, możesz usunąć zasobnik. Wykonaj następujące czynności:

  1. Wyświetl listę zasobników z uruchomioną usługą Azure SQL Edge.

    kubectl get pods -n <namespace name>
    

    Zanotuj nazwę zasobnika uruchomionego Azure SQL Edge.

  2. Usuń zasobnik.

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl to wartość zwrócona z poprzedniego kroku dla nazwy zasobnika.

Platforma Kubernetes automatycznie ponownie tworzy zasobnik w celu odzyskania wystąpienia usługi Azure SQL Edge i nawiązania połączenia z magazynem trwałym. Użyj polecenia kubectl get pods , aby sprawdzić, czy jest wdrożony nowy zasobnik. Użyj polecenia kubectl get services , aby sprawdzić, czy adres IP nowego kontenera jest taki sam.

Podsumowanie

W tym samouczku przedstawiono sposób wdrażania kontenerów usługi Azure SQL Edge w klastrze Kubernetes w celu zapewnienia wysokiej dostępności.

  • Tworzenie hasła administratora systemu
  • Tworzenie magazynu
  • Tworzenie wdrożenia
  • Nawiązywanie połączenia z Azure SQL Edge Management Studios (SSMS)
  • Weryfikowanie niepowodzenia i odzyskiwania

Następne kroki