Nasazení skupin dostupnosti v Kubernetes pomocí DH2i DxOperatoru ve službě Azure Kubernetes Service

Platí pro:SQL Server na Linuxu

Tento kurz vysvětluje, jak nakonfigurovat skupiny dostupnosti AlwaysOn (AG) SQL Serveru pro kontejnery založené na SQL Serveru nasazené do clusteru Azure Kubernetes Service (AKS) pomocí DH2i DxOperatoru. Tyto postupy platí také pro Azure Red Hat OpenShift clustery. Hlavním rozdílem je nasazení clusteru Azure Red Hat OpenShift a následné nahrazení příkazů kubectl za oc v následujících krocích.

Pomocí kroků v tomto článku se naučíte, jak nasadit StatefulSet a použít DH2i DxOperator k vytvoření a konfiguraci AG se třemi replikami, hostovanými na AKS.

Tento kurz se skládá z následujících kroků:

  • Vytvoření objektu configmap v clusteru AKS s nastavením mssql-conf
  • Instalace DxOperatoru
  • Vytváření tajných objektů
  • Nasadit tříreplikovou skupinu dostupnosti SQL Server pomocí YAML souboru
  • Připojení k SQL Serveru

Předpoklady

  • Cluster Azure Kubernetes Service (AKS) nebo Kubernetes.

  • Platná licence DxEnterprise s povolenými funkcemi AG a tunnelovými funkcemi. Další informace najdete v edici developer pro neprodukční využití nebo software DxEnterprise pro produkční úlohy.

Vytvoření objektu configmap

  1. V AKS vytvořte configmap objekt, který má nastavení mssql-conf na základě vašich požadavků. V tomto příkladu vytvoříte configmap pomocí souboru s názvem mssqlconfig.yaml s následujícími parametry.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Vytvořte objekt spuštěním následujícího příkazu.

    kubectl apply -f ./mssqlconfig.yaml
    

Vytváření tajných objektů

Vytvořte tajný kód pro uložení sa hesla pro SQL Server.

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

Caution

Vaše heslo by mělo splňovat výchozí zásady hesla pro SQL Server. Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Vytvořte tajný kód pro uložení licenčního klíče pro DH2i. Navštivte web DH2i a získejte vývojářskou licenci. Nahraďte XXXX-XXXX-XXXX-XXXX v následujícím příkladu vaším licenčním klíčem.

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

Instalace DxOperatoru

Pro instalaci DxOperator si stáhněte soubor DxOperator YAML pomocí následujícího příkladu a poté aplikujte soubor YAML.

  1. Nasadit soubor YAML, který popisuje, jak nastavit AG, pomocí následujícího příkazu. Uložte soubor s vlastním názvem, například DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Po instalaci operátora můžete nasadit SQL Server kontejnery, konfigurovat skupinu dostupnosti, definovat repliky a nasadit a konfigurovat DxEnterprise cluster. Změňte následující ukázkový YAML soubor nasazení, DxSqlAg.yaml, podle svých požadavků.

    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: 51444
            # 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. Nasaďte soubor DxSqlAg.yaml.

    kubectl apply -f DxSqlAg.yaml
    

Vytvořte posluchače skupiny dostupnosti

  1. Aktualizujte availabilityGroupListenerPort hodnotu ve DxSqlAg.yaml vašem souboru:

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Aplikujte soubor:

    kubectl apply -f DxSqlAg.yaml
    
  3. Použijte následující YAML pro přidání load balanceru pro posluchače.

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-cluster-lb
    spec:
      type: LoadBalancer
      selector:
        dh2i.com/entity-name: 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. Ověřte, že služby a vyvažovače zátěže běží.

    kubectl get services
    

    Výstup vypadá podobně jako v následujícím příkladu:

    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. Ověřte, že všechny tři SQL Server pody běží.

    kubectl get pods
    

    Výstup vypadá podobně jako v následujícím příkladu:

    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