انشر تطبيق Kubernetes عديم الحالة عبر kubectl على جهاز Azure Stack Edge Pro GPU

ينطبق على: نعم ل 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

توضح هذه المقالة كيفية نشر تطبيق عديم الحالة باستخدام أوامر 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.

نشر تطبيق عديم الحالة

قبل أن نبدأ، يجب أن يكون لديك:

  1. إنشاء مجموعة Kubernetes.
  2. إعداد مساحة اسم.
  3. ربط مستخدم بمساحة الاسم.
  4. حفظ تكوين المستخدم إلى C:\Users\<username>\.kube.
  5. تم التثبيت kubectl.

الآن يمكنك البدء في تشغيل وإدارة عمليات نشر التطبيقات عديمة الحالة على جهاز Azure Stack Edge Pro. قبل البدء في استخدام kubectl، تحتاج إلى التحقق من أن لديك الإصدار الصحيح من kubectl.

تحقق من أن لديك الإصدار الصحيح من kubectl وإعداد التكوين

للتحقق من إصدار kubectl:

  1. تحقق من أن إصدار أكبر أو 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 ومتوافق للمتابعة.

  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 الخاصة بك.

  3. تحقق يدويا من بنية الدليل ل "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:

  1. تطبيق تطبيق عديم الحالة عن طريق إنشاء كائن توزيع 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 افتراضيا يحتوي على جرابين لتشغيل التطبيق الخاص بك.

  2. احصل على وصف 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
    

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

    إشعار

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

  3. لسرد 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.

  4. لعرض معلومات حول جراب فردي في التوزيع الخاص بك:

    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

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

نظرة عامة على Kubernetes