使用 Azure Kubernetes 服务上的 DH2i DxOperator 在 Kubernetes 上部署可用性组
适用于:SQL Server - Linux
本教程介绍如何使用 DH2i DxOperator 为部署到 Azure Kubernetes 服务 (AKS) Kubernetes 群集的基于 Linux 的 SQL Server 容器配置 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
对象
在 AKS 中,根据要求创建具有 mssql-conf 设置的
configmap
对象。 在本例中,使用名为configMap
的文件和以下参数创建mssqlconfig.yaml
。apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true
通过执行以下命令创建对象。
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 文件。
使用以下命令部署描述如何设置 AG 的 YAML。 以
DxOperator.yaml
等自定义名称保存文件。curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml kubectl apply –f DxOperator.yaml
安装运算符后,可以部署 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" ]
部署
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