Implementación de grupos de disponibilidad en Kubernetes con DH2i DxOperator en Azure Kubernetes Service
Se aplica a: SQL Server - Linux
En este tutorial se explica cómo configurar grupos de disponibilidad Always On (AG) de SQL Server para contenedores SQL Server basados en Linux implementados en un clúster de Kubernetes de Azure Kubernetes Service (AKS), mediante DH2i DxOperator. Estos procedimientos también son aplicables a los clústeres de Red Hat OpenShift en Azure; la distinción principal es la implementación de un clúster de Red Hat OpenShift en Azure, seguido de sustituir comandos kubectl
por oc
en los pasos siguientes.
Nota:
Microsoft admite los componentes de movimiento de datos, AG y SQL Server. DH2i es responsable del soporte técnico del producto DxEnterprise, que incluye la administración de clústeres y cuórum. DxOperator es una extensión de software para Kubernetes que utiliza definiciones de recursos personalizadas para automatizar la implementación de clústeres de DxEnterprise. DxEnterprise proporciona toda la instrumentación para crear, configurar, administrar y proporcionar conmutación automática por error para las cargas de trabajo del AG de SQL Server en Kubernetes.
Puede registrarse para obtener una licencia gratuita de software DxEnterprise. Para más información, consulte la guía de inicio rápido de DxOperator.
Con los pasos mencionados en este artículo, aprenderá a implementar un elemento StatefulSet y a utilizar la solución DH2i DxOperator para crear y configurar un AG con tres réplicas alojadas en AKS.
Este tutorial se compone de los siguientes pasos:
- Creación de un objeto
configmap
en el clúster de AKS con la configuración mssql-conf - Instalación de DxOperator
- Creación de objetos secretos
- Implementación de un AG de SQL de réplica 3 mediante el archivo YAML
- Conectar a SQL Server
Requisitos previos
Un clúster de Kubernetes o Azure Kubernetes Service (AKS).
Una licencia de DxEnterprise válida con las características de grupo de disponibilidad y los túneles habilitados. Para obtener más información, consulte la edición para desarrolladores para el uso en entornos que no son de producción o el software DxEnterprise para cargas de trabajo de producción.
Cree el objeto configmap
En AKS, cree el objeto
configmap
, que tiene la configuración mssql-conf en función de sus requisitos. En este ejemplo, crearáconfigMap
mediante un archivo denominadomssqlconfig.yaml
con los parámetros siguientes.apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true
Cree el objeto ejecutando el siguiente comando.
kubectl apply -f ./mssqlconfig.yaml
Cree objetos secretos
Cree un secreto para almacenar la contraseña sa
de SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="Password123"
Cree un secreto para almacenar la clave de licencia para DH2i. Visite el sitio web de DH2i para obtener una licencia de desarrollador. En el ejemplo siguiente, reemplace XXXX-XXXX-XXXX-XXXX
con su clave de licencia.
kubectl create secret generic dxe --from-literal=DX_PASSKEY="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX
Instalación de DxOperator
Para instalar DxOperator, debe descargar el archivo YAML DxOperator mediante el ejemplo siguiente y después aplicar el archivo YAML.
Implemente el YAML que describe cómo configurar un AG mediante el siguiente comando. Guarde el archivo con un nombre personalizado, como
DxOperator.yaml
.curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml kubectl apply –f DxOperator.yaml
Después de instalar el operador, puede implementar contenedores de SQL Server, configurar el grupo de disponibilidad, definir réplicas e implementar y configurar el clúster DxEnterprise. Este es un archivo YAML de implementación de ejemplo denominado
DxEnterpriseSqlAg.yaml
, que puede cambiar para adaptarse a sus requisitos.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" ]
Implementación del archivo
DxEnterpriseSqlAg.yaml
.kubectl apply -f DxEnterpriseSqlAg.yaml
Creación del agente de escucha del grupo de disponibilidad
Aplique el siguiente YAML para agregar un equilibrador de carga estableciendo el selector en el valor de metadata.name
en el paso anterior. En este ejemplo, es 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
Verifique las asignaciones de implementación y equilibrador de carga.
kubectl get pods
kubectl get services
Debería ver una salida similar al ejemplo siguiente:
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
Contenido relacionado
- Implementación de grupos de disponibilidad con DH2i DxEnterprise en Kubernetes
- Implementación de contenedores de SQL Server en Azure Kubernetes Service
- Implementación de contenedores de SQL Server para Linux en Kubernetes con StatefulSets
- Tutorial: Configuración de la autenticación de Active Directory con SQL Server en contenedores de Linux