Distribuire gruppi di disponibilità in Kubernetes con DH2i DxOperator in servizio Azure Kubernetes

Si applica a:SQL Server su Linux

Questa esercitazione illustra come configurare i gruppi di disponibilità Always On di SQL Server per i contenitori basati su SQL Server Linux distribuiti in un cluster del servizio Azure Kubernetes usando DH2i DxOperator. Queste procedure sono applicabili anche ai cluster Azure Red Hat OpenShift; la distinzione principale è la distribuzione di un cluster Azure Red Hat OpenShift, seguito da comandi sostitutivi kubectl con oc nei passaggi seguenti.

  • Microsoft supporta lo spostamento dei dati, il gruppo di disponibilità e i componenti di SQL Server. DH2i è responsabile del supporto del prodotto DxEnterprise, che include la gestione del cluster e del quorum.

  • DxOperator è un'estensione software per Kubernetes che usa definizioni di risorse personalizzate per automatizzare la distribuzione dei cluster DxEnterprise. DxEnterprise fornisce quindi tutti gli strumenti per creare, configurare, gestire e garantire il failover automatico per i carichi di lavoro dei gruppi di disponibilità di SQL Server in Kubernetes. È possibile registrarsi per ottenere una licenza software DxEnterprise gratuita. Per altre informazioni, vedere la Guida introduttiva a DxOperator.

Usando i passaggi descritti in questo articolo, scopri come distribuire uno StatefulSet e usare DH2i DxOperator per creare e configurare un AG con tre repliche, ospitato in AKS.

Questa esercitazione è costituita dai passaggi seguenti:

  • Creare un oggetto configmap nel cluster AKS con le impostazioni di mssql-conf
  • Installare DxOperator
  • Creare un oggetto segreto
  • Distribuire un gruppo di disponibilità SQL con 3 repliche tramite un file YAML
  • Connessione a SQL Server

Prerequisiti

  • Un cluster di Servizio Azure Kubernetes (AKS) o un cluster Kubernetes.

  • Una licenza DxEnterprise valida con funzionalità di gruppi di disponibilità e tunnel abilitati. Per altre informazioni, vedere l'edizione per sviluppatori per l'utilizzo non di produzione o il software DxEnterprise per i carichi di lavoro di produzione.

Creare l'oggetto configmap

  1. In AKS, creare l'oggetto configmap, che include le impostazioni mssql-conf in base ai requisiti. In questo esempio viene creato configMap, usando un file denominato mssqlconfig.yaml con i parametri seguenti.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Creare l’oggetto eseguendo i comandi seguenti.

    kubectl apply -f ./mssqlconfig.yaml
    

Creare oggetti segreti

Creare un segreto per archiviare la sa password per SQL Server.

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

Caution

La password deve seguire la politica predefinita di SQL Server password. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

Creare un segreto per archiviare il codice di licenza per DH2i. Visitare il sito Web di DH2i per ottenere una licenza per sviluppatori. Sostituire XXXX-XXXX-XXXX-XXXX nell'esempio seguente con il codice di licenza.

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

Installare DxOperator

Per installare DxOperator, è necessario scaricare il file YAML DxOperator usando l'esempio seguente e quindi applicare il file YAML.

  1. Distribuisci il file YAML che descrive come configurare un AG con il comando seguente. Salvare il file con un nome personalizzato, come DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Dopo aver installato l'operatore è possibile distribuire i contenitori di SQL Server, configurare il gruppo di disponibilità, definire le repliche, distribuire e configurare il cluster DxEnterprise. Ecco un file YAML di distribuzione di esempio denominato DxEnterpriseSqlAg.yaml, che è possibile modificare in base alle esigenze.

    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. Distribuisci il file DxEnterpriseSqlAg.yaml.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Creare un listener del gruppo di disponibilità

Applicare il codice YAML seguente per aggiungere un servizio di bilanciamento del carico impostando il selettore sul valore di metadata.name nel passaggio precedente. In questo esempio è 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

Verificare le assegnazioni di distribuzione e bilanciamento del carico.

kubectl get pods
kubectl get services

L'output è simile al seguente esempio:

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