نشر حاوية Azure SQL Edge في Kubernetes

هام

لم يعد Azure SQL Edge يدعم النظام الأساسي ARM64.

يمكن نشر Azure SQL Edge على مجموعة Kubernetes سواء كوحدة IoT Edge من خلال Azure IoT Edge الذي يعمل على Kubernetes، أو كحاوية مستقلة. بالنسبة لبقية هذه المقالة، سنركز على نشر الحاوية المستقلة على نظام مجموعة Kubernetes. للحصول على معلومات حول نشر Azure IoT Edge على Kubernetes، راجع Azure IoT Edge على Kubernetes (معاينة).

يوضح هذا البرنامج التعليمي كيفية تكوين مثيل Azure SQL Edge عالي التوفر في حاوية على مجموعة Kubernetes.

  • إنشاء كلمة مرور مسؤول النظام
  • إنشاء مساحة تخزين
  • إنشاء النشر
  • التواصل باستخدامSQL Server Management Studio
  • التحقق من الفشل والاسترداد

يدعم الإصدار 1.6 من Kubernetes والإصدارات الأحدث فئات التخزين و مطالبات وحدة التخزين الثابتة و نوع وحدة تخزين قرص Azure . يمكنك إنشاء مثيلات Azure SQL Edge وإدارتها محليًا في Kubernetes. يوضح المثال في هذه المقالة طريقة إنشاء نشر تحقيق تكوين توفر عالٍ مشابه لمثيل مجموعة تجاوز فشل القرص المشترك. في هذا التكوين، يلعب Kubernetes دور منسق المجموعة. عندما يفشل مثيل Azure SQL Edge في حاوية، يُشغل المنسق مثيلاً آخر من الحاوية المرفقة بنفس التخزين الدائم.

رسم تخطيطي ل Azure SQL Edge في مجموعة Kubernetes.

في الرسم التخطيطي السابق، azure-sql-edge عبارة عن حاوية في قرن . Kubernetes تنسق الموارد في الكتلة. تضمن مجموعة النسخ المتماثلة استرداد الجراب تلقائيًا بعد فشل العقدة. تتصل التطبيقات بالخدمة. في هذه الحالة، تمثل الخدمة موزع حمل يستضيف عنوان IP يظل كما هو بعد فشل azure-sql-edge.

في الرسم التخطيطي التالي، فشلت حاوية azure-sql-edge. بصفته المنسق، يضمن Kubernetes العدد الصحيح للمثيلات السليمة في مجموعة النسخ المتماثلة، ويبدأ حاوية جديدة وفقًا للتهيئة. يبدأ المنظم حجرة جديدة على نفس العقدة، وazure-sql-edge يعيد الاتصال بنفس التخزين الدائم. تتصل الخدمة بـ azure-sql-edge المعاد إنشاؤه.

رسم تخطيطي ل Azure SQL Edge في مجموعة Kubernetes بعد فشل الجراب.

في الرسم التخطيطي التالي، فشلت العقدة التي تستضيف الحاوية azure-sql-edge. يبدأ المنظم الجراب الجديد على عقدة مختلفة، وazure-sql-edge يعيد الاتصال بنفس التخزين الدائم. تتصل الخدمة بـ azure-sql-edge المعاد إنشاؤه.

رسم تخطيطي ل Azure SQL Edge في مجموعة Kubernetes بعد فشل العقدة.

المتطلبات الأساسية

  • مجموعة Kubernetes

    • البرنامج التعليمي يتطلب مجموعة Kubernetes. تستخدم الخطوات kubectl لإدارة المجموعة.

    • لغرض هذا البرنامج التعليمي، نستخدم خدمة Azure Kubernetes لنشر Azure SQL Edge. يرجى النظر إلى نشر مجموعة Azure Kubernetes Service(AKS) لإنشاء مجموعة Kubernetes أحادية العقدة والاتصال بها في AKS باستخدام kubectl.

    ملاحظة

    للحماية من فشل العقدة، تتطلب مجموعة Kubernetes أكثر من عقدة واحدة.

  • Azure CLI

    • التحقق من صحة الإرشادات الواردة في هذا البرنامج التعليمي مقابل Azure CLI 2.10.1.

إنشاء مساحة اسم Kubernetes لنشر SQL Edge

إنشاء مساحة اسم جديدة في مجموعة kubernetes. يتم استخدام مساحة الاسم هذه لنشر SQL Edge وجميع البيانات الاصطناعية المطلوبة. لمزيد من المعلومات حول مساحات أسماء Kubernetes، راجع مساحات الأسماء.

kubectl create namespace <namespace name>

إنشاء كلمة مرور مسؤول النظام

إنشاء كلمة مرور مسؤول النظام في كتلة Kubernetes. يمكن لنظام Kubernetes إدارة معلومات التهيئة الحساسة، مثل كلمات المرور باعتبارها معلومات سرية .

يُنشئ الأمر التالي كلمة مرور لحساب مسؤول النظام:

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

استبدل MyC0m9l&xP@ssw0rd بكلمة مرور معقدة.

إنشاء مساحة تخزين

تهيئة وحدة تخزين ثابتة و مطالبة وحدة تخزين ثابتة في مجموعة Kubernetes. أكمل الخطوات التالية:

  1. إنشاء بيان لتحديد فئة التخزين والمطالبة بوحدة التخزين الدائمة. يحدد البيان موجه التخزين والمعلمات و سياسة الاسترداد . تستخدم مجموعة Kubernetes هذا البيان لإنشاء التخزين الدائم.

    يعرّف مثال yaml التالي فئة التخزين والمطالبة بالحجم الثابت. موجه فئة التخزين هو azure-disk، لأن مجموعة Kubernetes موجودة في Azure. نوع حساب التخزين هو Standard_LRS. سُميت مطالبة المجلد الدائمة باسم mssql-data. تتضمن بيانات التعريف لمطالبة وحدة التخزين الثابتة تعليقًا توضيحيًا يربطها مرة أخرى بفئة التخزين.

    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
    

    حفظ الملف (على سبيل المثال، pvc.yaml).

  2. إنشاء مطالبة وحدة التخزين الدائمة في Kubernetes.

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

    <Path to pvc.yaml file> هو المكان الذي حُفظ فيه الملف.

    إنشاء وحدة التخزين الدائمة تلقائيًا كحساب تخزين Azure، وتكون مرتبطة بمطالبة وحدة التخزين الدائمة.

    لقطة شاشة لأمر مطالبة وحدة التخزين الثابتة.

  3. تحقق من مطالبة الحجم المستمرة.

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

    <PersistentVolumeClaim> هو اسم مطالبة المجلد الدائمة.

    في الخطوة السابقة، سُميت مطالبة المجلد الدائمة باسم mssql-data. لمشاهدة بيانات التعريف حول مطالبة وحدة التخزين الدائمة، يجب تشغيل الأمر التالي:

    kubectl describe pvc mssql-data  -n <namespace name>
    

    تتضمن بيانات التعريف التي أُرجعت قيمة تسمى Volume. تعيين القيمة هذه إلى اسم كائن ثنائي كبير الحجم.

    لقطة شاشة لبيانات التعريف التي تم إرجاعها، بما في ذلك وحدة التخزين.

  4. التحقق من مستوى الصوت الثابت.

    kubectl describe pv -n <namespace name>
    

    يعرض kubectl بيانات التعريف حول وحدة التخزين الدائمة التي أُنشئت تلقائيًا ورُبطت بمطالبة وحدة التخزين الدائمة.

إنشاء النشر

في هذا المثال، تُوصف الحاوية التي تستضيف مثيل Azure SQL Edge على أنها كائن نشر Kubernetes. يؤدي النشر إلى إنشاء مجموعة نسخ متماثلة. تُنشئ مجموعة النسخ المتماثلة الجراب.

في هذه الخطوة، إنشاء بيان لوصف الحاوية بناءً على صورة Azure SQL Edge Docker. يشير البيان إلى mssql-data مطالبة وحدة التخزين الدائمة و mssql السر الذي طُبق بالفعل على مجموعة Kubernetes. يصف البيان أيضًا خدمة . هذه الخدمة عبارة عن موزع حمل. يضمن موزع الحمل استمرار عنوان IP بعد استرداد مثيل Azure SQL Edge.

  1. إنشاء بيان (ملف YAML) لوصف النشر. يصف المثال التالي عملية نشر، بما في ذلك حاوية تستند إلى صورة حاوية 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
    

    نسخ الكود السابق في ملف جديد باسم sqldeployment.yaml. تحديث القيم التالية:

    • MSSQL_PID value: "Developer": تعيين الحاوية لتشغيل إصدار Azure SQL Edge Developer. إصدار المطور غير مرخص لبيانات الإنتاج. إذا كان النشر للاستخدام الإنتاجي، فيجب تعيين الإصدار على Premium.

      ملاحظة

      لمزيد من المعلومات، يرجى الرجوع إلى كيفية ترخيص Azure SQL Edge .

    • persistentVolumeClaim: تتطلب هذه القيمة إدخالاً لـ claimName: يعيّن الاسم المستخدم لمطالبة وحدة التخزين الدائمة. يستخدم هذا البرنامج التعليمي mssql-data.

    • name: SA_PASSWORD: تكوين صورة الحاوية لتعيين كلمة مرور مسؤول النظام، على النحو المحدد في هذا القسم.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
      

      عند نشر Kubernetes للحاوية، فإن هذا يشير إلى المعلومات السرية المسماة mssql للحصول على قيمة كلمة المرور.

    ملاحظة

    باستخدام نوع الخدمة LoadBalancer، يمكن الوصول إلى مثيل Azure SQL Edge عن بُعد (عبر الإنترنت) في المنفذ 1433.

    احفظ الملف (على سبيل المثال، sqledgedeploy.yaml).

  2. إنشاء النشر.

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

    <Path to sqldeployment.yaml file> هو المكان الذي حُفظ فيه الملف.

    لقطة شاشة لأمر التوزيع.

    إنشاء النشر والخدمة. مثيل Azure SQL Edge موجود في حاوية، ومتصل بالتخزين الدائم.

    لعرض حالة الجراب، اكتب kubectl get pod -n <namespace name>.

    لقطة شاشة لأمر get pod.

    في الصورة السابقة، تكون للجراب حالة Running. تشير هذه الحالة إلى أن الحاوية جاهزة. قد يستغرق هذا بضع دقائق.

    ملاحظة

    بعد إنشاء النشر، يمكن أن يستغرق الأمر بضع دقائق قبل أن يصبح الجراب مرئياً. يرجع التأخير إلى قيام نظام المجموعة بسحب صورة حاوية Azure SQL Edge من لوحة Docker. بعد سحب الصورة في المرة الأولى، قد تكون عمليات النشر اللاحقة أسرع إذا كان النشر إلى عقدة تحتوي بالفعل على الصورة المخزنة مؤقتاً عليها.

  3. تحقق من تشغيل الخدمات. تشغيل الأمر التالي:

    kubectl get services -n <namespace name>
    

    يقوم هذا الأمر بإرجاع الخدمات قيد التشغيل، بالإضافة إلى عناوين IP الداخلية والخارجية للخدمات. ملاحظة عنوان IP الخارجي لخدمة mssql-deployment. استخدام عنوان IP هذا للاتصال بـ Azure SQL Edge.

    لقطة شاشة لأمر الحصول على الخدمة.

    لمزيد من المعلومات حول حالة الكائنات في مجموعة Kubernetes، يجب تشغيل:

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

الاتصال بمثيل Azure SQL Edge

إذا كونت الحاوية كما هو موضح، يمكن الاتصال بتطبيق من خارج شبكة Azure الظاهرية. استخدام حساب sa وعنوان IP الخارجي للخدمة. استخدام كلمة المرور التي كونت على أنها سر Kubernetes. لمزيد من المعلومات حول الاتصال بمثيل Azure SQL Edge، راجع الاتصال ب Azure SQL Edge.

التحقق من الفشل والاسترداد

للتحقق من الفشل والاسترداد، يمكن حذف الجراب. تُنفذ الخطوات التالية:

  1. تقويم جراب تشغيل Azure SQL Edge.

    kubectl get pods -n <namespace name>
    

    لاحظ اسم الجراب الذي يُشغل Azure SQL Edge.

  2. حذف الجراب.

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl هي القيمة التي أُرجعت من الخطوة السابقة لاسم المجموعة.

يُعيد Kubernetes تلقائياً إنشاء الجراب لاستعادة مثيل Azure SQL Edge والاتصال بالتخزين الدائم. استخدام kubectl get pods للتحقق من نشر الجراب الجديد. استخدام kubectl get services للتحقق من أن عنوان IP للحاوية الجديدة هو نفسه.

الملخص

في هذا البرنامج التعليمي، نتعلم طريقة نشر حاويات Azure SQL Edge إلى مجموعة Kubernetes عالية التوفر.

  • إنشاء كلمة مرور مسؤول النظام
  • إنشاء مساحة تخزين
  • إنشاء النشر
  • الاتصال بـAzure SQL Edge Management Studios (SSMS)
  • التحقق من الفشل والاسترداد

الخطوات التالية