Compartir por


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

  1. 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 denominado mssqlconfig.yaml con los parámetros siguientes.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. 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.

  1. 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
    
  2. 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" ]
    
  3. 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