Bagikan melalui


Mulai cepat: Menyebarkan kluster kontainer SQL Server di Azure atau Red Hat OpenShift

Berlaku untuk:SQL Server di Linux

Panduan cepat ini menunjukkan cara menyiapkan instans SQL Server yang sangat tersedia dalam sebuah kontainer dengan penyimpanan persisten, di Azure Kubernetes Service (AKS) atau Red Hat OpenShift. Jika instans SQL Server gagal, orkestrator secara otomatis membuatnya kembali di pod baru. Layanan kluster juga memberikan ketahanan terhadap kegagalan node.

Panduan cepat ini menggunakan alat baris perintah berikut untuk mengelola kluster.

Layanan kluster Alat baris perintah
Azure Kubernetes Service (AKS) kubectl (Kubernetes CLI)
Azure Red Hat OpenShift oc (OpenShift CLI)

Prasyarat

  • Akun Azure dengan langganan aktif. Buat akun secara gratis.

  • Kluster Kubernetes. Untuk informasi selengkapnya tentang membuat dan menyambungkan ke kluster Kubernetes di AKS dengan kubectl, lihat Menyebarkan kluster Azure Kubernetes Service (AKS).

    Catatan

    Untuk menghindari kegagalan node, kluster Kubernetes memerlukan lebih dari satu node.

  • Azure CLI. Lihat Cara menginstal Azure CLI untuk menginstal versi terbaru.

Membuat kata sandi SA

Akun administrator sistem (sa) harus diamankan dengan kata sandi yang kuat. 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.

  1. Buat sa kata sandi di kluster Kubernetes. Kubernetes dapat mengelola informasi konfigurasi sensitif, seperti kata sandi sebagai rahasia.

  2. Untuk membuat rahasia di Kubernetes bernama mssql yang menyimpan nilai <password> untuk MSSQL_SA_PASSWORD, jalankan perintah berikut. Ganti <password> dengan kata sandi kompleks Anda.

    Penting

    Variabel SA_PASSWORD lingkungan tidak digunakan lagi. Gunakan MSSQL_SA_PASSWORD sebagai gantinya.

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

Membuat penyimpanan

Untuk database dalam kluster Kubernetes, Anda harus menggunakan penyimpanan yang bertahan. Anda dapat mengonfigurasi volume persisten dan klaim volume persisten di kluster Kubernetes menggunakan langkah-langkah berikut:

  1. Buat manifes untuk menentukan kelas penyimpanan dan klaim volume persisten. Manifes menentukan provisioner penyimpanan, parameter, dan kebijakan klaim ulang. Kluster Kubernetes menggunakan manifes ini untuk membuat penyimpanan persisten.

  2. Contoh YAML berikut mendefinisikan kelas penyimpanan dan klaim volume persisten. Provisioner kelas penyimpanan adalah azure-disk, karena kluster Kubernetes ini ada di Azure. Jenis akun penyimpanan adalah Standard_LRS. Klaim volume persisten itu diberi nama mssql-data. Metadata klaim volume persisten mencakup anotasi yang menghubungkannya kembali ke kelas penyimpanan.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
         name: azure-disk
    provisioner: kubernetes.io/azure-disk
    parameters:
      storageaccounttype: Standard_LRS
      kind: Managed
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mssql-data
      annotations:
        volume.beta.kubernetes.io/storage-class: azure-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    Simpan file (misalnya, pvc.yaml).

  3. Buat klaim volume persisten di Kubernetes, di mana <path to pvc.yaml file> adalah lokasi tempat Anda menyimpan file:

    kubectl apply -f <path to pvc.yaml file>
    

    Volume persisten dibuat secara otomatis sebagai akun penyimpanan Azure, serta terikat dengan klaim volume persisten.

    storageclass "azure-disk" created
    persistentvolumeclaim "mssql-data" created
    
  4. Verifikasi klaim volume persisten, di mana <persistentVolumeClaim> adalah nama klaim volume persisten:

    kubectl describe pvc <persistentVolumeClaim>
    

    Pada langkah sebelumnya, klaim volume persisten diberi nama mssql-data. Untuk melihat metadata tentang klaim volume persisten, jalankan perintah berikut:

    kubectl describe pvc mssql-data
    

    Metadata yang dikembalikan menyertakan nilai yang disebut Volume. Nilai ini dipetakan menjadi nama blob.

    Name:          mssql-data
    Namespace:     default
    StorageClass:  azure-disk
    Status:        Bound
    Volume:        pvc-d169b88e-f26d-11e7-bc3e-0a58ac1f09a4
    Labels:        ‹none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration-{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.   kubernetes.io/storage-class":"azure-disk"},"name":"mssq1-data...
                   pv.kubernetes.io/bind-completed-yes
                   pv.kubernetes.io/bound-by-controller=yes
                   volume.beta.kubernetes.io/storage-class=azure-disk
                   volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/azure-disk
    Capacity:      8Gi
    Access Modes:  RWO
    Events:        <none>
    

    Nilai volume sesuai dengan sebagian nama blob di portal Azure.

  5. Verifikasi volume persisten.

    kubectl describe pv
    

    kubectl mengembalikan metadata tentang volume persisten yang secara otomatis dibuat dan terikat pada klaim volume persisten.

Buat penyebaran

Kontainer yang meng-host instans SQL Server tersebut dijelaskan sebagai objek penyebaran Kubernetes. Penyebaran membuat replica set. Set replika membuat pod.

Anda membuat manifes untuk menjelaskan kontainer, berdasarkan gambar SQL Server mssql-server-linux Docker.

  • Manifes mereferensikan klaim volume persisten mssql-server, dan rahasia mssql yang sudah Anda terapkan pada kluster Kubernetes.
  • Manifes juga menjelaskan layanan. Layanan ini adalah penyeimbang beban. Load balancer menjamin bahwa alamat IP bertahan setelah instans SQL Server dipulihkan.
  • Manifes menjelaskan permintaan dan batas sumber daya. Ini didasarkan pada persyaratan sistem minimum.
  1. Buat manifes (file YAML) untuk menjelaskan penyebaran. Contoh berikut menjelaskan penyebaran, termasuk kontainer yang didasarkan pada citra kontainer SQL Server.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mssql-deployment
    spec:
      replicas: 1
      selector:
         matchLabels:
           app: mssql
      template:
        metadata:
          labels:
            app: mssql
        spec:
          terminationGracePeriodSeconds: 30
          hostname: mssqlinst
          securityContext:
            fsGroup: 10001
          containers:
          - name: mssql
            image: mcr.microsoft.com/mssql/server:2022-latest
            resources:
              requests:
                memory: "2G"
                cpu: "2000m"
              limits:
                memory: "2G"
                cpu: "2000m"
            ports:
            - containerPort: 1433
            env:
            - name: MSSQL_PID
              value: "Developer"
            - name: ACCEPT_EULA
              value: "Y"
            - name: MSSQL_SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: MSSQL_SA_PASSWORD
            volumeMounts:
            - name: mssqldb
              mountPath: /var/opt/mssql
          volumes:
          - name: mssqldb
            persistentVolumeClaim:
              claimName: mssql-data
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mssql-deployment
    spec:
      selector:
        app: mssql
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
      type: LoadBalancer
    

    Salin kode sebelumnya ke file baru, bernama sqldeployment.yaml. Perbarui nilai berikut ini:

    Pengaturan Nilai Description
    MSSQL_PID Developer Mengatur kontainer untuk menjalankan edisi Pengembang SQL Server 2022 (16.x). Edisi pengembang tidak dilisensikan untuk data produksi. Jika penyebaran untuk penggunaan produksi, atur edisi yang sesuai (Enterprise, Standard, atau Express). Untuk informasi selengkapnya, lihat Cara melisensikan SQL Server.
    persistentVolumeClaim mssql-data Nilai ini memerlukan entri untuk claimName yang memetakan ke nama yang digunakan untuk klaim volume persisten. Tutorial ini menggunakan mssql-data.
    name MSSQL_SA_PASSWORD Mengonfigurasi image kontainer untuk mengatur kata sandi, seperti yang didefinisikan dalam bagian ini.
    valueFrom:
      secretKeyRef:
        name: mssql
        key: MSSQL_SA_PASSWORD
    

    Ketika Kubernetes menyebarkan kontainer, Kubernetes mengacu pada rahasia yang dinamai mssql untuk mendapatkan nilai kata sandi.

    Pengaturan Description
    securityContext Menentukan hak istimewa dan pengaturan kontrol akses untuk pod atau kontainer. Dalam hal ini, ditentukan pada tingkat pod, sehingga semua kontainer mematuhi konteks keamanan tersebut. Dalam konteks keamanan, kami menentukan fsGroup dengan nilai 10001, yang merupakan ID Grup (GID) untuk mssql grup. Nilai ini berarti bahwa semua proses kontainer juga merupakan bagian dari GID 10001 tambahan (mssql). Pemilik volume /var/opt/mssql dan file apa pun yang dibuat dalam volume tersebut akan memiliki GID 10001 (grup mssql).

    Peringatan

    Dengan menggunakan LoadBalancer jenis layanan, instans SQL Server dapat diakses dari jarak jauh (melalui Internet) di port 1433.

    Simpan file. Contohnya,sqldeployment.yaml.

  2. Buat penyebaran, di mana <path to sqldeployment.yaml file> adalah lokasi tempat Anda menyimpan file:

    kubectl apply -f <path to sqldeployment.yaml file>
    

    Penyebaran dan layanan telah dibuat. Instans SQL Server berada dalam kontainer, terhubung ke penyimpanan persisten.

    deployment "mssql-deployment" created
    service "mssql-deployment" created
    

    Penyebaran dan layanan telah dibuat. Instans SQL Server berada dalam kontainer, terhubung ke penyimpanan persisten.

    Untuk melihat status pod, ketik kubectl get pod.

    NAME                                READY    STATUS    RESTARTS   AGE
    mssql-deployment-3813464711-h312s   1/1      Running   0          17m
    

    Pod memiliki status Running. Status ini menunjukkan bahwa kontainer sudah siap. Setelah penyebaran dibuat, dapat memerlukan beberapa menit sebelum pod terlihat. Penundaan ini karena kluster menarik gambar mssql-server-linux dari Registri Artefak Microsoft. Setelah citra ditarik pertama kalinya, penyebaran berikutnya mungkin lebih cepat jika penyebaran dilakukan ke node yang sudah memiliki citra yang di-cache di atasnya.

  3. Pastikan layanan sedang berjalan. Jalankan perintah berikut:

    kubectl get services
    

    Perintah ini mengembalikan layanan yang berjalan, dan alamat IP internal dan eksternal untuk layanan. Perhatikan alamat IP eksternal untuk layanan mssql-deployment. Gunakan alamat IP ini untuk menyambungkan ke SQL Server.

    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
    kubernetes         ClusterIP      10.0.0.1      <none>          443/TCP          52m
    mssql-deployment   LoadBalancer   10.0.113.96   52.168.26.254   1433:30619/TCP   2m
    

    Untuk informasi selengkapnya tentang status objek di kluster Kubernetes, jalankan perintah berikut. Ingatlah untuk mengganti <MyResourceGroup> dan <MyKubernetesClustername> dengan grup sumber daya dan nama kluster Kubernetes Anda:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    
  4. Anda juga dapat memverifikasi bahwa kontainer berjalan sebagai non-root dengan menjalankan perintah berikut, di mana <nameOfSqlPod> adalah nama pod SQL Server Anda:

    kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
    

    Anda dapat melihat nama pengguna sebagai mssql jika Anda menjalankan whoami. mssql adalah pengguna non-root.

    whoami
    

Menyambungkan ke instans SQL Server

Anda dapat terhubung dengan aplikasi dari luar jaringan virtual Azure, menggunakan sa akun dan alamat IP eksternal untuk layanan tersebut. Gunakan kata sandi yang Anda konfigurasi sebagai rahasia OpenShift.

Anda dapat menggunakan aplikasi berikut untuk menyambungkan ke instans SQL Server.

Menghubungkan menggunakan sqlcmd

Untuk menyambungkan dengan sqlcmd, jalankan perintah berikut.

sqlcmd -S <External IP address> -U sa -P "<password>"

Ganti <External IP address> dengan alamat IP untuk mssql-deployment layanan, dan <password> dengan kata sandi kompleks Anda.

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.

Memverifikasi kegagalan dan pemulihan

Untuk memverifikasi kegagalan dan pemulihan, Anda dapat menghapus pod dengan langkah-langkah berikut:

  1. Cantumkan pod yang menjalankan SQL Server.

    kubectl get pods
    

    Perhatikan nama pod yang menjalankan SQL Server.

  2. Hapus pod.

    kubectl delete pod mssql-deployment-0
    

    mssql-deployment-0 adalah nilai yang dikembalikan dari langkah sebelumnya untuk nama pod.

Kubernetes secara otomatis membuat ulang pod untuk memulihkan instans SQL Server, dan terhubung ke penyimpanan persisten. Gunakan kubectl get pods untuk memverifikasi bahwa sebuah pod baru dikerahkan. Gunakan kubectl get services untuk memverifikasi bahwa alamat IP untuk kontainer baru adalah sama.

Membersihkan sumber daya

Jika Anda tidak berencana untuk melalui tutorial yang ada di bawah ini, bersihkan sumber daya yang tidak Anda perlukan. az group delete Gunakan perintah untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait. Ganti <MyResourceGroup> dengan nama grup sumber daya yang berisi kluster Anda.

az group delete --name <MyResourceGroup> --yes --no-wait