使用 Azure Kubernetes 服务上的 DH2i DxOperator 在 Kubernetes 上部署可用性组

适用于:SQL Server - Linux

本教程介绍如何使用 DH2i DxOperator 为部署到 Azure Kubernetes 服务(AKS)群集的基于 SQL Server Linux 的容器配置 SQL Server Always On 可用性组(AG)。 这些过程也适用于 Azure Red Hat OpenShift 群集;主要区别是部署 Azure Red Hat OpenShift 群集,然后按照以下步骤将 kubectl 命令替换为 oc

  • Microsoft 支持数据移动、AG 和 SQL Server 组件。 DH2i 负责支持 DxEnterprise 产品,包括群集和仲裁管理。

  • DxOperator 是对 Kubernetes 的软件扩展,使用自定义资源定义来自动化 DxEnterprise 群集的部署。 然后,DxEnterprise 提供所有检测,以便为 Kubernetes 中的 SQL Server AG 工作负载创建、配置、管理和提供自动故障转移。 可以注册免费的 DxEnterprise 软件许可证。 有关详细信息,请参阅 DxOperator 快速入门指南

使用本文中提及的步骤,了解如何部署 StatefulSet 并使用 DH2i DxOperator 创建和配置包含 AKS 上托管的三个副本 (replica) 的 AG。

本教程包含以下几个步骤:

  • 使用 mssql-conf 设置在 AKS 群集上创建 configmap 对象
  • 安装 DxOperator
  • 创建机密对象
  • 使用 YAML 文件部署 3 副本 (replica) SQL AG
  • 连接到 SQL Server

先决条件

  • Azure Kubernetes 服务 (AKS) 或 Kubernetes 群集。

  • 启用了 AG 功能和隧道的有效 DxEnterprise 许可证。 有关详细信息,请参阅适用于非生产用途的开发人员版或适用于生产工作负载的 DxEnterprise 软件

创建 configmap 对象

  1. 在 AKS 中,根据要求创建具有 configmap 设置的 对象。 在本例中,使用名为 configMap 的文件和以下参数创建 mssqlconfig.yaml

    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="<password>"

注意

密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。

创建用于存储 DH2i 许可证密钥的机密。 访问 DH2i 的网站以获取开发人员许可证。 在下面的示例中,将 XXXX-XXXX-XXXX-XXXX 替换为许可证秘钥。

kubectl create secret generic dxe --from-literal=DX_PASSKEY="<password>" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

安装 DxOperator

要安装 DxOperator,必须使用以下示例下载 DxOperator YAML 文件,然后应用 YAML 文件。

  1. 使用以下命令部署描述如何设置 AG 的 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
    

创建可用性组侦听器

通过将选择器设置为上一步骤中 metadata.name 的值,应用以下 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