Déployer des groupes de disponibilité sur Kubernetes avec DH2i DxOperator sur Azure Kubernetes Service

S’applique à :SQL Server sur Linux

Ce tutoriel explique comment configurer des groupes de disponibilité Always On SQL Server pour les conteneurs Linux SQL Server déployés sur un cluster Azure Kubernetes Service (AKS) à l’aide de DH2i DxOperator. Ces procédures s’appliquent également aux clusters Azure Red Hat OpenShift. La principale distinction est le déploiement d’un cluster Azure Red Hat OpenShift, suivi de la substitution kubectl des commandes par oc dans les étapes suivantes.

En suivant les étapes de cet article, vous apprenez à déployer un StatefulSet et à utiliser le DH2i DxOperator pour créer et configurer un AG avec trois répliques, hébergé sur AKS.

Il se compose des étapes suivantes :

  • Créer un objet configmap sur un cluster AKS avec les paramètres mssql-conf
  • Installer DxOperator
  • Créer des objets secrets
  • Déploie un groupe de disponibilité SQL Server à trois répliques à l’aide d’un fichier YAML
  • Se connecter à SQL Server

Prerequisites

  • Un cluster Azure Kubernetes Service (AKS) ou Kubernetes.

  • Licence DxEnterprise valide où les fonctionnalités AG et les tunnels sont activés. Pour plus d’informations, consultez l’édition développeur en cas d’utilisation hors production ou le logiciel DxEnterprise pour les charges de travail de production.

Créer l’objet configmap

  1. Dans AKS, créez l’objet configmap, qui a des paramètres mssql-conf basés sur vos besoins. Dans cet exemple, vous créez le configmap à l’aide d’un fichier appelé mssqlconfig.yaml avec les paramètres suivants.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Créez l’objet en exécutant la commande suivante.

    kubectl apply -f ./mssqlconfig.yaml
    

Créer des objets secrets

Créez un secret pour stocker le mot de passe sa pour SQL Server.

kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"

Caution

Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.

Créez un secret pour stocker la clé de licence pour DH2i. Visitez le site web de DH2i pour obtenir une licence de développeur. Dans l’exemple suivant, remplacez XXXX-XXXX-XXXX-XXXX par votre clé de licence.

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

Installer DxOperator

Pour installer DxOperator, téléchargez le fichier YAML de DxOperator en utilisant l’exemple suivant, puis appliquez le fichier YAML.

  1. Déploie le fichier YAML qui décrit comment configurer un AG en utilisant la commande suivante. Enregistrez le fichier sous un nom personnalisé, tel que DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Après avoir installé l’opérateur, vous pouvez déployer des conteneurs SQL Server, configurer le groupe de disponibilité, définir des répliques, puis déployer et configurer le cluster DxEnterprise. Modifiez le fichier YAML de déploiement d’exemple suivant, DxSqlAg.yaml, pour qu’il corresponde à vos besoins.

    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" ]
    
  3. Déployez le fichier DxSqlAg.yaml.

    kubectl apply -f DxSqlAg.yaml
    

Créer un écouteur de groupe de disponibilité

  1. Mettez à jour la availabilityGroupListenerPort valeur dans votre DxSqlAg.yaml fichier :

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Appliquez le fichier :

    kubectl apply -f DxSqlAg.yaml
    
  3. Appliquez le YAML suivant pour ajouter un équilibreur de charge pour l’auditeur.

    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
    
  4. Vérifiez que les services et les équilibreurs de charge fonctionnent.

    kubectl get services
    

    La sortie ressemble à l’exemple suivant :

    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
    
  5. Vérifiez que les trois pods SQL Server fonctionnent bien.

    kubectl get pods
    

    La sortie ressemble à l’exemple suivant :

    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