Bereitstellen von Verfügbarkeitsgruppen auf Kubernetes mit DH2i DxOperator auf Azure Kubernetes Service

Gilt für:SQL Server unter Linux

In diesem Lernprogramm wird erläutert, wie SQL Server Always On-Verfügbarkeitsgruppen (AGs) für LINUX-basierte SQL Server-Container konfiguriert werden, die in einem Azure Kubernetes Service (AKS)-Cluster mit DH2i DxOperator bereitgestellt werden. Diese Verfahren gelten auch für Azure Red Hat OpenShift-Cluster. Der Hauptunterschied ist die Bereitstellung eines Azure Red Hat OpenShift-Clusters, gefolgt von der Ersetzung von kubectl-Befehlen durch oc in den folgenden Schritten.

Mit den Schritten in diesem Artikel lernen Sie, wie Sie ein StatefulSet bereitstellen und den DH2i DxOperator verwenden, um eine AG mit drei Repliken zu erstellen und zu konfigurieren, die auf AKS gehostet werden.

Dieses Lernprogramm besteht aus den folgenden Schritten:

  • Erstellen eines configmap-Objekts auf einem AKS-Cluster mit mssql-conf-Einstellungen
  • Installieren von DxOperator
  • Erstellen geheimer Objekte
  • Bereitstellen einer SQL Server-Verfügbarkeitsgruppe mit drei Replikaten mithilfe einer YAML-Datei
  • Verbindung mit SQL Server herstellen

Voraussetzungen

  • Einen AKS- (Azure Kubernetes Service) oder Kubernetes-Cluster.

  • Eine gültige Lizenz für DxEnterprise mit aktivierten AG-Features und Tunneln. Weitere Informationen finden Sie in der Entwickleredition für die Nichtproduktionsverwendung oder dxEnterprise-Software für Produktionsworkloads.

Erstellen Sie das Objekt configmap

  1. Erstellen Sie in AKS das Objekt configmap mit mssql-conf-Einstellungen entsprechend Ihren Anforderungen. In diesem Beispiel erstellst du die configmap mithilfe einer Datei namens mssqlconfig.yaml mit den folgenden Parametern.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Erstelle das Objekt, indem du folgenden Befehl ausführst.

    kubectl apply -f ./mssqlconfig.yaml
    

Erstellen geheimer Objekte

Erstellen Sie einen geheimen Schlüssel zum Speichern des sa-Passworts für SQL Server.

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

Caution

Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Standardmäßig muss das Kennwort mindestens acht Zeichen lang sein und Zeichen aus drei der folgenden vier Sätze enthalten: Großbuchstaben, Kleinbuchstaben, Basis-10 Ziffern und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.

Erstellen Sie einen geheimen Schlüssel zum Speichern des Lizenzschlüssels für DH2i. Besuchen Sie die Website von DH2i, um eine Entwicklerlizenz zu erhalten. Ersetzen Sie XXXX-XXXX-XXXX-XXXX im folgenden Beispiel durch Ihren Lizenzschlüssel.

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

Installieren von DxOperator

Um DxOperator zu installieren, laden Sie die DxOperator-YAML-Datei anhand folgender Beispiele herunter und wenden Sie dann die YAML-Datei an.

  1. Bereite die YAML-Datei aus, die beschreibt, wie man eine AG einrichtet, indem du den folgenden Befehl verwendest. Speichern der Datei unter einem angepassten Namen wie z. B. DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Nachdem Sie den Operator installiert haben, können Sie SQL Server-Container bereitstellen, die Verfügbarkeitsgruppe konfigurieren, Replikate definieren und den DxEnterprise-Cluster bereitstellen und konfigurieren. Ändern Sie die folgende Beispiel-YAML-Bereitstellungsdatei DxSqlAg.yaml, um Ihren Anforderungen gerecht zu werden.

    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. Stellen Sie die Datei DxSqlAg.yaml bereit.

    kubectl apply -f DxSqlAg.yaml
    

Erstellen eines Listeners für eine Verfügbarkeitsgruppe

  1. Aktualisieren Sie den availabilityGroupListenerPort Wert in Ihrer DxSqlAg.yaml Datei:

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Wenden Sie die Datei an:

    kubectl apply -f DxSqlAg.yaml
    
  3. Wenden Sie das folgende YAML an, um einen Load Balancer für den Zuhörer hinzuzufügen.

    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. Überprüfen Sie, ob die Dienste und Load Balancer laufen.

    kubectl get services
    

    Die Ausgabe sieht etwa folgendermaßen aus:

    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. Überprüfen Sie, ob alle drei SQL Server-Pods laufen.

    kubectl get pods
    

    Die Ausgabe sieht etwa folgendermaßen aus:

    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