Share via


使用 Azure Kubernetes Service 上的 DH2i DxOperator 在 Kubernetes 上部署可用性群組

適用於:SQL Server - Linux

此教學課程說明如何針對部署到 Azure Kubernetes Service (AKS) Kubernetes 叢集中的 SQL Server Linux 型容器,使用 DH2i DxOperator 設定 SQL Server Always On 可用性群組 (AG)。 這些程式也適用於 Azure Red Hat OpenShift 叢集;主要差別在於部署 Azure Red Hat OpenShift 叢集,後面接著使用下列步驟來取代 kubectl 命令 oc

注意

Microsoft 支援資料移動、可用性群組與 SQL Server 元件。 DH2i 負責支援 DxEnterprise 產品,其中包括叢集與仲裁管理。 DxOperator 是 Kubernetes 的軟體延伸模組,使用自訂資源定義來自動化 DxEnterprise 叢集的部署。 DxEnterprise 接著會提供所有檢測,以在 Kubernetes 中建立、設定、管理和提供 SQL Server 可用性群組工作負載的自動容錯移轉。

您可以註冊免費的 DxEnterprise 軟體授權。 如需詳細資訊,請參閱 DxOperator 快速入門手冊

使用本文所述的步驟,了解如何部署 StatefulSet,並使用 DH2i DxOperator 來建立和設定在 AKS 上託管的具有三個複本的可用性群組 (AG)。

本教學課程包含下列步驟:

  • 使用 mssql-conf 設定在 AKS 叢集上建立 configmap 物件
  • 安裝 DxOperator
  • 建立祕密物件
  • 使用 YAML 檔案部署 3 複本 SQL 可用性群組
  • 連接至 SQL Server

必要條件

  • Azure Kubernetes Service (AKS) 或 Kubernetes 叢集。

  • 已啟用 AG 功能和通道的有效 DxEnterprise 授權。 如需詳細資訊,請參閱非生產環境的開發人員版本,或生產工作負載的 DxEnterprise 軟體

建立 configmap 物件

  1. 在 AKS 建立 configmap 物件,根據您的需求,它具有 mssql-conf 設定。 在這裡範例中,您會使用名為 mssqlconfig.yamlconfigMap檔案,搭配下列參數來建立 。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. 請執行下列命令來建立物件。

    kubectl apply -f ./mssqlconfig.yaml
    

建立祕密物件

建立祕密以儲存 SQL Server 的 sa 密碼。

kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="Password123"

建立祕密以儲存 DH2i 的授權識別碼。 請造訪 DH2i 的網站以取得開發人員授權。 在下列範例中,將 XXXX-XXXX-XXXX-XXXX 取代為您的授權識別碼。

kubectl create secret generic dxe --from-literal=DX_PASSKEY="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

安裝 DxOperator

若要安裝 DxOperator,必須使用下列範例下載 DxOperator YAML 檔案,然後套用 YAML 檔案。

  1. 使用下列命令來部署描述如何設定可用性群組的 YAML。 使用自訂名稱儲存檔案,例如 DxOperator.yaml

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. 安裝操作員之後,您可以部署 SQL Server 容器、設定可用性群組、定義複本、部署及設定 DxEnterprise 叢集。 以下是稱為 DxEnterpriseSqlAg.yaml 的部署 YAML 檔案範例,您可以根據需求加以變更。

    apiVersion: dh2i.com/v1
    kind: DxEnterpriseSqlAg
    metadata:
      name: contoso-sql
    spec:
      synchronousReplicas: 3
      asynchronousReplicas: 0
      # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL
      configurationOnlyReplicas: 0
      availabilityGroupName: AG1
      # Listener port for the availability group (uncomment to apply)
      availabilityGroupListenerPort: 51433
      # For a contained availability group, add the option CONTAINED
      availabilityGroupOptions: null
      # Valid options are EXTERNAL (automatic failover) and NONE (no automatic failover)
      availabilityGroupClusterType: EXTERNAL
      createLoadBalancers: true
      template:
        metadata:
          labels:
            label: example
          annotations:
            annotation: example
        spec:
          dxEnterpriseContainer:
            image: "docker.io/dh2i/dxe:latest"
            imagePullPolicy: Always
            acceptEula: true
            clusterSecret: dxe
            vhostName: VHOST1
            joinExistingCluster: false
            # QoS – guaranteed (uncomment to apply)
            #resources:
              #limits:
                #memory: 1Gi
                #cpu: '1'
            # Configuration options for the required persistent volume claim for DxEnterprise
            volumeClaimConfiguration:
              storageClassName: null
              resources:
                requests:
                  storage: 1Gi
          mssqlServerContainer:
            image: "mcr.microsoft.com/mssql/server:latest"
            imagePullPolicy: Always
            mssqlSecret: mssql
            acceptEula: true
            mssqlPID: Developer
            mssqlConfigMap: mssql-config
            # QoS – guaranteed (uncomment to apply)
            #resources:
              #limits:
                #memory: 2Gi
                #cpu: '2'
            # Configuration options for the required persistent volume claim for SQL Server
            volumeClaimConfiguration:
              storageClassName: null
              resources:
                requests:
                  storage: 2Gi
          # Additional side-car containers, such as mssql-tools (uncomment to apply)
          #containers:
          #- name: mssql-tools
              #image: "mcr.microsoft.com/mssql-tools"
              #command: [ "/bin/sh" ]
              #args: [ "-c", "tail -f /dev/null" ]
    
  3. 部署 DxEnterpriseSqlAg.yaml 檔案。

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

建立可用性群組接聽程式

套用下列 YAML 以新增負載平衡器,方法是將選取器設定為上一個步驟中用來部署可用性群組的 YAML 檔案名稱。 在此範例中為 contoso-sql

apiVersion: v1
kind: Service
metadata:
  name: contoso-cluster-lb
spec:
  type: LoadBalancer
  selector:
    dh2i.com/entity: contoso-sql
  ports:
    - name: sql
      protocol: TCP
      port: 1433
      targetPort: 51444
    - name: listener
      protocol: TCP
      port: 51433
      targetPort: 51433
    - name: dxe
      protocol: TCP
      port: 7979
      targetPort: 7979

確認部署和負載平衡器指派。

kubectl get pods
kubectl get services

您應該會看到類似下列範例的輸出:

NAME                     TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)                                         AGE
contoso-cluster-lb       LoadBalancer   10.1.0.21    172.212.20.29   1433:30484/TCP,14033:30694/TCP,7979:30385/TCP   3m18s
contoso-sql-0            ClusterIP      None         <none>          7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP    79m
contoso-sql-0-lb         LoadBalancer   10.1.0.210   4.255.19.171    7979:32374/TCP,1433:32444/TCP                   79m
contoso-sql-1            ClusterIP      None         <none>          7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP    79m
contoso-sql-1-lb         LoadBalancer   10.1.0.158   4.255.19.201    7979:30152/TCP,1433:30868/TCP                   79m
contoso-sql-2            ClusterIP      None         <none>          7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP    79m
contoso-sql-2-lb         LoadBalancer   10.1.0.159   4.255.19.218    7979:30566/TCP,1433:31463/TCP                   79m
kubernetes               ClusterIP      10.1.0.1     <none>          443/TCP                                         87m

PS /home/aravind> kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
contoso-sql-0   2/2     Running   0          74m
contoso-sql-1   2/2     Running   0          74m
contoso-sql-2   2/2     Running   0          74m