Partager via


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

S’applique à : SQL Server - Linux

Ce tutoriel explique comment configurer des groupes de disponibilité Always On SQL Server pour des conteneurs basés sur Linux déployés sur un cluster Kubernetes AKS (Azure Kubernetes Service) à 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, puis le remplacement des commandes kubectl par oc lors des étapes suivantes.

Remarque

Microsoft prend en charge le déplacement des données, le groupe de disponibilité et les composants SQL Server. DH2i est responsable de la prise en charge du produit DxEnterprise, qui comprend la gestion des clusters et du quorum. DxOperator est une extension logicielle à Kubernetes qui utilise des définitions de ressources personnalisées pour automatiser le déploiement de clusters DxEnterprise. DxEnterprise fournit ensuite toutes les instrumentations pour créer, configurer, gérer et fournir un basculement automatique pour les charges de travail du groupe de disponibilité SQL Server dans Kubernetes.

Vous pouvez vous inscrire pour recevoir une licence logicielle DxEnterprise gratuite. Pour plus d’informations, consultez le Guide de démarrage rapide de DxOperator.

À l’aide des étapes mentionnées dans cet article, découvrez comment déployer un StatefulSet et utiliser DH2i DxOperator pour créer et configurer un groupe de disponibilité avec trois réplicas hébergés 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éployer un groupe de disponibilité SQL à 3 réplicas via un fichier YAML
  • Se connecter à SQL Server

Prérequis

  • Cluster Azure Kubernetes Service (AKS) ou Kubernetes.

  • Licence DxEnterprise valide avec les fonctionnalités de groupe de disponibilité et les tunnels 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 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="Password123"

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="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

Installer DxOperator

Pour installer DxOperator, vous devez télécharger le fichier YAML DxOperator selon l’exemple suivant, puis appliquer le fichier YAML.

  1. Déployez le YAML décrivant comment configurer un groupe de disponibilité à l’aide de la commande suivante. Enregistrez le fichier sous un nom personnalisé, tel que DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.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éplicas et déployer et configurer le cluster DxEnterprise. Voici un exemple de fichier YAML de déploiement appelé DxEnterpriseSqlAg.yaml, que vous pouvez modifier selon vos besoins.

    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. Déployez le fichier DxEnterpriseSqlAg.yaml.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Créer un écouteur de groupe de disponibilité

Appliquez le YAML suivant pour ajouter un équilibreur de charge en définissant le sélecteur sur la valeur de metadata.name à l’étape précédente. Dans cet exemple, il s’agit de 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

Vérifiez les affectations de déploiement et d’équilibreur de charge.

kubectl get pods
kubectl get services

Vous devez obtenir une sortie similaire à la suivante.

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