ملاحظة
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: Azure Stack Edge Pro - GPU
Azure Stack Edge Pro 2
Azure Stack Edge Pro R
Azure 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
هذا المثال مع نسخة متماثلة واحدة فقط وهو مناسب للتطوير والاختبار.
اختر ما إذا كنت تريد إنشاء مشاركة Edge أو مشاركة محلية ل Edge. اتبع الإرشادات الواردة في إضافة مشاركة لإنشاء مشاركة. تأكد من تحديد خانة الاختيار استخدام المشاركة مع حساب Edge.
بدلا من إنشاء مشاركة جديدة، إذا قررت استخدام مشاركة موجودة، فستحتاج إلى تحميل المشاركة.
في مدخل Microsoft Azure لمورد Azure Stack Edge، انتقل إلى Shares. من قائمة المشاركات الموجودة، حدد مشاركة تريد استخدامها وانقر فوقها.
حدد تحميل وتأكد من التحميل عند مطالبتك.
دون اسم المشاركة. عند إنشاء هذه المشاركة، يتم إنشاء كائن وحدة تخزين ثابتة تلقائيا في مجموعة Kubernetes المقابلة لمشاركة SMB التي قمت بإنشائها.
نشر MySQL
ستقوم الآن بتشغيل تطبيق ذي حالة عن طريق إنشاء نشر Kubernetes وتوصيله ب PV الذي أنشأته في الخطوة السابقة باستخدام PersistentVolumeClaim (PVC).
تحتاج جميع kubectl
الأوامر التي تستخدمها لإنشاء وإدارة عمليات نشر التطبيقات ذات الحالة إلى تحديد مساحة الاسم المقترنة بالتكوين. لتحديد مساحة الاسم في أمر kubectl، استخدم kubectl <command> -n <your-namespace>
.
احصل على قائمة بالقرون التي تعمل على مجموعة 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) لأنه لا توجد تطبيقات تعمل على نظام المجموعة الخاص بك.
ستستخدم ملفات 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
انسخ الملف واحفظه
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
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 الذي تم إنشاؤه. ستستخدمه في خطوة لاحقة.
نشر محتويات
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
عرض معلومات حول النشر.
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>
سرد 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>
افحص 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 عند إنشاء المشاركة، ستحتاج إلى حذف المشاركة. اتبع الخطوات التالية:
إلغاء تحميل المشاركة. في مدخل Microsoft Azure، انتقل إلى مشاركات موارد > Azure Stack Edge وحدد وانقر فوق المشاركة التي تريد إلغاء تحميلها. حدد إلغاء التحميل وتأكد من العملية. انتظر حتى يتم إلغاء تحميل المشاركة. يصدر إلغاء التحميل المشاركة (ومن ثم PersistentVolume المقترنة) من مجموعة Kubernetes.
يمكنك الآن تحديد حذف وتأكيد الحذف لحذف مشاركتك. يجب أن يؤدي هذا أيضا إلى حذف المشاركة وPV المقابلة.
الخطوات التالية
لفهم كيفية توفير التخزين ديناميكيا، راجع نشر تطبيق ذي حالة عبر التزويد الديناميكي على جهاز Azure Stack Edge Pro