Bagikan melalui


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 utama adalah penyebaran kluster Azure Red Hat OpenShift, diikuti dengan mengganti kubectl perintah dengan oc dalam langkah-langkah berikut.

  • Microsoft mendukung komponen pergerakan data, AG, dan SQL Server. DH2i bertanggung jawab atas dukungan produk DxEnterprise, yang mencakup manajemen kluster dan kuorum.

  • DxOperator adalah ekstensi perangkat lunak untuk Kubernetes yang menggunakan definisi sumber daya kustom untuk mengotomatiskan penyebaran kluster DxEnterprise. DxEnterprise kemudian menyediakan semua instrumentasi untuk membuat, mengonfigurasi, mengelola, dan menyediakan failover otomatis untuk beban kerja SQL Server AG di Kubernetes. Anda dapat mendaftar untuk lisensi perangkat lunak DxEnterprise gratis. Untuk informasi selengkapnya, lihat Panduan Mulai Cepat DxOperator.

Dengan menggunakan langkah-langkah yang disebutkan dalam artikel ini, pelajari 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 3 replika SQL AG menggunakan file YAML
  • Sambungkan ke SQL Server

Prasyarat

  • Kluster Azure Kubernetes Service (AKS) atau Kubernetes.

  • Lisensi DxEnterprise yang valid dengan fitur AG dan terowongan 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 configMap, menggunakan file yang disebut 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>"

Perhatian

Kata sandi Anda harus mengikuti kebijakan kata sandi 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, Anda harus mengunduh file YAML DxOperator menggunakan contoh berikut, lalu menerapkan file YAML.

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

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Setelah menginstal operator, Anda dapat menyebarkan kontainer SQL Server, mengonfigurasi grup ketersediaan, menentukan replika, menyebarkan, dan mengonfigurasi kluster DxEnterprise. Berikut adalah contoh file YAML penyebaran yang disebut DxEnterpriseSqlAg.yaml, yang dapat Anda ubah agar sesuai dengan kebutuhan Anda.

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

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Membuat listener grup ketersediaan

Terapkan YAML berikut untuk menambahkan load balancer, dengan mengatur pemilih ke nilai metadata.name di langkah sebelumnya. Contohnya, 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

Verifikasi penetapan penyebaran dan load balancer.

kubectl get pods
kubectl get services

Anda akan melihat output yang 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

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