مشاركة عبر


استخدم kubectl لتشغيل تطبيق Kubernetes ذو حالة مع PersistentVolume على جهاز Azure Stack Edge Pro

ينطبق على: نعم ل Pro GPU SKUAzure Stack Edge Pro - GPUنعم ل Pro 2 SKUAzure Stack Edge Pro 2نعم ل Pro R SKUAzure Stack Edge Pro Rنعم ل Mini R SKUAzure Stack Edge Mini R

توضح هذه المقالة كيفية نشر تطبيق ذو حالة واحدة في Kubernetes باستخدام PersistentVolume (PV) ونشر. يستخدم kubectl التوزيع أوامر على مجموعة Kubernetes موجودة وينشر تطبيق MySQL.

هذا الإجراء مخصص لأولئك الذين قاموا بمراجعة تخزين Kubernetes على جهاز Azure Stack Edge Pro وهم على دراية بمفاهيم تخزين Kubernetes.

يدعم Azure Stack Edge Pro أيضا تشغيل حاويات Azure SQL Edge ويمكن نشرها بطريقة مماثلة كما هو مفصل هنا ل MySQL. لمزيد من المعلومات، راجع Azure SQL Edge.

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

قبل أن تتمكن من نشر التطبيق ذي الحالة، أكمل المتطلبات الأساسية التالية على جهازك والعميل الذي ستستخدمه للوصول إلى الجهاز:

للجهاز

  • لديك بيانات اعتماد تسجيل الدخول إلى جهاز Azure Stack Edge Pro مكون من عقدة واحدة.
    • تم تنشيط الجهاز. راجع تنشيط الجهاز.
    • يحتوي الجهاز على دور الحساب الذي تم تكوينه عبر مدخل Microsoft Azure ولديه مجموعة Kubernetes. راجع تكوين الحساب.

للعميل الذي يصل إلى الجهاز

  • لديك نظام عميل Windows سيتم استخدامه للوصول إلى جهاز Azure Stack Edge Pro.
    • يقوم العميل بتشغيل Windows PowerShell 5.0 أو أحدث. لتنزيل أحدث إصدار من Windows PowerShell، انتقل إلى تثبيت Windows PowerShell.

    • يمكنك الحصول على أي عميل آخر مع نظام تشغيل مدعوم أيضا. توضح هذه المقالة الإجراء عند استخدام عميل Windows.

    • لقد أكملت الإجراء الموضح في Access the Kubernetes cluster على جهاز Azure Stack Edge Pro. أنت لديك:

      • userns1 إنشاء مساحة اسم عبر New-HcsKubernetesNamespace الأمر .
      • إنشاء مستخدم user1 عبر New-HcsKubernetesUser الأمر .
      • منح user1 حق الوصول إلى userns1 عبر Grant-HcsKubernetesNamespaceAccess الأمر .
      • تثبيت kubectl على العميل وحفظ kubeconfig الملف مع تكوين المستخدم إلى C:\Users\<username>\.kube.
    • تأكد من أن kubectl إصدار العميل منحرف لا يزيد عن إصدار واحد من إصدار Kubernetes الرئيسي الذي يعمل على جهاز Azure Stack Edge Pro.

      • استخدم kubectl version للتحقق من إصدار kubectl الذي يعمل على العميل. دون النسخة الكاملة.
      • في واجهة المستخدم المحلية لجهاز Azure Stack Edge Pro، انتقل إلى نظرة عامة ولاحظ رقم برنامج Kubernetes.
      • تحقق من هذين الإصدارين للتوافق من التعيين المتوفر في إصدار Kubernetes المدعوم.

أنت مستعد لنشر تطبيق ذي حالة على جهاز Azure Stack Edge Pro.

توفير PV ثابت

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

إشعار

  • لا يعمل المثال المحدد المستخدم في هذه المقالة الإرشادية مع مشاركات NFS. بشكل عام، يمكن توفير مشاركات NFS على جهاز Azure Stack Edge مع تطبيقات غير قاعدة بيانات.
  • لنشر التطبيقات ذات الحالة التي تستخدم وحدات التخزين لتوفير التخزين المستمر، نوصي باستخدام StatefulSet. يستخدم Deployment هذا المثال مع نسخة متماثلة واحدة فقط وهو مناسب للتطوير والاختبار.
  1. اختر ما إذا كنت تريد إنشاء مشاركة Edge أو مشاركة محلية ل Edge. اتبع الإرشادات الواردة في إضافة مشاركة لإنشاء مشاركة. تأكد من تحديد خانة الاختيار استخدام المشاركة مع حساب Edge.

    مشاركة Edge المحلية ل PV

    1. بدلا من إنشاء مشاركة جديدة، إذا قررت استخدام مشاركة موجودة، فستحتاج إلى تحميل المشاركة.

      في مدخل Microsoft Azure لمورد Azure Stack Edge، انتقل إلى Shares. من قائمة المشاركات الموجودة، حدد مشاركة تريد استخدامها وانقر فوقها.

      تحديد مشاركة محلية موجودة ل PV

    2. حدد تحميل وتأكد من التحميل عند مطالبتك.

      تحميل مشاركة محلية موجودة ل PV

  2. دون اسم المشاركة. عند إنشاء هذه المشاركة، يتم إنشاء كائن وحدة تخزين ثابتة تلقائيا في مجموعة Kubernetes المقابلة لمشاركة SMB التي قمت بإنشائها.

نشر MySQL

ستقوم الآن بتشغيل تطبيق ذي حالة عن طريق إنشاء نشر Kubernetes وتوصيله ب PV الذي أنشأته في الخطوة السابقة باستخدام PersistentVolumeClaim (PVC).

تحتاج جميع kubectl الأوامر التي تستخدمها لإنشاء وإدارة عمليات نشر التطبيقات ذات الحالة إلى تحديد مساحة الاسم المقترنة بالتكوين. لتحديد مساحة الاسم في أمر kubectl، استخدم kubectl <command> -n <your-namespace>.

  1. احصل على قائمة بالقرون التي تعمل على مجموعة Kubernetes في مساحة الاسم الخاصة بك. الحاوية هي حاوية تطبيق، أو عملية، تعمل على مجموعة Kubernetes الخاصة بك.

    kubectl get pods -n <your-namespace>
    

    فيما يلي مثال على استخدام الأوامر:

     C:\Users\user>kubectl get pods -n "userns1"
     No resources found in userns1 namespace.    
     C:\Users\user>
    

    يجب أن ينص الإخراج على أنه لم يتم العثور على موارد (pods) لأنه لا توجد تطبيقات تعمل على نظام المجموعة الخاص بك.

  2. ستستخدم ملفات YAML التالية. mysql-deployment.yml يصف الملف التوزيع الذي يقوم بتشغيل MySQL ويشير إلى PVC. يعرف الملف تحميل وحدة تخزين ل /var/lib/mysql، ثم ينشئ PVC يبحث عن وحدة تخزين 20 غيغابايت.

    يتم استيفاء هذه المطالبة من قبل أي PV موجود تم توفيره بشكل ثابت عند إنشاء المشاركة في الخطوة السابقة. على جهازك، يتم إنشاء PV كبير ب 32 تيرابايت لكل مشاركة. تفي PV بالمتطلبات التي حددتها PVC ويجب أن تكون PVC مرتبطة ب PV هذا.

    انسخ الملف التالي mysql-deployment.yml واحفظه في مجلد على عميل Windows الذي تستخدمه للوصول إلى جهاز Azure Stack Edge Pro.

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
      - port: 3306
      selector:
        app: mysql
      clusterIP: None
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
              # Use secret in real usage
            - name: MYSQL_ROOT_PASSWORD
              value: password
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:
              claimName: mysql-pv-claim
    
  3. انسخ الملف واحفظه mysql-pv.yml في المجلد نفسه حيث قمت بحفظ mysql-deployment.yml. لاستخدام مشاركة SMB التي قمت بإنشائها مسبقا باستخدام kubectl، قم بتعيين volumeName الحقل في كائن PVC إلى اسم المشاركة.

    إشعار

    تأكد من أن ملفات YAML تحتوي على مسافة بادئة صحيحة. يمكنك التحقق باستخدام تحليل YAML للتحقق من الصحة ثم الحفظ.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
    spec:
      volumeName: <smb-share-name-here>
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. mysql-pv.yaml انشر الملف.

    kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>

    فيما يلي عينة إخراج للنشر.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pv.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim created
    
    C:\Users\user>
    

    لاحظ اسم PVC الذي تم إنشاؤه. ستستخدمه في خطوة لاحقة.

  5. نشر محتويات mysql-deployment.yml الملف.

    kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>

    فيما يلي عينة إخراج للنشر.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
        service/mysql created
        deployment.apps/mysql created
    
  6. عرض معلومات حول النشر.

    kubectl describe deployment <app-label> -n <your-user-namespace>

    C:\Users\user>kubectl describe deployment mysql -n userns1
    Name:               mysql
    Namespace:          userns1
    CreationTimestamp:  Tue, 18 Aug 2020 09:44:58 -0700
    Labels:             <none>
    Annotations:        deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"mysql","namespace":"userns1"},"spec":{"selector":{"matchL...
    Selector:           app=mysql
    Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:       Recreate
    MinReadySeconds:    0
    Pod Template:
      Labels:  app=mysql
      Containers:
       mysql:
        Image:      mysql:5.6
        Port:       3306/TCP
        Host Port:  0/TCP
        Environment:
          MYSQL_ROOT_PASSWORD:  password
        Mounts:
          /var/lib/mysql from mysql-persistent-storage (rw)
      Volumes:
       mysql-persistent-storage:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  mysql-pv-claim
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Progressing    True    NewReplicaSetAvailable
      Available      True    MinimumReplicasAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-c85f7f79c (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set mysql-c85f7f79c to 1
    
    C:\Users\user>
    
  7. سرد pods التي تم إنشاؤها بواسطة النشر.

    kubectl get pods -l <app=label> -n <your-user-namespace>

    فيما يلي عينة من المخرجات.

    C:\Users\user>kubectl get pods -l app=mysql -n userns1
    NAME                    READY   STATUS    RESTARTS   AGE
    mysql-c85f7f79c-vzz7j   1/1     Running   1          14m
    
    C:\Users\user>
    
  8. افحص PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    فيما يلي عينة من المخرجات.

    C:\Users\user>kubectl describe pvc mysql-pv-claim -n userns1
    Name:          mysql-pv-claim
    Namespace:     userns1
    StorageClass:
    Status:        Bound
    Volume:        mylocalsmbshare1
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"userns1"},"spec":{"acc...
                   pv.kubernetes.io/bind-completed: yes
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      32Ti
    Access Modes:  RWO,RWX
    VolumeMode:    Filesystem
    Mounted By:    mysql-c85f7f79c-vzz7j
    Events:        <none>
    
    C:\Users\user>
    

تحقق من تشغيل MySQL

لتشغيل أمر مقابل حاوية في حاوية تقوم بتشغيل MySQL، اكتب:

kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql

فيما يلي عينة من المخرجات.

C:\Users\user>kubectl exec mysql-c85f7f79c-vzz7j -i -t -n userns1 -- mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

حذف عملية نشر

لحذف النشر، احذف الكائنات المنشورة بالاسم. تتضمن هذه الكائنات النشر والخدمة وPVC.

kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>

فيما يلي نموذج إخراج عند حذف التوزيع والخدمة.

C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>

فيما يلي نموذج إخراج عند حذف PVC.

C:\Users\user>kubectl delete pvc mysql-pv-claim -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>

لم يعد PV مرتبطا ب PVC حيث تم حذف PVC. نظرا لتوفير PV عند إنشاء المشاركة، ستحتاج إلى حذف المشاركة. اتبع الخطوات التالية:

  1. إلغاء تحميل المشاركة. في مدخل Microsoft Azure، انتقل إلى مشاركات موارد > Azure Stack Edge وحدد وانقر فوق المشاركة التي تريد إلغاء تحميلها. حدد إلغاء التحميل وتأكد من العملية. انتظر حتى يتم إلغاء تحميل المشاركة. يصدر إلغاء التحميل المشاركة (ومن ثم PersistentVolume المقترنة) من مجموعة Kubernetes.

    إلغاء تحميل المشاركة المحلية ل PV

  2. يمكنك الآن تحديد حذف وتأكيد الحذف لحذف مشاركتك. يجب أن يؤدي هذا أيضا إلى حذف المشاركة وPV المقابلة.

    حذف المشاركة المحلية ل PV

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

لفهم كيفية توفير التخزين ديناميكيا، راجع نشر تطبيق ذي حالة عبر التزويد الديناميكي على جهاز Azure Stack Edge Pro