مشاركة عبر


مناطق التوفر في خدمة Azure Kubernetes (AKS)

تساعد مناطق التوفر على حماية التطبيقات والبيانات من فشل مركز البيانات. المناطق هي مواقع فعلية فريدة داخل منطقة Azure. تتضمن كل منطقة مركز بيانات واحدا أو أكثر مزودا بالطاقة المستقلة والتبريد والشبكات.

يؤدي استخدام AKS مع مناطق التوفر إلى توزيع الموارد فعليا عبر مناطق توفر مختلفة داخل منطقة واحدة، ما يحسن الموثوقية. لا يؤدي نشر العقد في مناطق متعددة إلى تكاليف إضافية.

توضح هذه المقالة كيفية تكوين موارد AKS لاستخدام مناطق التوفر.

موارد AKS

يوضح هذا الرسم التخطيطي موارد Azure التي يتم إنشاؤها عند إنشاء نظام مجموعة AKS:

رسم تخطيطي يوضح مكونات AKS المختلفة، ويعرض مكونات AKS التي تستضيفها مكونات Microsoft وAKS في اشتراك Azure الخاص بك.

وحدة تحكم AKS

تستضيف Microsoft وحدة التحكم AKS وخادم Kubernetes API والخدمات مثل scheduler و etcd كخدمة مدارة. تقوم Microsoft بنسخ مستوى التحكم نسخا متماثلا في مناطق متعددة.

يتم نشر الموارد الأخرى من نظام المجموعة في مجموعة موارد مدارة في اشتراك Azure الخاص بك. بشكل افتراضي، تكون مجموعة الموارد هذه مسبوقة MC_، للمجموعة المدارة وتحتوي على الموارد التالية:

تجمعات العقدة

يتم إنشاء تجمعات العقدة كمجموعة مقياس الجهاز الظاهري في اشتراك Azure الخاص بك.

عند إنشاء نظام مجموعة AKS، يلزم وجود تجمع عقدة نظام واحد ويتم إنشاؤه تلقائيا. يستضيف جرابات النظام الهامة مثل CoreDNS و metrics-server. يمكن إضافة المزيد من تجمعات عقدة المستخدم إلى نظام مجموعة AKS لاستضافة تطبيقاتك.

هناك ثلاث طرق يمكن من خلالها نشر تجمعات العقد:

  • امتداد المنطقة
  • محاذاة المنطقة
  • الإقليمية

رسم تخطيطي يوضح توزيع عقدة AKS عبر مناطق التوفر في النماذج المختلفة.

بالنسبة إلى تجمع عقدة النظام، يتم تكوين عدد المناطق المستخدمة عند إنشاء نظام المجموعة.

امتداد المنطقة

تنتشر مجموعة المقياس التي تمتد عبر المنطقة العقد عبر جميع المناطق المحددة، عن طريق تحديد هذه المناطق باستخدام المعلمة --zones .

# Create an AKS Cluster, and create a zone spanning System Nodepool in all three AZs, one node in each AZ
az aks create --resource-group example-rg --name example-cluster --node-count 3 --zones 1, 2, 3
# Add one new zone spanning User Nodepool, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-a  --node-count 6 --zones 1, 2, 3 

يوازن AKS عدد العقد بين المناطق تلقائيا.

إذا حدث انقطاع نطاقي، يمكن أن تتأثر العقد داخل المنطقة المتأثرة، بينما تظل العقد في مناطق التوفر الأخرى غير متأثرة.

محاذاة المنطقة

تتم محاذاة كل عقدة (مثبتة) إلى منطقة معينة. لإنشاء ثلاث تجمعات عقد لمنطقة بها ثلاث مناطق توفر:

# # Add three new zone aligned User Nodepools, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-x  --node-count 2 --zones 1
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-y  --node-count 2 --zones 2
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-z  --node-count 2 --zones 3

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

إشعار

  • إذا تم نشر حمل عمل واحد عبر تجمعات العقد، نوصي بإعداد --balance-similar-node-groupstrue للحفاظ على توزيع متوازن للعقد عبر مناطق لأحمال العمل الخاصة بك أثناء عمليات توسيع النطاق.

إقليمي (لا يستخدم مناطق التوفر)

يتم استخدام الوضع الإقليمي عندما لا يتم تعيين تعيين المنطقة في قالب التوزيع ("zones"=[] or "zones"=null).

في هذا التكوين، ينشئ تجمع العقدة مثيلات إقليمية (غير مثبتة في المنطقة) ويضع المثيلات ضمنيا في جميع أنحاء المنطقة. لا يوجد ضمان للتوازن أو الانتشار عبر المناطق، أو أن المثيلات تهبط في نفس منطقة التوفر.

في حالة نادرة من انقطاع المنطقة الكامل، يمكن أن تتأثر أي أو جميع المثيلات داخل تجمع العقدة.

للتحقق من صحة مواقع العقدة، قم بتشغيل الأمر التالي:

kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
NAME                                REGION   ZONE
aks-nodepool1-34917322-vmss000000   eastus   eastus-1
aks-nodepool1-34917322-vmss000001   eastus   eastus-2
aks-nodepool1-34917322-vmss000002   eastus   eastus-3

عمليات النشر

Pods

يدرك Kubernetes مناطق توفر Azure، ويمكنه موازنة القرون عبر العقد في مناطق مختلفة. في حالة عدم توفر المنطقة، ينقل Kubernetes القرون بعيدا عن العقد المتأثرة تلقائيا.

كما هو موثق في الملصقات المعروفة والتعليقات التوضيحية والعيوب، تستخدم Kubernetes الملصق topology.kubernetes.io/zone لنشر الجرابات تلقائياً في خدمة أو وحدة تحكم النسخ المتماثل عبر المناطق المختلفة المتاحة.

لعرض عقد الجرابات التي يتم تشغيلها، قم بتشغيل الأمر التالي:

  kubectl describe pod | grep -e "^Name:" -e "^Node:"

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

kind: Pod
apiVersion: v1
metadata:
  name: myapp
spec:
  replicas: 3
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: DoNotSchedule # or ScheduleAnyway
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.1

التخزين ووحدات التخزين

بشكل افتراضي، تستخدم إصدارات Kubernetes 1.29 والإصدارات الأحدث أقراص Azure المدارة باستخدام Zone-Redundant-Storage (ZRS) لمطالبات وحدة التخزين الدائمة.

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

مثال على مطالبة وحدة تخزين ثابتة تستخدم Standard SSD في ZRS:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-csi
  #storageClassName: managed-csi-premium
  resources:
    requests:
      storage: 5Gi

بالنسبة إلى عمليات النشر المتوافقة مع المنطقة، يمكنك إنشاء فئة تخزين جديدة مع تعيين المعلمة skuname إلى LRS (التخزين المتكرر محليا). يمكنك بعد ذلك استخدام فئة التخزين الجديدة في مطالبة وحدة التخزين الثابتة (PVC).

بينما تكون أقراص LRS أقل تكلفة، فإنها ليست متكررة في المنطقة، ولا يتم دعم إرفاق قرص بعقدة في منطقة مختلفة.

مثال على فئة تخزين LRS Standard SSD:

kind: StorageClass

metadata:
  name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
  #skuname: PremiumV2_LRS

موازنة التحميل

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

مثال على الخدمة التي تستخدم Azure Load Balancer:

apiVersion: v1
kind: Service
metadata:
  name: example
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080

هام

في 30 سبتمبر 2025، سيتم إيقاف موازن التحميل الأساسي. لمزيد من المعلومات، راجع الإعلان الرسمي. إذا كنت تستخدم موازن التحميل الأساسي حاليا، فتأكد من الترقية إلى موازن التحميل القياسي قبل تاريخ الإيقاف.

القيود

تنطبق القيود التالية عند استخدام مناطق التوفر:

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