تمرين - إنشاء HorizontalPodAutoscaler الخاص بك
تمرين - تحجيم تطبيق
إنشاء نظام مجموعة AKS
قبل أن تتمكن من البدء في تحجيم التطبيق الخاص بك، تحتاج إلى إنشاء نظام مجموعة AKS بالموارد المطلوبة.
سجل الدخول إلى Azure Cloud Shell باستخدام الحساب الذي تريد نشر الموارد فيه وحدد Bash ك shell قيد التشغيل.
إنشاء مجموعة موارد باستخدام
az group create
الأمر . ينشئ المثال التالي مجموعة موارد باسمmyResourceGroup
في الموقعeastus
:az group create --name myResourceGroup --location eastus
إنشاء نظام مجموعة 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
يستغرق الأمر بضع دقائق ليكتمل.
احصل على بيانات الاعتماد لنظام المجموعة باستخدام
az aks get-credentials
الأمر .az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
تحقق من أن نظام المجموعة قيد التشغيل ومن أنه يمكنك الاتصال به باستخدام
kubectl get nodes
الأمر .kubectl get nodes
يجب أن يرجع الأمر عقدة واحدة بحالة
Ready
.
توزيع موارد التطبيق
الآن بعد أن أصبح لديك نظام مجموعة، يمكنك نشر التطبيق عليه.
قم بنشر التطبيق
إنشاء مساحة اسم التطبيق باستخدام
kubectl create namespace
الأمر .kubectl create namespace hpa-contoso
إنشاء ملف جديد باسم
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
احفظ الملف.
نشر التطبيق إلى نظام المجموعة باستخدام
kubectl apply
الأمر .kubectl apply -f deployment.yml
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
deployment.apps/contoso-website created
إنشاء منطقة DNS ونشر مورد الدخول
إنشاء منطقة Azure DNS باستخدام
az network dns zone create
الأمر . ينشئ المثال التالي منطقة DNS تسمى contoso-website.com:az network dns zone create --resource-group myResourceGroup --name contoso-website.com
احصل على معرف المورد لمنطقة 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)
تحديث الوظيفة الإضافية لنظام مجموعة توجيه التطبيق لتمكين تكامل Azure DNS باستخدام
az aks approuting zone
الأمر .az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${DNS_ZONE_ID} --attach-zones
إنشاء ملف باسم
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
احفظ الملف.
نشر مورد الدخول إلى نظام المجموعة باستخدام
kubectl apply
الأمر .kubectl apply -f ingress.yml
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
ingress.networking.k8s.io/contoso-website created
إنشاء مورد الخدمة
إنشاء ملف باسم
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
احفظ الملف.
نشر مورد الخدمة إلى نظام المجموعة باستخدام
kubectl apply
الأمر .kubectl apply -f service.yml
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
service/contoso-website created
إنشاء HorizontalPodAutoscaler
إنشاء ملف باسم
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
يجب أن تكون مماثلة لمورد النشر الذي تم إنشاؤه. في حالتك، يكون للتوزيع الذي أنشأته باسمapiVersion
apps/v1
ويسمىcontoso-website
. تم تكوين HPA هذا للاستعلام عن مقياس وحدة المعالجة المركزية الأصلي. إذا تجاوز هذا المقياس متوسطه البالغ 20٪ لفترة زمنية محددة، فإنه يتوسع في التوزيع في وحدة. تستند الخوارزمية المستخدمة لحساب هذا المقياس إلى هذه المعادلة الرياضية:desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
minReplicas
تحدد المفاتيح وmaxReplicas
الحد الأدنى والحد الأقصى لعدد النسخ المتماثلة التي يمكن أن يحتويها التوزيع.metrics
يحدد المفتاح المقاييس التي يستعلمها HPA لتوسيع نطاق النشر. في هذه الحالة، يستعلم HPA عن مقاييس وحدة المعالجة المركزية والذاكرة. إذا تجاوز مقياس وحدة المعالجة المركزية 20٪ أو تجاوز مقياس الذاكرة 50٪، يقوم HPA بتحجيم التوزيع.احفظ الملف.
إنشاء HPA باستخدام
kubectl apply
الأمر .kubectl apply -f hpa.yml
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
horizontalpodautoscaler.autoscaling/contoso-website created
التحقق من النتائج
الاستعلام عن مقاييس واستخدام 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
للثواني القليلة الأولى لمحاولته الوصول إلى واجهة برمجة تطبيقات المقاييس لجلب تلك المقاييس من الخادم.