انشر تطبيق Kubernetes عديم الحالة عبر kubectl على جهاز Azure Stack Edge Pro GPU
ينطبق على: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
توضح هذه المقالة كيفية نشر تطبيق عديم الحالة باستخدام أوامر kubectl على مجموعة Kubernetes موجودة. ترشدك هذه المقالة أيضا خلال عملية إنشاء وإعداد pods في تطبيقك عديم الحالة.
المتطلبات الأساسية
قبل أن تتمكن من إنشاء مجموعة Kubernetes واستخدام kubectl
أداة سطر الأوامر، تحتاج إلى التأكد من:
لديك بيانات اعتماد تسجيل الدخول إلى جهاز Azure Stack Edge Pro مكون من عقدة واحدة.
يتم تثبيت Windows PowerShell 5.0 أو إصدار أحدث على نظام عميل Windows للوصول إلى جهاز Azure Stack Edge Pro. يمكنك الحصول على أي عميل آخر مع نظام تشغيل مدعوم أيضا. توضح هذه المقالة الإجراء عند استخدام عميل Windows. لتنزيل أحدث إصدار من Windows PowerShell، انتقل إلى تثبيت Windows PowerShell.
يتم تمكين الحساب على جهاز Azure Stack Edge Pro. لتمكين الحساب، انتقل إلى صفحة الحوسبة في واجهة المستخدم المحلية للجهاز. ثم حدد واجهة شبكة تريد تمكينها للحساب. حدد تمكين. يؤدي تمكين الحساب إلى إنشاء مفتاح ظاهري على جهازك على واجهة الشبكة هذه. لمزيد من المعلومات، راجع تمكين شبكة الحوسبة على Azure Stack Edge Pro.
يحتوي جهاز Azure Stack Edge Pro على خادم مجموعة Kubernetes يعمل بالإصدار v1.9 أو أحدث. لمزيد من المعلومات، راجع إنشاء مجموعة Kubernetes وإدارتها على جهاز Microsoft Azure Stack Edge Pro.
لقد قمت بتثبيت
kubectl
.
نشر تطبيق عديم الحالة
قبل أن نبدأ، يجب أن يكون لديك:
- إنشاء مجموعة Kubernetes.
- إعداد مساحة اسم.
- ربط مستخدم بمساحة الاسم.
- حفظ تكوين المستخدم إلى
C:\Users\<username>\.kube
. - تم التثبيت
kubectl
.
الآن يمكنك البدء في تشغيل وإدارة عمليات نشر التطبيقات عديمة الحالة على جهاز Azure Stack Edge Pro. قبل البدء في استخدام kubectl
، تحتاج إلى التحقق من أن لديك الإصدار الصحيح من kubectl
.
تحقق من أن لديك الإصدار الصحيح من kubectl وإعداد التكوين
للتحقق من إصدار kubectl
:
تحقق من أن إصدار أكبر أو
kubectl
يساوي 1.9:kubectl version
يظهر مثال على الإخراج أدناه:
PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
في هذه الحالة، إصدار العميل من kubectl هو v1.15.2 ومتوافق للمتابعة.
احصل على قائمة بالقرون التي تعمل على مجموعة Kubernetes الخاصة بك. الحاوية هي حاوية تطبيق، أو عملية، تعمل على مجموعة Kubernetes الخاصة بك.
kubectl get pods -n <namespace-string>
يظهر مثال على استخدام الأوامر أدناه:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
يجب أن ينص الإخراج على أنه لم يتم العثور على موارد (pods) لأنه لا توجد تطبيقات تعمل على نظام المجموعة الخاص بك.
سيقوم الأمر بملء بنية الدليل ل "C:\Users\<username>\.kube" بملفات التكوين. ستستخدم أداة سطر الأوامر kubectl هذه الملفات لإنشاء تطبيقات عديمة الحالة وإدارتها على مجموعة Kubernetes الخاصة بك.
تحقق يدويا من بنية الدليل ل "C:\Users\<username>\.kube" للتحقق من أن kubectl قام بملئه بالمجلدات الفرعية التالية:
PS C:\Users\username> ls .kube Directory: C:\Users\user\.kube Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2020 11:05 AM cache d----- 2/18/2020 11:04 AM http-cache -a---- 2/18/2020 10:41 AM 5377 config
إشعار
لعرض قائمة بجميع أوامر kubectl، اكتب kubectl --help
.
إنشاء تطبيق عديم الحالة باستخدام نشر
الآن بعد أن تحققت من صحة إصدار سطر الأوامر kubectl ولديك ملفات التكوين المطلوبة، يمكنك إنشاء نشر تطبيق عديم الحالة.
الجراب هو وحدة التنفيذ الأساسية لتطبيق Kubernetes، أصغر وأبسط وحدة في نموذج عنصر Kubernetes الذي تقوم بإنشائه أو توزيعه. كما تغلف الحاوية موارد التخزين، وعنوان IP فريد للشبكة، والخيارات التي تحكم كيفية تشغيل الحاوية (الحاويات).
نوع التطبيق عديم الحالة الذي تقوم بإنشائه هو نشر خادم ويب nginx.
تحتاج جميع أوامر kubectl التي تستخدمها لإنشاء عمليات نشر التطبيقات عديمة الحالة وإدارتها إلى تحديد مساحة الاسم المقترنة بالتكوين. لقد أنشأت مساحة الاسم أثناء الاتصال بالمجموعة على جهاز Azure Stack Edge Pro في البرنامج التعليمي إنشاء وإدارة مجموعة Kubernetes على البرنامج التعليمي لجهاز Microsoft Azure Stack Edge Pro باستخدام New-HcsKubernetesNamespace
.
لتحديد مساحة الاسم في أمر kubectl، استخدم kubectl <command> -n <namespace-string>
.
اتبع هذه الخطوات لإنشاء نشر nginx:
تطبيق تطبيق عديم الحالة عن طريق إنشاء كائن توزيع Kubernetes:
kubectl apply -f <yaml-file> -n <namespace-string>
في هذا المثال، المسار إلى ملف YAML للتطبيق هو مصدر خارجي.
فيما يلي عينة استخدام الأمر وإخراجه:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
بدلا من ذلك، يمكنك حفظ markdown التالي إلى الجهاز المحلي الخاص بك واستبدل المسار واسم الملف في المعلمة -f . على سبيل المثال، "C:\Kubernetes\deployment.yaml". سيكون تكوين نشر التطبيق:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
ينشئ هذا الأمر نشر nginx افتراضيا يحتوي على جرابين لتشغيل التطبيق الخاص بك.
احصل على وصف Kubernetes nginx-deployment الذي أنشأته:
kubectl describe deployment nginx-deployment -n <namespace-string>
يظهر أدناه نموذج استخدام الأمر مع الإخراج:
PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1" Name: nginx-deployment Namespace: test1 CreationTimestamp: Tue, 18 Feb 2020 13:35:29 -0800 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl... Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-5754944d6c (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m22s deployment-controller Scaled up replica set nginx-deployment-5754944d6c to 2
بالنسبة لإعداد النسخ المتماثلة، سترى:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
يشير إعداد النسخ المتماثلة إلى أن مواصفات التوزيع تتطلب جرابين، وأن هذه القرون تم إنشاؤها وتحديثها وجاهزة للاستخدام.
إشعار
تحل مجموعة النسخ المتماثلة محل الحجيرات التي يتم حذفها أو إنهائها لأي سبب من الأسباب، كما هو الحال في حالة فشل عقدة الجهاز أو ترقية الجهاز المعطلة. لهذا السبب، نوصي باستخدام مجموعة نسخ متماثلة حتى إذا كان التطبيق الخاص بك يتطلب جراب واحد فقط.
لسرد pods في التوزيع الخاص بك:
kubectl get pods -l app=nginx -n <namespace-string>
يظهر أدناه نموذج استخدام الأمر مع الإخراج:
PS C:\Users\user> kubectl get pods -l app=nginx -n "test1" NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-7wqjd 1/1 Running 0 3m13s nginx-deployment-5754944d6c-nfj2h 1/1 Running 0 3m13s
يتحقق الإخراج من أن لدينا جرابين بأسماء فريدة يمكننا الرجوع إليها باستخدام kubectl.
لعرض معلومات حول جراب فردي في التوزيع الخاص بك:
kubectl describe pod <podname-string> -n <namespace-string>
يظهر أدناه نموذج استخدام الأمر مع الإخراج:
PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"
Name: nginx-deployment-5754944d6c-7wqjd
Namespace: test1
Priority: 0
Node: k8s-1d9qhq2cl-n1/10.128.46.184
Start Time: Tue, 18 Feb 2020 13:35:29 -0800
Labels: app=nginx
pod-template-hash=5754944d6c
Annotations: <none>
Status: Running
IP: 172.17.246.200
Controlled By: ReplicaSet/nginx-deployment-5754944d6c
Containers:
nginx:
Container ID: docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 18 Feb 2020 13:35:35 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8gksw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8gksw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m58s default-scheduler Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
Normal Pulling 4m57s kubelet, k8s-1d9qhq2cl-n1 Pulling image "nginx:1.7.9"
Normal Pulled 4m52s kubelet, k8s-1d9qhq2cl-n1 Successfully pulled image "nginx:1.7.9"
Normal Created 4m52s kubelet, k8s-1d9qhq2cl-n1 Created container nginx
Normal Started 4m52s kubelet, k8s-1d9qhq2cl-n1 Started container nginx
إعادة مقياس نشر التطبيق عن طريق زيادة عدد النسخ المتماثلة
يهدف كل جراب إلى تشغيل مثيل واحد لتطبيق معين. إذا كنت ترغب في توسيع نطاق التطبيق أفقيا لتشغيل مثيلات متعددة، يمكنك زيادة عدد pods إلى واحد لكل مثيل. في Kubernetes، يشار إلى هذا باسم النسخ المتماثل. يمكنك زيادة عدد pods في نشر التطبيق الخاص بك عن طريق تطبيق ملف YAML جديد. يغير ملف YAML إعداد النسخ المتماثلة إلى 4، ما يزيد من عدد pods في النشر الخاص بك إلى أربعة pods. لزيادة عدد القرون من 2 إلى 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
بدلا من ذلك، يمكنك حفظ markdown التالية على الجهاز المحلي الخاص بك، واستبدل المسار واسم الملف للمعلمة -f ل kubectl apply
. على سبيل المثال، "C:\Kubernetes\deployment-scale.yaml". سيكون تكوين مقياس توزيع التطبيق:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
للتحقق من أن النشر يحتوي على أربعة pods:
kubectl get pods -l app=nginx
يظهر إخراج مثال لنشر إعادة التحجيم من اثنين إلى أربعة pods أدناه:
PS C:\WINDOWS\system32> kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
كما ترون من الإخراج، لديك الآن أربعة pods في النشر الخاص بك التي يمكن أن تشغل التطبيق الخاص بك.
حذف نشر
لحذف النشر، بما في ذلك كافة pods، تحتاج إلى تشغيل kubectl delete deployment
تحديد اسم نشر nginx-deployment واسم مساحة الاسم. لحذف النشر:
kubectl delete deployment nginx-deployment -n <namespace-string>
يظهر أدناه مثال على استخدام الأوامر، مع الإخراج:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted