在 Kubernetes 中部署 Azure SQL Edge 容器

重要

Azure SQL Edge 不再支援 ARM64 平臺。

Azure SQL Edge 可以部署在 Kubernetes 叢集上,透過在 Kubernetes 上執行的 Azure IoT Edge作為IoT Edge模組,或部署為獨立容器 Pod。 針對本文的其餘部分,我們將著重于 Kubernetes 叢集上的獨立容器部署。 如需在 Kubernetes 上部署 Azure IoT Edge的資訊,請參閱Kubernetes 上的 Azure IoT Edge (預覽版)

本教學課程示範如何在 Kubernetes 叢集的容器中設定高可用性Azure SQL Edge 實例。

  • 建立 SA 密碼
  • 建立儲存體
  • 建立部署
  • 使用 SQL Server Management Studio (SSMS) 連線
  • 驗證失敗和復原

Kubernetes 1.6 和更新版本支援儲存體類別永續性磁碟區宣告,以及 Azure 磁碟區類型。 您可以在 Kubernetes 中以原生方式建立並管理您的 Azure SQL Edge 執行個體。 本文中的範例說明如何建立部署,以達成類似於共用磁碟容錯移轉叢集執行個體的高可用性設定。 在此設定中,Kubernetes 扮演叢集協調器的角色。 當容器中的 Azure SQL Edge 執行個體失敗時,協調器會啟動附加至相同永續性儲存體的其他容器執行個體。

Kubernetes 叢集中Azure SQL Edge 的圖表。

在上圖中,azure-sql-edgePod 中的容器。 Kubernetes 會協調叢集中的資源。 複本集可確保 Pod 會在節點失敗後自動復原。 應用程式會連線至服務。 在此情況下,服務代表的負載平衡器會在 azure-sql-edge 失敗後維持相同 IP 位址。

在下圖中,azure-sql-edge 容器已失敗。 作為協調器,Kubernetes 可保證複本集中狀態良好的執行個體正確計數,並根據設定啟動新的容器。 協調器會在相同節點上啟動新的 Pod,而 azure-sql-edge 會重新連接到相同的永續性儲存體。 服務會連接到重新建立的 azure-sql-edge

Pod 失敗之後,Kubernetes 叢集中Azure SQL Edge 的圖表。

在下圖中,裝載 azure-sql-edge 容器的節點已失敗。 協調器會在不同節點上啟動新的 Pod,而 azure-sql-edge 會重新連接到相同的永續性儲存體。 服務會連接到重新建立的 azure-sql-edge

節點失敗之後,Kubernetes 叢集中Azure SQL Edge 的圖表。

Prerequisites

  • Kubernetes 叢集

    • 本教學課程需要使用 Kubernetes 叢集。 這些步驟會使用 kubectl 來管理叢集。

    • 為了本教學課程的目的,我們會使用 Azure Kubernetes Service 來部署 Azure SQL Edge。 請參閱部署 Azure Kubernetes Service (AKS) 叢集,以使用 kubectl 在 AKS 中建立單一節點 Kubernetes 叢集並進行連線。

    注意

    為了防止節點失敗,Kubernetes 叢集需要一個以上的節點。

  • Azure CLI

    • 本教學課程中的指示已經過 Azure CLI 2.10.1 驗證。

建立適用于 SQL Edge 部署的 Kubernetes 命名空間

在 Kubernetes 叢集中建立新的命名空間。 此命名空間可用來部署 SQL Edge 和所有必要的成品。 如需 Kubernetes 命名空間的詳細資訊,請參閱 命名空間

kubectl create namespace <namespace name>

建立 SA 密碼

在 Kubernetes 叢集中建立 SA 密碼。 Kubernetes 可以管理敏感性設定資訊,例如作為 Secret 的密碼。

下列命令會建立 SA 帳戶的密碼:

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

請將 MyC0m9l&xP@ssw0rd 取代為複雜密碼。

建立儲存體

在 Kubernetes 叢集中,設定永續性磁碟區永續性磁碟區宣告。 完成下列步驟:

  1. 建立資訊清單,以定義儲存體類別和永續性磁碟區宣告。 資訊清單會指定儲存體佈建程式、參數和回收原則。 Kubernetes 叢集會使用這個資訊清單來建立永續性儲存體。

    下列 YAML 範例會定義儲存體類別和永續性磁碟區宣告。 儲存類別佈建程式是 azure-disk,因為此 Kubernetes 叢集位於 Azure 中。 儲存體帳戶類型為 Standard_LRS。 永續性磁碟區宣告名為 mssql-data。 永續性磁碟區宣告中繼資料包含可將其連接回儲存體類別的注釋。

    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
    

    儲存檔案 (例如 pvc.yaml)。

  2. 在 Kubernetes 中建立永續性磁碟區宣告。

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

    <Path to pvc.yaml file> 是您儲存檔案的位置。

    系統會自動將永續性磁碟區建立為 Azure 儲存體帳戶,並繫結至永續性磁碟區宣告。

    永續性磁片區宣告命令的螢幕擷取畫面。

  3. 驗證永續性磁碟區宣告。

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

    <PersistentVolumeClaim> 是永續性磁碟區宣告的名稱。

    在先前的步驟中,永續性磁碟區宣告名為 mssql-data。 若要查看永續性磁碟區宣告的相關中繼資料,請執行下列命令:

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

    所傳回中繼資料包含名為 Volume 的值。 這個值會對應至 Blob 的名稱。

    傳回中繼資料的螢幕擷取畫面,包括磁片區。

  4. 驗證永續性磁碟區。

    kubectl describe pv -n <namespace name>
    

    kubectl 會傳回永續性磁碟區 (之前由系統自動建立並繫結至永續性磁碟區宣告) 的相關中繼資料。

建立部署

此範例會將裝載 Azure SQL Edge 執行個體的容器描述為 Kubernetes 部署物件。 部署會建立複本集。 複本集會建立 Pod。

在此步驟中,請建立資訊清單,以根據 Azure SQL Edge Docker 映像來描述容器。 資訊清單會參考 mssql-data 永續性磁碟區宣告,以及您已套用至 Kubernetes 叢集的 mssql Secret。 資訊清單也會描述服務。 此服務是負載平衡器。 負載平衡器可確保在 Azure SQL Edge 執行個體復原之後,IP 位址會持續保留。

  1. 建立資訊清單 (YAML 檔案) 來描述部署。 下列為描述部署的範例,包括以 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
    

    將上述程式碼複製到名為 sqldeployment.yaml 的新檔案中。 更新下列值:

    • MSSQL_PID value: "Developer":設定容器以執行 Azure SQL Edge Developer 版本。 Developer 版本未獲授權用於生產環境資料。 如果部署是供生產環境使用,請設定適當的 Premium 版本。

      注意

      如需詳細資訊,請參閱如何授權 Azure SQL Edge

    • persistentVolumeClaim:此值需要使用與永續性磁碟區宣告所用名稱對應的 claimName: 項目。 本教學課程使用 mssql-data

    • name: SA_PASSWORD:設定容器映像以設定 SA 密碼,如本節中所定義。

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
      

      當 Kubernetes 部署容器時,它會參考名為 mssql 的 Secret,以取得密碼的值。

    注意

    藉由使用 LoadBalancer 服務類型,您可以在連接埠 1433 遠端存取 (透過網際網路) Azure SQL Edge 執行個體。

    儲存檔案 (例如 sqledgedeploy.yaml)。

  2. 建立部署。

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

    <Path to sqldeployment.yaml file> 是您儲存檔案的位置。

    部署命令的螢幕擷取畫面。

    您已建立部署和服務。 Azure SQL Edge 執行個體所在的容器已連線至永續性儲存體。

    若要檢視 Pod 的狀態,請鍵入 kubectl get pod -n <namespace name>

    取得 Pod 命令的螢幕擷取畫面。

    在上圖中,Pod 的狀態為 Running。 此狀態表示容器已就緒。 這可能需要幾分鐘的時間。

    注意

    建立部署之後,可能需要幾分鐘的時間才能顯示 Pod。 因為叢集是從 Docker Hub 提取 Azure SQL Edge 容器映像,所以會導致這個延遲。 第一次提取映像之後,如果部署抵達的節點中已經快取映像,則後續部署可能會更快速。

  3. 驗證服務是否正在執行。 執行以下命令:

    kubectl get services -n <namespace name>
    

    此命令會傳回正在執行的服務,以及服務的內部和外部 IP 位址。 記下 mssql-deployment 服務的外部 IP 位址。 使用此 IP 位址連接到 Azure SQL Edge。

    取得服務命令的螢幕擷取畫面。

    如需 Kubernetes 叢集中的物件狀態詳細資訊,請執行:

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

連線到 Azure SQL Edge 執行個體

如果您已如所述設定容器,即可從 Azure 虛擬網路外部連線到應用程式。 使用 sa 帳戶和服務的外部 IP 位址。 使用您設定為 Kubernetes Secret 的密碼。 如需連線到 Azure SQL Edge 實例的詳細資訊,請參閱連線到 Azure SQL Edge

驗證失敗和復原

若要驗證失敗和復原,您可以刪除 Pod。 請執行下列步驟:

  1. 列出執行 Azure SQL Edge 的 Pod。

    kubectl get pods -n <namespace name>
    

    記下執行 Azure SQL Edge 的 Pod 名稱。

  2. 刪除 Pod。

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl 即為上一個步驟傳回的 Pod 名稱值。

Kubernetes 會自動重新建立 Pod,以復原 Azure SQL Edge 執行個體,並連接永續性儲存體。 使用 kubectl get pods 來驗證是否已部署新的 Pod。 使用 kubectl get services 來驗證新容器的 IP 位址是否相同。

摘要

在這個教學課程中,您已了解如何將 Azure SQL Edge 容器部署至 Kubernetes 叢集以確保高可用性。

  • 建立 SA 密碼
  • 建立儲存體
  • 建立部署
  • 使用 Azure SQL Edge Management Studio (SSMS) 連線
  • 驗證失敗和復原

後續步驟