Menyebarkan grup ketersediaan di Kubernetes dengan DH2i DxOperator di Azure Kubernetes Service

Berlaku untuk:SQL Server di Linux

Tutorial ini menjelaskan cara mengonfigurasi grup ketersediaan (AG) AlwaysOn SQL Server untuk kontainer berbasis Linux SQL Server yang disebarkan ke kluster Azure Kubernetes Service (AKS), menggunakan DH2i DxOperator. Prosedur ini juga berlaku untuk kluster Azure Red Hat OpenShift. Perbedaan utamanya adalah penerapan kluster Azure Red Hat OpenShift, yang diikuti dengan penggantian perintah kubectl menjadi oc pada langkah-langkah berikut.

Dengan menggunakan langkah-langkah dalam artikel ini, Anda mempelajari cara menyebarkan StatefulSet dan menggunakan DH2i DxOperator untuk membuat dan mengonfigurasi AG dengan tiga replika, yang dihosting di AKS.

Tutorial ini terdiri dari langkah-langkah berikut:

  • Membuat configmap objek pada kluster AKS dengan pengaturan mssql-conf
  • Menginstal DxOperator
  • Membuat objek rahasia
  • Menyebarkan grup ketersediaan SQL Server tiga replika menggunakan file YAML
  • Sambungkan ke SQL Server

Prasyarat

  • Kluster Azure Kubernetes Service (AKS) atau kluster Kubernetes.

  • Lisensi DxEnterprise yang valid dengan fitur AG serta tunnel yang diaktifkan. Untuk informasi selengkapnya, lihat edisi pengembang untuk penggunaan nonproduksi, atau perangkat lunak DxEnterprise untuk beban kerja produksi.

configmap Membuat objek

  1. Di AKS, buat configmap objek , yang memiliki pengaturan mssql-conf berdasarkan kebutuhan Anda. Dalam contoh ini, Anda membuat dengan configmap menggunakan file yang dipanggil mssqlconfig.yaml dengan parameter berikut.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Buat objek dengan menjalankan perintah berikut.

    kubectl apply -f ./mssqlconfig.yaml
    

Membuat objek rahasia

Buat rahasia untuk menyimpan sa kata sandi untuk SQL Server.

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

Caution

Kata sandi Anda harus mengikuti kebijakan password default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

Buat rahasia untuk menyimpan kunci lisensi untuk DH2i. Kunjungi situs web DH2i untuk mendapatkan lisensi pengembang. Ganti XXXX-XXXX-XXXX-XXXX dalam contoh berikut dengan kunci lisensi Anda.

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

Menginstal DxOperator

Untuk menginstal DxOperator, unduh file YAML DxOperator dengan menggunakan contoh berikut, lalu terapkan file YAML.

  1. Sebarkan file YAML yang menjelaskan cara menyiapkan AG dengan menggunakan perintah berikut. Simpan file dengan nama kustom, seperti DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Setelah menginstal operator, Anda dapat menyebarkan kontainer SQL Server, mengonfigurasi grup ketersediaan, menentukan replika, serta menyebarkan serta mengonfigurasi kluster DxEnterprise. Ubah contoh file YAML penyebaran berikut, DxSqlAg.yaml, agar sesuai dengan kebutuhan Anda.

    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. Sebarkan file DxSqlAg.yaml.

    kubectl apply -f DxSqlAg.yaml
    

Buat listener grup ketersediaan

  1. Perbarui availabilityGroupListenerPort nilai dalam file Anda DxSqlAg.yaml :

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Terapkan file:

    kubectl apply -f DxSqlAg.yaml
    
  3. Terapkan konfigurasi YAML berikut untuk menambahkan load balancer untuk listener.

    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. Verifikasi bahwa layanan dan penyeimbang beban sedang berjalan.

    kubectl get services
    

    Output terlihat mirip dengan contoh berikut:

    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. Verifikasi bahwa ketiga pod SQL Server sedang berjalan.

    kubectl get pods
    

    Output terlihat mirip dengan contoh berikut:

    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