适用于:Linux 上的 SQL Server
本教程介绍如何使用 DH2i DxOperator 为部署到 Azure Kubernetes 服务(AKS)群集的基于 SQL Server Linux 的容器配置 SQL Server Always On 可用性组(AG)。 这些流程同样适用于 Azure Red Hat OpenShift 集群。 主要区别在于部署了 Azure Red Hat OpenShift 集群,随后在以下步骤中将kubectl命令替换为oc
通过本文中的步骤,你将了解如何部署 StatefulSet,并使用 DH2i DxOperator 创建和配置一个在 AKS 上托管的、具有三个副本的 AG。
本教程包含以下几个步骤:
- 使用 mssql-conf 设置在 AKS 群集上创建
configmap对象 - 安装 DxOperator
- 创建机密对象
- 使用YAML文件部署三副本SQL Server可用性组
- 连接到SQL Server
先决条件
Azure Kubernetes 服务 (AKS) 或 Kubernetes 群集。
已启用 AG 功能和隧道的有效 DxEnterprise 许可证。 有关详细信息,请参阅适用于非生产用途的开发人员版或适用于生产工作负载的 DxEnterprise 软件。
创建 configmap 对象
在 AKS 中,创建
configmap对象,并根据你的要求配置 mssql-conf 设置。 在此示例中,您将使用一个名为mssqlconfig.yaml的文件和以下参数来创建configmap。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="<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 文件。
使用以下命令部署描述如何设置AG的YAML文件。 以
DxOperator.yaml等自定义名称保存文件。curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml kubectl apply -f DxOperator.yaml安装操作员后,你可以部署SQL Server容器,配置可用性组,定义副本,并部署和配置DxEnterprise集群。 请修改以下示例部署 YAML 文件
DxSqlAg.yaml,以符合您的需求。apiVersion: dh2i.com/v1 kind: DxSqlAg metadata: name: contoso-sql spec: sqlAgConfiguration: synchronousReplicas: 3 asynchronousReplicas: 0 # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL configurationOnlyReplicas: 0 availabilityGroupName: AG1 # Adds auto-generated load balancers to serviceTemplates for easy cluster access # For more customization, use the serviceTemplates section below #createLoadBalancers: true # Listener port for the availability group (uncomment to apply) #availabilityGroupListenerPort: 51433 # For a contained availability group, add the option CONTAINED #availabilityGroupOptions: CONTAINED # Disables automatic availability mode switching when scaling down #disableModeSwitching: true statefulSetSpec: podspec: dxEnterpriseContainer: image: "docker.io/dh2i/dxe:latest" imagePullPolicy: Always acceptEula: true clusterSecret: dxe vhostName: VHOST1 # Configuration options for the required persistent volume claim for DxEnterprise #volumeClaimConfiguration: # Set custom storage class for DxE PVC #storageClassName: example-class mssqlServerContainer: image: "mcr.microsoft.com/mssql/server:2025-latest" imagePullPolicy: Always mssqlSecret: mssql acceptEula: true mssqlPID: Developer # Set a non-default SQL Server port. DxOperator will auto-detect # the port from other sources too, such as mssqlConfigMap mssqlTcpPort: 51444 # The MSSQL configMap (mssql.conf file) mssqlConfigMap: mssql-config # Configuration options for the required persistent volume claim for SQL Server #volumeClaimConfiguration: # resources: # requests: # storage: 2Gi # Additional pod containers, such as mssql-tools #containers: #- name: mssql-tools #image: "mcr.microsoft.com/mssql-tools" #command: [ "/bin/sh" ] #args: [ "-c", "tail -f /dev/null" ]部署
DxSqlAg.yaml文件。kubectl apply -f DxSqlAg.yaml
创建可用性组侦听器
更新你的
DxSqlAg.yaml文件中的availabilityGroupListenerPort值:spec: sqlAgConfiguration: availabilityGroupListenerPort: 51433应用此文件:
kubectl apply -f DxSqlAg.yaml应用以下 YAML来为监听器添加负载均衡器。
apiVersion: v1 kind: Service metadata: name: contoso-cluster-lb spec: type: LoadBalancer selector: dh2i.com/entity-name: contoso-sql # This label points to whichever pod is the active Vhost member dh2i.com/active-vhost-vhost1: "true" 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 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确认三个SQL Server Pod都在运行。
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