نشر أعباء العمل على AKS
أنشئ مجموعة AKS، وانشر تطبيقًا متعدد الحاويات باستخدام kubectl ومخططات Helm، واعرضه خارجيًا باستخدام خدمة Azure Load Balancer.
نشر أعباء العمل على AKS درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ما هي Azure Kubernetes Service؟
Azure Kubernetes Service (AKS) هي خدمة Kubernetes مُدارة تتولى فيها Microsoft تشغيل وصيانة مستوى التحكم (خادم API وetcd وجدولة المهام وغيرها) من دون تكلفة. ولا تدفعون إلا مقابل العقد العاملة (الأجهزة الافتراضية). تتولى AKS ترقيات إصدار Kubernetes، وتصحيح نظام تشغيل العقد، وتوسيع نطاق مستوى التحكم، والتكامل مع شبكات Azure والتخزين والهوية. ويقلل ذلك بدرجة كبيرة من الأعباء التشغيلية لتشغيل Kubernetes في بيئات الإنتاج.
إنشاء عنقود AKS
أنشئوا عنقود AKS باستخدام az aks create، مع تحديد عدد العقد وحجم الأجهزة الافتراضية وخيارات الشبكات. تنشئ AKS تلقائيًا مجموعة موارد للعقد، وتحتوي على الأجهزة الافتراضية والأقراص المُدارة وبطاقات واجهة الشبكة وموازنات التحميل. ووضع الشبكات الموصى به هو Azure CNI — إذ يحصل كل pod على عنوان IP حقيقي من VNet، ما يتيح اتصالًا مباشرًا بخدمات Azure الأخرى من دون NAT.
# Create an AKS cluster with 3 nodes
az aks create \
--name myAKSCluster \
--resource-group MyRG \
--location eastus \
--node-count 3 \
--node-vm-size Standard_D2s_v3 \
--enable-managed-identity \
--attach-acr mycontainerregistry \
--network-plugin azure \
--generate-ssh-keys
# Get kubectl credentials
az aks get-credentials --name myAKSCluster --resource-group MyRGمجموعات العقد
يمكن أن تحتوي عناقيد AKS على عدة node pools — وهي مجموعات من الأجهزة الافتراضية ذات الإعداد نفسه. تشغّل system node pool مكونات نظام Kubernetes المهمة (pods الخاصة بـ kube-system). أما user node pools فتشغّل أحمال تطبيقاتكم. وتتيح المجموعات المنفصلة الجمع بين أنواع مختلفة من وحدات SKU للأجهزة الافتراضية — مثل مجموعة للأغراض العامة لتطبيقات الويب وأخرى مزودة بوحدات GPU لأحمال تعلم الآلة — مع إمكانية توسيع نطاق كل منها بصورة مستقلة.
# Add a GPU node pool for ML workloads
az aks nodepool add \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name gpupool \
--node-count 2 \
--node-vm-size Standard_NC6s_v3 \
--node-taints sku=gpu:NoSchedule
# List node pools
az aks nodepool list \
--cluster-name myAKSCluster \
--resource-group MyRG \
-o tableنشر تطبيق متعدد الحاويات
انشروا تطبيقًا متعدد الطبقات على AKS بكتابة ملفات بيانات Kubernetes منفصلة لكل طبقة، ثم تطبيقها باستخدام kubectl apply. ويتضمن النشر المعتاد Deployment لطبقة الويب، وDeployment لطبقة API، وServices لربطهما، وConfigMap لإعدادات البيئة، ومورد Ingress لإتاحة التطبيق خارجيًا عبر اسم مضيف واحد.
# Apply all manifests in a directory
kubectl apply -f k8s/
# Or apply individual files
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml
kubectl apply -f ingress.yaml
# Watch rollout status
kubectl rollout status deployment/frontend
kubectl rollout status deployment/apiIngress وApplication Gateway
يحدد Ingress resource قواعد توجيه HTTP التي تربط أسماء المضيفين ومسارات عناوين URL بخدمات الواجهة الخلفية. وعلى خلاف خدمة LoadBalancer (عنوان IP خارجي واحد لكل خدمة)، يتولى متحكم Ingress واحد معالجة كل حركة مرور HTTP الخارجية وتوجيهها استنادًا إلى القواعد. وفي AKS، استخدموا NGINX Ingress Controller أو Application Gateway Ingress Controller (AGIC) لإنهاء TLS وتوجيه حركة المرور إلى خدمات متعددة.
# Ingress routing traffic to two services by path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts: [myapp.contoso.com]
secretName: myapp-tls
rules:
- host: myapp.contoso.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service: {name: api-svc, port: {number: 80}}
- path: /
pathType: Prefix
backend:
service: {name: frontend-svc, port: {number: 80}}مخططات Helm لتغليف التطبيقات
يُعد Helm مدير الحزم الخاص بـ Kubernetes. ويجمع chart جميع ملفات بيانات Kubernetes الخاصة بتطبيق (Deployments وServices وIngress وConfigMaps) في حزمة واحدة قابلة لإصدار نسخ متعددة ومعلماتها. ينشر helm install مخططًا باستخدام قيم خاصة بالبيئة. ويستضيف Helm repository على Artifact Hub آلاف المخططات الجاهزة للبنية التحتية الشائعة (NGINX وcert-manager وPrometheus وRedis).
# Add the NGINX Ingress Controller chart repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install NGINX Ingress Controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.replicaCount=2
# Install your own app chart with custom values
helm install myapp ./charts/myapp -f values-prod.yamlالتحديثات التدريجية والتراجع
حدّثوا Deployment بتغيير وسم صورة الحاوية — إذ يجري Kubernetes rolling update، فينشئ pods جديدة بالصورة المحدّثة وينهي pods القديمة تدريجيًا، مع الحفاظ على إتاحة التطبيق طوال العملية. وإذا كان الإصدار الجديد معطوبًا، فتراجعوا فورًا إلى المراجعة السابقة باستخدام kubectl rollout undo. ويحتفظ Kubernetes بسجل قابل للتهيئة للمراجعات الخاصة بكل Deployment.
# Update the image to a new version
kubectl set image deployment/myapp \
myapp=mycontainerregistry.azurecr.io/myapp:v2.0
# Watch the rollout progress
kubectl rollout status deployment/myapp
# View rollout history
kubectl rollout history deployment/myapp
# Rollback to the previous version
kubectl rollout undo deployment/myapp
# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=2موسّع نطاق العنقود
يضيف Cluster Autoscaler العقد العاملة إلى مجموعة عقد AKS أو يزيلها تلقائيًا استنادًا إلى جدولة pods المعلّقة واستخدام العقد. وعندما يتعذر جدولة pods لأن جميع العقد ممتلئة، ينشئ Cluster Autoscaler عقدًا جديدة. وعندما تكون العقد قليلة الاستخدام ويمكن تجميع pods فيها، يُفرغ العقد ثم يزيلها. ويكمل ذلك عمل Horizontal Pod Autoscaler — إذ يوسّع HPA نطاق pods، بينما يوسّع Cluster Autoscaler نطاق العقد.
# Enable Cluster Autoscaler on the default node pool
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-cluster-autoscaler \
--min-count 2 \
--max-count 10
# Update autoscaler bounds on a specific node pool
az aks nodepool update \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name nodepool1 \
--enable-cluster-autoscaler \
--min-count 3 \
--max-count 20مراقبة AKS باستخدام Azure Monitor
فعّلوا Azure Monitor Container Insights لجمع السجلات والمقاييس من عنقود AKS من دون نشر أدوات مراقبة تابعة لجهات خارجية. توفر Container Insights لوحات معلومات جاهزة لصحة العنقود، واستخدام CPU والذاكرة للعقد وpods، وسجلات الحاويات، والبث المباشر لـ pods. كما تتكامل مع Prometheus لجمع المقاييس المخصصة، وتتيح الاستعلام عن جميع البيانات باستخدام KQL في Log Analytics.
# Enable Azure Monitor Container Insights on AKS
az aks enable-addons \
--addons monitoring \
--name myAKSCluster \
--resource-group MyRG \
--workspace-resource-id /subscriptions/.../workspaces/MyLogAnalytics
# Stream live logs from a running pod
kubectl logs -f deployment/myapp -c myapp
# Query pod resource usage
kubectl top pods --namespace defaultRBAC في AKS وAzure Active Directory
ادمجوا AKS مع Microsoft Entra ID لاستخدام مستخدمي Azure AD ومجموعاته في RBAC الخاص بـ Kubernetes. وبدلًا من إدارة حسابات مستخدمي Kubernetes منفصلة، عيّنوا ClusterRole أو Role bindings إلى معرّفات كائنات Entra ID. وعندما يشغّل أحد المطورين kubectl، تتحقق AKS من رمز Entra ID المميز الخاص به. ويوفر ذلك إدارة مركزية للهوية، ويتكامل مع سياسات الوصول المشروط والمصادقة متعددة العوامل.
# Enable Entra ID RBAC on an AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-azure-rbac
# Assign a built-in AKS role to an Entra group
az role assignment create \
--role 'Azure Kubernetes Service RBAC Reader' \
--assignee '<Entra-Group-Object-ID>' \
--scope /subscriptions/.../resourceGroups/MyRG/providers/Microsoft.ContainerService/managedClusters/myAKSClusterسياسات الشبكة لأمان مستوى pod
Network policies هي موارد Kubernetes التي تتحكم في أي pods يمكنها الاتصال ببعضها. افتراضيًا، يمكن لجميع pods في العنقود الوصول إلى جميع pods الأخرى — وتوفر سياسات الشبكة جدارًا ناريًا على مستوى pod. وفي AKS، فعّلوا سياسة شبكة Azure أو Calico لفرض هذه السياسات. ومن الأنماط الشائعة استخدام سياسة default-deny التي تحظر كل حركة المرور بين pods، ثم إضافة سياسات سماح صريحة للمسارات المحددة التي يحتاج إليها تطبيقكم.
# Default deny all ingress to pods in namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {} # Matches all pods
policyTypes:
- Ingress
# Allow API pods to receive from frontend pods only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
spec:
podSelector: {matchLabels: {app: api}}
ingress:
- from:
- podSelector: {matchLabels: {app: frontend}}تحقق سريع
اختبروا مدى فهمكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) التي تناولها هذا الدرس.
مراجعة الدرس
تعلّمتم في هذا الدرس أن AKS خدمة Kubernetes مُدارة تتولى Microsoft تشغيل مستوى التحكم فيها، وأن Helm charts تغلّف تطبيقات Kubernetes متعددة الموارد لتسهيل النشر القابل للتكرار، وأن Cluster Autoscaler يضيف العقد ويزيلها ديناميكيًا استنادًا إلى الطلب على جدولة pods. بعد ذلك، سنستكشف مشغلات Azure Functions وعمليات الربط الخاصة بها.
الأسئلة الشائعة
هل درس «نشر أعباء العمل على AKS» مجاني؟
نعم — نص درس «نشر أعباء العمل على AKS» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ماذا ستتعلم في «نشر أعباء العمل على AKS»؟
أنشئ مجموعة AKS، وانشر تطبيقًا متعدد الحاويات باستخدام kubectl ومخططات Helm، واعرضه خارجيًا باستخدام خدمة Azure Load Balancer. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟
لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «نشر أعباء العمل على AKS»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟
نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Azure Container Registry
- Azure Container Instances
- مفاهيم Kubernetes لـ Azure
- نشر أعباء العمل على AKS