Bagikan melalui


Menyebarkan kontainer Azure SQL Edge di Kubernetes

Penting

Azure SQL Edge tidak lagi mendukung platform ARM64.

Azure SQL Edge dapat disebarkan pada kluster Kubernetes baik sebagai modul IoT Edge melalui Azure IoT Edge yang berjalan di Kubernetes, atau sebagai pod kontainer mandiri. Untuk sisa artikel ini, kami akan fokus pada penyebaran kontainer mandiri pada kluster Kubernetes. Untuk informasi tentang menyebarkan Azure IoT Edge di Kubernetes, lihat Azure IoT Edge di Kubernetes (pratinjau).

Tutorial ini menunjukkan cara mengonfigurasi instans Azure SQL Edge yang sangat tersedia dalam kontainer pada kluster Kubernetes.

  • Membuat kata sandi SA
  • Membuat penyimpanan
  • Membuat penyebaran
  • Terhubung dengan SQL Server Management Studio (SSMS)
  • Memverifikasi kegagalan dan pemulihan

Kubernetes 1.6 dan yang lebih baru memiliki dukungan untuk kelas penyimpanan, klaim volume persisten, dan jenis volume disk Azure. Anda dapat membuat dan mengelola instans Azure SQL Edge secara natif di Kubernetes. Contoh dalam artikel ini menunjukkan cara membuat penyebaran untuk mencapai konfigurasi ketersediaan tinggi yang mirip dengan instans kluster failover disk bersama. Dalam konfigurasi ini, Kubernetes berperan sebagai orkestrator kluster. Ketika instans Azure SQL Edge dalam kontainer gagal, orkestrator bootstrap instans lain dari kontainer yang terpasang ke penyimpanan persisten yang sama.

Diagram Azure SQL Edge dalam kluster Kubernetes.

Pada diagram sebelumnya, azure-sql-edge adalah kontainer dalam pod. Kubernetes mengatur sumber daya dalam kluster. Set replika memastikan bahwa pod secara otomatis pulih setelah kegagalan node. Aplikasi terhubung ke layanan. Dalam hal ini, layanan mewakili load balancer yang menghosting alamat IP yang tetap sama setelah kegagalan azure-sql-edge.

Dalam diagram berikut, kontainer azure-sql-edge telah gagal. Sebagai orkestrator, Kubernetes menjamin jumlah instans sehat yang benar dalam set replika, dan memulai kontainer baru sesuai dengan konfigurasi. Orkestrator memulai pod baru pada node yang sama, dan azure-sql-edge terhubung kembali ke penyimpanan persisten yang sama. Layanan ini terhubung ke azure-sql-edge yang dibuat ulang.

Diagram Azure SQL Edge dalam kluster Kubernetes setelah pod gagal.

Dalam diagram berikut, node yang menghosting kontainer azure-sql-edge telah gagal. Orkestrator memulai pod baru pada node yang berbeda, dan azure-sql-edge terhubung kembali ke penyimpanan persisten yang sama. Layanan ini terhubung ke azure-sql-edge yang dibuat ulang.

Diagram Azure SQL Edge dalam kluster Kubernetes setelah node gagal.

Prasyarat

  • Kluster Kubernetes

    • Tutorial ini memerlukan kluster Kubernetes. Langkah-langkahnya menggunakan kubectl untuk mengelola kluster.

    • Untuk tujuan tutorial ini, kami menggunakan Azure Kubernetes Service untuk menyebarkan Azure SQL Edge. Lihat Menyebarkan kluster Azure Kubernetes Service (AKS) untuk membuat dan terhubung ke kluster Kubernetes node tunggal di AKS dengan kubectl.

    Catatan

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

  • Azure CLI

    • Instruksi dalam tutorial ini telah divalidasi terhadap Azure CLI 2.10.1.

Membuat namespace Layanan Kubernetes untuk penyebaran SQL Edge

Buat namespace baru di kluster kubernetes. Namespace ini digunakan untuk menyebarkan SQL Edge dan semua artefak yang diperlukan. Untuk informasi selengkapnya tentang namespace Layanan Kubernetes, lihat namespace.

kubectl create namespace <namespace name>

Membuat kata sandi SA

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

Perintah berikut membuat kata sandi untuk akun SA:

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n <namespace name>

Ganti MyC0m9l&xP@ssw0rd dengan kata sandi yang kompleks.

Membuat penyimpanan

Konfigurasikan volume persisten dan klaim volume persisten di kluster Kubernetes. Selesaikan 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.

    Contoh yaml berikut menentukan 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 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).

  2. Buat klaim volume persisten di Kubernetes.

    kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
    

    <Path to pvc.yaml file> adalah lokasi tempat Anda menyimpan file.

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

    Cuplikan layar perintah klaim volume persisten.

  3. Verifikasi klaim volume persisten.

    kubectl describe pvc <PersistentVolumeClaim>  -n <name of the namespace>
    

    <PersistentVolumeClaim> adalah nama klaim volume persisten.

    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  -n <namespace name>
    

    Metadata yang dikembalikan menyertakan nilai yang disebut Volume. Nilai ini memetakan ke nama blob.

    Cuplikan layar metadata yang dikembalikan, termasuk Volume.

  4. Verifikasi volume persisten.

    kubectl describe pv -n <namespace name>
    

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

Membuat penyebaran

Dalam contoh ini, kontainer yang menghosting instans Azure SQL Edge digambarkan sebagai objek penyebaran Kubernetes. Penyebaran membuat set replika. Set replika membuat pod.

Dalam langkah ini, buat manifes untuk menggambarkan kontainer berdasarkan citra Azure SQL Edge Docker. Manifes mereferensikan klaim volume persisten mssql-data, dan rahasia mssql yang sudah Anda terapkan pada kluster Kubernetes. Manifes juga menjelaskan layanan. Layanan ini adalah load balancer. Load balancer menjamin bahwa alamat IP tetap ada setelah instans Azure SQL Edge dipulihkan.

  1. Buat manifes (file YAML) untuk menjelaskan penyebaran. Contoh berikut menjelaskan penyebaran, termasuk kontainer berdasarkan citra kontainer Azure SQL Edge.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sqledge-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sqledge
      template:
        metadata:
          labels:
            app: sqledge
        spec:
          volumes:
            - name: sqldata
              persistentVolumeClaim:
                claimName: mssql-data
          containers:
            - name: azuresqledge
              image: mcr.microsoft.com/azure-sql-edge:latest
              ports:
                - containerPort: 1433
              volumeMounts:
                - name: sqldata
                  mountPath: /var/opt/mssql
              env:
                - name: MSSQL_PID
                  value: "Developer"
                - name: ACCEPT_EULA
                  value: "Y"
                - name: SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: SA_PASSWORD
                - name: MSSQL_AGENT_ENABLED
                  value: "TRUE"
                - name: MSSQL_COLLATION
                  value: "SQL_Latin1_General_CP1_CI_AS"
                - name: MSSQL_LCID
                  value: "1033"
          terminationGracePeriodSeconds: 30
          securityContext:
            fsGroup: 10001
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sqledge-deployment
    spec:
      selector:
        app: sqledge
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
          name: sql
      type: LoadBalancer
    

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

    • MSSQL_PID value: "Developer": Mengatur kontainer untuk menjalankan edisi Azure SQL Edge Developer. Edisi pengembang tidak dilisensikan untuk data produksi. Jika penyebaran untuk penggunaan produksi, atur edisi ke Premium.

      Catatan

      Untuk informasi selengkapnya, lihat Cara melisensikan Azure SQL Edge.

    • persistentVolumeClaim: Nilai ini memerlukan entri untuk claimName: yang memetakan ke nama yang digunakan untuk klaim volume persisten. Tutorial ini menggunakan mssql-data.

    • name: SA_PASSWORD: Mengonfigurasi citra kontainer untuk mengatur kata sandi SA, seperti yang ditentukan di bagian ini.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
      

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

    Catatan

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

    Simpan file (misalnya, sqledgedeploy.yaml).

  2. Buat penyebaran.

    kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
    

    <Path to sqldeployment.yaml file> adalah lokasi tempat Anda menyimpan file.

    Cuplikan layar perintah penyebaran.

    Penyebaran dan layanan dibuat. Instans Azure SQL Edge berada dalam kontainer, terhubung ke penyimpanan persisten.

    Untuk melihat status pod, ketik kubectl get pod -n <namespace name>.

    Cuplikan layar perintah dapatkan pod.

    Pada citra sebelumnya, pod memiliki status Running. Status ini menunjukkan bahwa kontainer sudah siap. Hal ini mungkin berlangsung selama beberapa menit.

    Catatan

    Setelah penyebaran dibuat, dibutuhkan beberapa menit sebelum pod terlihat. Penundaan ini karena kluster menarik citra kontainer Azure SQL Edge dari hub Docker. 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 -n <namespace name>
    

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

    Cuplikan layar perintah dapatkan layanan.

    Untuk informasi selengkapnya tentang status objek di kluster Kubernetes, jalankan:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

Menyambungkan ke instans Azure SQL Edge

Jika Anda mengonfigurasi kontainer seperti yang dijelaskan, Anda dapat terhubung dengan aplikasi dari luar jaringan virtual Azure. Gunakan akun sa dan alamat IP eksternal untuk layanan. Gunakan kata sandi yang dikonfigurasi sebagai rahasia Kubernetes. Untuk informasi selengkapnya tentang menyambungkan ke instans Azure SQL Edge, lihat Menyambungkan ke Azure SQL Edge.

Memverifikasi kegagalan dan pemulihan

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

  1. Cantumkan pod yang menjalankan Azure SQL Edge.

    kubectl get pods -n <namespace name>
    

    Perhatikan nama pod yang menjalankan Azure SQL Edge.

  2. Hapus pod.

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl adalah nilai yang dikembalikan dari langkah sebelumnya untuk nama pod.

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

Ringkasan

Dalam tutorial ini, kamu belajar cara menyebarkan kontainer Azure SQL Edge ke kluster Kubernetes untuk ketersediaan tinggi.

  • Membuat kata sandi SA
  • Membuat penyimpanan
  • Membuat penyebaran
  • Terhubung dengan Azure SQL Edge Management Studios (SSMS)
  • Memverifikasi kegagalan dan pemulihan

Langkah berikutnya