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 si applicano anche ai cluster Azure Red Hat OpenShift. La principale distinzione è il dispiegamento di un cluster Azure Red Hat OpenShift, seguito dalla sostituzione kubectl dei comandi con oc nei passaggi seguenti.

Seguendo i passaggi di questo articolo, impari come distribuire un StatefulSet e utilizzare il DH2i DxOperator per creare e configurare un AG con tre repliche, ospitato su AKS.

Questa esercitazione è costituita dai passaggi seguenti:

  • Creare un oggetto configmap nel cluster AKS con le impostazioni di mssql-conf
  • Installare DxOperator
  • Creare oggetti segreti
  • Distribuisci un gruppo di disponibilità SQL Server a tre repliche usando 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, si crea il configmap by usando un file chiamato mssqlconfig.yaml con i seguenti parametri.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Crea l'oggetto eseguendo il seguente comando.

    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, scarica il file YAML di DxOperator usando il seguente esempio, e poi applica il file YAML.

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

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Dopo aver installato l'operatore, puoi distribuire container SQL Server, configurare il gruppo di disponibilità, definire repliche e distribuire e configurare il cluster DxEnterprise. Modifica il seguente esempio di file YAML di deployment, DxSqlAg.yaml, per adattarlo alle tue esigenze.

    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: 51433
            # 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. Distribuisci il file DxSqlAg.yaml.

    kubectl apply -f DxSqlAg.yaml
    

Creare un listener del gruppo di disponibilità

  1. Aggiorna il availabilityGroupListenerPort valore nel tuo DxSqlAg.yaml file:

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Applicare il file:

    kubectl apply -f DxSqlAg.yaml
    
  3. Applica il seguente YAML per aggiungere un bilanciatore di carico per l'ascoltatore.

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-cluster-lb
    spec:
      type: LoadBalancer
      selector:
        dh2i.com/entity: 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. Verifica che i servizi e i bilanciatori di carico siano in funzione.

    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
    
  5. Verifica che tutti e tre i pod di SQL Server siano in funzione.

    kubectl get pods
    

    L'output è simile al seguente esempio:

    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