Share via


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

Gilt für:SQL Server – Linux

In diesem Tutorial wird erläutert, wie Sie mit DH2i DxOperator SQL Server-Always On-Verfügbarkeitsgruppen für SQL Server-Linux-basierte Container konfigurieren, die in einem Azure Kubernetes Service-Kubernetes-Cluster (AKS) 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 durch das Ersetzen von kubectl-Befehlen mit oc in den folgenden Schritten.

Hinweis

Microsoft unterstützt Datenverschiebung, AG und SQL Server-Komponenten. DH2i ist für die Unterstützung des DxEnterprise-Produkts verantwortlich, was die Cluster- und Quorumverwaltung umfasst. DxOperator ist eine Software-Erweiterung für Kubernetes, die benutzerdefinierte Ressourcendefinitionen verwendet, um die Bereitstellung von DxEnterprise-Clustern zu automatisieren. DxEnterprise stellt dann die gesamte Instrumentierung für die Erstellung, Konfiguration, Verwaltung und das automatische Failover von SQL Server AG-Workloads in Kubernetes bereit.

Sie können sich für eine kostenlose DxEnterprise-Softwarelizenz registrieren. Weitere Informationen finden Sie im DxOperator-Schnellstarthandbuch.

Anhand der in diesem Artikel beschriebenen Schritte lernen Sie, wie Sie ein StatefulSet bereitstellen und den DH2i DxOperator verwenden, um eine AG mit drei Replikaten zu erstellen und zu konfigurieren, die auf AKS gehostet wird.

Dieses Tutorial besteht aus den folgenden Schritten:

  • Erstellen eines configmap-Objekts auf einem AKS-Cluster mit mssql-conf-Einstellungen
  • Installieren von DxOperator
  • Erstellen eines geheimen Objekts
  • Bereitstellen von drei Replikat SQL AG mithilfe der YAML-Datei
  • Verbindung mit SQL Server herstellen

Voraussetzungen

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

  • Eine gültige DxEnterprise-Lizenz mit aktivierten Verfügbarkeitsgruppenfeatures und Tunneln. Weitere Informationen finden Sie in der Entwickleredition für die Nutzung außerhalb der Produktion oder unter 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 erstellen Sie 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. Erstellen Sie das Objekt, indem Sie den folgenden Befehl ausführen.

    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="Password123"

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

Installieren von DxOperator

Um DxOperator zu installieren, müssen Sie die DxOperator-YAML-Datei anhand des folgenden Beispiels herunterladen und dann die YAML-Datei anwenden.

  1. Stellen Sie die YAML, die die Einrichtung einer AG beschreibt, mit dem folgenden Befehl bereit. Speichern der Datei unter einem angepassten Namen wie z. B. DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Nach der Installation des Operators können Sie SQL Server-Container bereitstellen, die Verfügbarkeitsgruppe konfigurieren, Replikate definieren sowie den DxEnterprise-Cluster bereitstellen und konfigurieren. Nachfolgend ist eine beispielhafte Bereitstellungs-YAML-Datei namens DxEnterpriseSqlAg.yaml aufgeführt, die Sie entsprechend Ihren Anforderungen ändern können.

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

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Erstellen eines Listeners für eine Verfügbarkeitsgruppe

Wenden Sie die folgende YAML an, um einen Load Balancer hinzuzufügen, indem Sie den Selektor im vorherigen Schritt auf den Wert metadata.name einstellen. In diesem Beispiel lautet er 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

Überprüfen Sie die Bereitstellungs- und Lastenausgleichszuweisungen.

kubectl get pods
kubectl get services

Die Ausgabe sollte etwa folgendem Beispiel entsprechen.

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