تمرين - إنشاء HorizontalPodAutoscaler الخاص بك

مكتمل

تمرين - تحجيم تطبيق

إنشاء نظام مجموعة AKS

قبل أن تتمكن من البدء في تحجيم التطبيق الخاص بك، تحتاج إلى إنشاء نظام مجموعة AKS بالموارد المطلوبة.

  1. سجل الدخول إلى Azure Cloud Shell باستخدام الحساب الذي تريد نشر الموارد فيه وحدد Bash ك shell قيد التشغيل.

  2. إنشاء مجموعة موارد باستخدام az group create الأمر . ينشئ المثال التالي مجموعة موارد باسم myResourceGroup في الموقع eastus:

    az group create --name myResourceGroup --location eastus
    
  3. إنشاء نظام مجموعة AKS باستخدام az aks create الأمر . ينشئ المثال التالي نظام مجموعة باسم myAKSCluster في myResourceGroup مجموعة الموارد. يحتوي نظام المجموعة على عقدة Standard_DS2_v2 واحدة ويستخدم حجم الجهاز الظاهري.

    az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --node-vm-size Standard_DS2_v2 --enable-app-routing --generate-ssh-keys
    

    يستغرق الأمر بضع دقائق ليكتمل.

  4. احصل على بيانات الاعتماد لنظام المجموعة باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  5. تحقق من أن نظام المجموعة قيد التشغيل ومن أنه يمكنك الاتصال به باستخدام kubectl get nodes الأمر .

    kubectl get nodes
    

    يجب أن يرجع الأمر عقدة واحدة بحالة Ready.

توزيع موارد التطبيق

الآن بعد أن أصبح لديك نظام مجموعة، يمكنك نشر التطبيق عليه.

قم بنشر التطبيق

  1. إنشاء مساحة اسم التطبيق باستخدام kubectl create namespace الأمر .

    kubectl create namespace hpa-contoso
    
  2. إنشاء ملف جديد باسم deployment.yml في محرر Cloud Shell ولصق التعليمات البرمجية YAML التالية فيه:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - name: contoso-website
              image: mcr.microsoft.com/mslearn/samples/contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
    
  3. احفظ الملف.

  4. نشر التطبيق إلى نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f deployment.yml
    

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    deployment.apps/contoso-website created
    

إنشاء منطقة DNS ونشر مورد الدخول

  1. إنشاء منطقة Azure DNS باستخدام az network dns zone create الأمر . ينشئ المثال التالي منطقة DNS تسمى contoso-website.com:

    az network dns zone create --resource-group myResourceGroup --name contoso-website.com
    
  2. احصل على معرف المورد لمنطقة DNS الخاصة بك باستخدام az network dns zone show الأمر واحفظ الإخراج إلى متغير يسمى DNS_ZONE_ID.

    DNS_ZONE_ID=$(az network dns zone show --resource-group myResourceGroup --name contoso-website.com --query id --output tsv)
    
  3. تحديث الوظيفة الإضافية لنظام مجموعة توجيه التطبيق لتمكين تكامل Azure DNS باستخدام az aks approuting zone الأمر .

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${DNS_ZONE_ID} --attach-zones
    
  4. إنشاء ملف باسم ingress.yml في محرر Cloud Shell ولصق التعليمات البرمجية YAML التالية فيه. تأكد من استبدال <dns-zone-name> العنصر النائب باسم منطقة DNS الخاصة بك.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-website
      namespace: hpa-contoso
      annotations:
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <dns-zone-name>
        http:
          paths:
          - backend:
              service:
                name: contoso-website
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  5. احفظ الملف.

  6. نشر مورد الدخول إلى نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f ingress.yml
    

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    ingress.networking.k8s.io/contoso-website created
    

إنشاء مورد الخدمة

  1. إنشاء ملف باسم service.yml في محرر Cloud Shell ولصق التعليمات البرمجية YAML التالية فيه:

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      type: ClusterIP
      ports:
        - port: 80
          targetPort: 80
      selector:
        app: contoso-website
    
  2. احفظ الملف.

  3. نشر مورد الخدمة إلى نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f service.yml
    

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    service/contoso-website created
    

إنشاء HorizontalPodAutoscaler

  1. إنشاء ملف باسم hpa.yml في محرر Cloud Shell ولصق التعليمات البرمجية YAML التالية فيه:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: contoso-website
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 20
        - type: Resource
          resource:
            name: memory
            target:
              type: Utilization
              averageUtilization: 50
    

    من المهم الإشارة إلى أن المفاتيح scaleTargetRef يجب أن تكون مماثلة لمورد النشر الذي تم إنشاؤه. في حالتك، يكون للتوزيع الذي أنشأته باسم apiVersionapps/v1 ويسمى contoso-website. تم تكوين HPA هذا للاستعلام عن مقياس وحدة المعالجة المركزية الأصلي. إذا تجاوز هذا المقياس متوسطه البالغ 20٪ لفترة زمنية محددة، فإنه يتوسع في التوزيع في وحدة. تستند الخوارزمية المستخدمة لحساب هذا المقياس إلى هذه المعادلة الرياضية:

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
    

    minReplicas تحدد المفاتيح و maxReplicas الحد الأدنى والحد الأقصى لعدد النسخ المتماثلة التي يمكن أن يحتويها التوزيع. metrics يحدد المفتاح المقاييس التي يستعلمها HPA لتوسيع نطاق النشر. في هذه الحالة، يستعلم HPA عن مقاييس وحدة المعالجة المركزية والذاكرة. إذا تجاوز مقياس وحدة المعالجة المركزية 20٪ أو تجاوز مقياس الذاكرة 50٪، يقوم HPA بتحجيم التوزيع.

  2. احفظ الملف.

  3. إنشاء HPA باستخدام kubectl apply الأمر .

    kubectl apply -f hpa.yml
    

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    horizontalpodautoscaler.autoscaling/contoso-website created
    

التحقق من النتائج

  1. الاستعلام عن مقاييس واستخدام HPA باستخدام kubectl get hpa الأمر .

    kubectl get hpa --namespace hpa-contoso
    

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    NAME              REFERENCE                    TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
    contoso-website   Deployment/contoso-website   0%/20%, 0%/50%   1         10        1          83s
    

    TARGETS لاحظ العمود. يظهر الاستخدام الحالي للمقاييس المحددة في HPA. في هذه الحالة، يكون استخدام وحدة المعالجة المركزية 0٪ واستخدام الذاكرة هو 0٪. وذلك لأن التطبيق لا يتلقى أي حركة مرور.

    إشعار

    من المحتمل أن يعرض مورد HPA مقاييس unknown للثواني القليلة الأولى لمحاولته الوصول إلى واجهة برمجة تطبيقات المقاييس لجلب تلك المقاييس من الخادم.