Delen via


Beschikbaarheidsgroepen implementeren in Kubernetes met DH2i DxOperator in Azure Kubernetes Service

Van toepassing op:SQL Server - Linux

In deze zelfstudie wordt uitgelegd hoe u AG's (AlwaysOn-beschikbaarheidsgroepen) voor SQL Server Linux-containers configureert die zijn geïmplementeerd in een AKS-cluster (Azure Kubernetes Service), met behulp van DH2i DxOperator. Deze procedures zijn ook van toepassing op Azure Red Hat OpenShift-clusters; het primaire onderscheid is de implementatie van een Azure Red Hat OpenShift-cluster, gevolgd door het vervangen van kubectl opdrachten oc in de volgende stappen.

  • Microsoft biedt ondersteuning voor gegevensverplaatsing, AG en SQL Server-onderdelen. DH2i is verantwoordelijk voor ondersteuning van het DxEnterprise-product, dat cluster- en quorumbeheer omvat.

  • DxOperator is een software-extensie voor Kubernetes die gebruikmaakt van aangepaste resourcedefinities om de implementatie van DxEnterprise-clusters te automatiseren. DxEnterprise biedt vervolgens alle instrumentatie voor het maken, configureren, beheren en bieden van automatische failover voor SQL Server AG-workloads in Kubernetes. U kunt zich registreren voor een gratis DxEnterprise-softwarelicentie. Zie de Handleiding aan de slag met DxOperator voor meer informatie.

Met behulp van de stappen die in dit artikel worden genoemd, leert u hoe u een StatefulSet implementeert en de DH2i DxOperator gebruikt om een AG te maken en configureren met drie replica's die worden gehost op AKS.

Deze zelfstudie bestaat uit de volgende stappen:

  • Een object maken in een configmap AKS-cluster met mssql-conf-instellingen
  • DxOperator installeren
  • Een geheim object maken
  • 3 replica SQL AG implementeren met behulp van YAML-bestand
  • Verbinding maken met SQL Server

Vereiste voorwaarden

  • Een Azure Kubernetes Service (AKS) of Kubernetes-cluster.

  • Een geldige DxEnterprise-licentie waarvoor AG-functies en tunnels zijn ingeschakeld. Zie de developer edition voor niet-productiegebruik of DxEnterprise-software voor productieworkloads voor meer informatie.

configmap Het object maken

  1. Maak in AKS het configmap object met mssql-conf-instellingen op basis van uw vereisten. In dit voorbeeld maakt u het configMap, met behulp van een bestand dat wordt aangeroepen mssqlconfig.yaml met de volgende parameters.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Maak het object door de volgende opdracht uit te voeren.

    kubectl apply -f ./mssqlconfig.yaml
    

Geheime objecten maken

Maak een geheim om het sa wachtwoord voor SQL Server op te slaan.

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

Waarschuwing

Uw wachtwoord moet voldoen aan het standaard SQL Server-wachtwoordbeleid . Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.

Maak een geheim voor het opslaan van de licentiesleutel voor DH2i. Ga naar de website van DH2i om een ontwikkelaarslicentie te krijgen. Vervang XXXX-XXXX-XXXX-XXXX in het volgende voorbeeld door uw licentiesleutel.

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

DxOperator installeren

Als u DxOperator wilt installeren, moet u het YAML-bestand DxOperator downloaden met het volgende voorbeeld en vervolgens het YAML-bestand toepassen.

  1. Implementeer de YAML die beschrijft hoe u een AG instelt met behulp van de volgende opdracht. Sla het bestand op met een aangepaste naam, zoals DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Nadat u de operator hebt geïnstalleerd, kunt u SQL Server-containers implementeren, de beschikbaarheidsgroep configureren, replica's definiëren, het DxEnterprise-cluster implementeren en configureren. Hier is een voorbeeld van een deployment YAML-bestand genaamd DxEnterpriseSqlAg.yaml, dat u kunt wijzigen om het aan uw vereisten aan te passen.

    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. Implementeer het DxEnterpriseSqlAg.yaml bestand.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Een listener voor een beschikbaarheidsgroep maken

Gebruik de volgende YAML om een load balancer toe te voegen door de selector in te stellen op de waarde van `metadata.name` in de vorige stap. In dit voorbeeld is het 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

Controleer de toewijzingen van de deployment-configuratie en de load balancer.

kubectl get pods
kubectl get services

De uitvoer moet er ongeveer als het volgende voorbeeld uitzien.

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