ترقية نظام مجموعة Azure Kubernetes Service (AKS)
يتضمن جزء من دورة حياة نظام مجموعة خدمة Azure Kubernetes إجراء ترقيات دورية لأحدث إصدار من Kubernetes. من المهم تطبيق أحدث إصدارات الأمان والترقيات للحصول على أحدث الميزات. توضح لك هذه المقالة كيفية التحقق من وجود ترقيات وتطبيقها على نظام مجموعة AKS.
ترقيات إصدار Kubernetes
عند ترقية مجموعة AKS مدعومة، لا يمكنك تخطي إصدارات Kubernetes الثانوية. يجب إجراء جميع الترقيات بالتتابع حسب رقم الإصدار الرئيسي. على سبيل المثال، يسمح بالترقيات بين 1.14.x ->1.15.x أو 1.15.x ->1.16.x . 1.14.x ->1.16.x غير مسموح به. يمكنك تخطي إصدارات متعددة فقط عند الترقية من إصدار غير مدعوم مرة أخرى إلى إصدار مدعوم. على سبيل المثال، يمكنك إجراء ترقية من 1.10.x غير معتمد إلى 1.12.x معتمد إذا كان متوفرا.
عند إجراء ترقية من إصدار غير مدعوم يتخطى إصدارين ثانويين أو أكثر، لا تضمن الترقية الوظائف ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. إذا كان الإصدار الخاص بك قديما بشكل كبير، نوصي بإعادة إنشاء نظام المجموعة بدلا من ذلك.
قبل البدء
- إذا كنت تستخدم Azure CLI، تتطلب هذه المقالة الإصدار 2.34.1 من Azure CLI أو أحدث. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - إذا كنت تستخدم Azure PowerShell، تتطلب هذه المقالة إصدار Azure PowerShell 5.9.0 أو أحدث. قم بتشغيل
Get-InstalledModule -Name Az
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت وحدة Azure PowerShell. - يتطلب تنفيذ عمليات الترقية
Microsoft.ContainerService/managedClusters/agentPools/write
دور RBAC. لمزيد من البحث عن أدوار Azure RBAC، راجع عمليات موفر موارد Azure. - بدءا من إصدار 1.30 kubernetes وإصدارات 1.27 LTS، سيتم تعطيل واجهات برمجة التطبيقات التجريبية بشكل افتراضي عند الترقية إليها.
تحذير
تؤدي ترقية نظام مجموعة AKS إلى تطويق العقد واستنزافها. إذا كان لديك حصة نسبية منخفضة للحساب متوفرة، فقد تفشل الترقية. لمزيد من المعلومات، راجع زيادة الحصص النسبية.
التحقق من وجود ترقيات مجموعة AKS المتوفرة
إشعار
للبقاء على اطلاع بإصلاحات وإصدارات وتحديثات AKS، راجع متعقب إصدار AKS.
تحقق من إصدارات Kubernetes المتوفرة لنظام المجموعة باستخدام
az aks get-upgrades
الأمر .az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
يظهر إخراج المثال التالي الإصدار الحالي ك 1.26.6 ويسرد الإصدارات المتوفرة ضمن
upgrades
:{ "agentPoolProfiles": null, "controlPlaneProfile": { "kubernetesVersion": "1.26.6", ... "upgrades": [ { "isPreview": null, "kubernetesVersion": "1.27.1" }, { "isPreview": null, "kubernetesVersion": "1.27.3" } ] }, ... }
استكشاف أخطاء رسائل خطأ ترقية نظام مجموعة AKS وإصلاحها
يعني إخراج المثال التالي أن الملحق appservice-kube
غير متوافق مع إصدار Azure CLI (مطلوب حد أدنى من الإصدار 2.34.1):
The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.
إذا تلقيت هذا الإخراج، فستحتاج إلى تحديث إصدار Azure CLI. تمت إضافة الأمر az upgrade
في الإصدار 2.11.0 ولا يعمل مع الإصدارات السابقة لـ 2.11.0. يمكنك تحديث الإصدارات القديمة عن طريق إعادة تثبيت Azure CLI كما هو موضح في تثبيت Azure CLI. إذا كان إصدار Azure CLI هو 2.11.0 أو أحدث، فقم بتشغيل az upgrade
لترقية Azure CLI إلى أحدث إصدار.
إذا تم تحديث Azure CLI الخاص بك وتلقيت إخراج المثال التالي، فهذا يعني أنه لا تتوفر ترقيات:
ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.
إذا لم تتوفر أي ترقيات، فقم بإنشاء نظام مجموعة جديد بإصدار مدعوم من Kubernetes وترحيل أحمال العمل الخاصة بك من نظام المجموعة الحالي إلى نظام المجموعة الجديد. لا يدعم AKS ترقية نظام مجموعة إلى إصدار Kubernetes أحدث عندما az aks get-upgrades
يظهر عدم توفر ترقيات.
ترقية نظام مجموعة AKS
أثناء عملية ترقية نظام المجموعة، تقوم AKS بتنفيذ العمليات التالية:
- إضافة عقدة مخزن مؤقت جديد (أو العديد من العُقد كما تم تكوينها في زيادة الحد الأقصى) إلى نظام المجموعة الذي يقوم بتشغيل إصدار Kubernetes المحدد.
- تطويق إحدى العقد القديمة واستنزافها لتقليل تعطيل التطبيقات قيد التشغيل. إذا كنت تستخدم الحد الأقصى من الارتفاع المفاجئ، فإنه يطوق ويصرف العديد من العقد في نفس الوقت مثل عدد عقد المخزن المؤقت المحددة.
- بالنسبة للقرون طويلة الأمد، يمكنك تكوين مهلة استنزاف العقدة، والتي تسمح بوقت الانتظار المخصص على إخلاء القرون والإنهاء بأمان لكل عقدة. إذا لم يتم تحديده، يكون الافتراضي هو 30 دقيقة. الحد الأدنى لقيمة المهلة المسموح بها هو 5 دقائق.
- عندما يتم استنزاف العقدة القديمة بالكامل، يتم إعادة تصورها لتلقي الإصدار الجديد وتصبح عقدة المخزن المؤقت للعقدة التالية المراد ترقيتها.
- اختياريا، يمكنك تعيين مدة زمنية للانتظار بين استنزاف عقدة والمتابعة لإعادة تعيينها والانتقال إلى العقدة التالية. يسمح لك الفاصل الزمني القصير بإكمال مهام أخرى، مثل التحقق من صحة التطبيق من لوحة معلومات Grafana أثناء عملية الترقية. نوصي بإطار زمني قصير لعملية الترقية، ما يقرب من 0 دقائق قدر الإمكان. وإلا، فإن وقت نقع العقدة الأعلى يؤثر على المدة قبل اكتشاف مشكلة. الحد الأدنى لقيمة وقت النقع هو 0 دقيقة، بحد أقصى 30 دقيقة. إذا لم يتم تحديدها، تكون القيمة الافتراضية 0 دقائق.
- تتكرر هذه العملية حتى تتم ترقية كافة العقد في نظام المجموعة.
- في نهاية العملية، يتم حذف عقدة المخزن المؤقت الأخيرة، مع الحفاظ على عدد عقدة العامل الحالية ورصيد المنطقة.
إشعار
إذا لم يتم تحديد تصحيح، يقوم نظام المجموعة بالترقية تلقائيا إلى أحدث تصحيح GA للإصدار الثانوي المحدد. على سبيل المثال، تعيين --kubernetes-version
إلى 1.28
النتائج في ترقية نظام المجموعة إلى 1.28.9
.
لمزيد من المعلومات، راجع ترقيات الإصدار الثانوي ل Kubernetes المدعومة في AKS.
قم بترقية نظام المجموعة باستخدام
az aks upgrade
الأمر .az aks upgrade \ --resource-group myResourceGroup \ --name myAKSCluster \ --kubernetes-version <KUBERNETES_VERSION>
تأكد من نجاح الترقية
az aks show
باستخدام الأمر .az aks show --resource-group myResourceGroup --name myAKSCluster --output table
يوضح إخراج المثال التالي أن نظام المجموعة يعمل الآن 1.27.3:
Name Location ResourceGroup KubernetesVersion ProvisioningState Fqdn ------------ ---------- --------------- ------------------- ------------------- ---------------------------------------------- myAKSCluster eastus myResourceGroup 1.27.3 Succeeded myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
تعيين قناة الترقية التلقائية
يمكنك تعيين قناة ترقية تلقائية على نظام المجموعة. لمزيد من المعلومات، راجع الترقية التلقائية لمجموعة AKS.
تخصيص ترقية طفرة العقدة
هام
تتطلب طفرات العقدة حصة اشتراك لعدد الارتفاع الأقصى المطلوب لكل عملية ترقية. على سبيل المثال، يحتوي نظام المجموعة الذي يحتوي على خمس تجمعات عقد، لكل منها عدد أربع عقد، بإجمالي 20 عقدة. إذا كان لكل تجمع عقدة قيمة زيادة الحد الأقصى من 50%، حساب إضافية وIP الحصة النسبية من العقد 10 (2 العقد * 5 تجمعات) مطلوب لإكمال الترقية.
إعداد الحد الأقصى للطفرة على تجمع عقدة مستمر. ستستخدم ترقيات Kubernetes اللاحقة أو ترقيات إصدار العقدة هذا الإعداد. يمكنك تغيير قيمة الارتفاع الأقصى لتجمعات العقد في أي وقت. بالنسبة لمجمعات عقد الإنتاج، نوصي بإعداد أقصى زيادة بنسبة 33%.
إذا كنت تستخدم Azure CNI، فتحقق من وجود عناوين IP متوفرة في الشبكة الفرعية لتلبية متطلبات IP ل Azure CNI.
تقوم AKS بتكوين الترقيات لزيادة مع عقدة إضافية واحدة بشكل افتراضي. تمكن القيمة الافتراضية لأحد إعدادات الارتفاع الأقصى AKS من تقليل تعطيل حمل العمل عن طريق إنشاء عقدة إضافية قبل تطويق/استنزاف التطبيقات الموجودة لاستبدال عقدة قديمة تم إصدارها. يمكنك تخصيص قيمة الارتفاع الأقصى لكل تجمع عقدة. عند زيادة قيمة الارتفاع الأقصى، تكتمل عملية الترقية بشكل أسرع، وقد تواجه اضطرابات أثناء عملية الترقية.
على سبيل المثال، توفر قيمة الارتفاع الأقصى بنسبة 100٪ أسرع عملية ترقية ممكنة، ولكنها تتسبب أيضا في استنزاف جميع العقد في تجمع العقدة في وقت واحد. قد تحتاج إلى استخدام قيمة أعلى مثل هذه لبيئات الاختبار. بالنسبة لتجمعات عقد الإنتاج، نوصي بإعداد max_surge
33٪.
تقبل AKS قيم العدد الصحيح وقيمة النسبة المئوية لأقصى ارتفاع. يشير عدد صحيح مثل 5 إلى خمس عقد إضافية لزيادة. تشير القيمة 50٪ إلى قيمة طفرة تبلغ نصف عدد العقد الحالية في التجمع. يمكن أن تكون قيم الحد الأقصى للزيادة في النسبة المئوية 1٪ كحد أدنى و100٪كحد أقصى. يتم تقريب قيمة النسبة المئوية إلى أقرب عدد عقدة. إذا كانت قيمة الارتفاع الأقصى أعلى من العدد المطلوب من العقد المراد ترقيتها، استخدام عدد العقد المراد ترقيتها لقيمة الارتفاع الأقصى. أثناء الترقية، يمكن أن تكون قيمة الارتفاع الأقصى 1 كحد أدنى وقيمة قصوى تساوي عدد العقد في تجمع العقدة. يمكنك تعيين قيم أكبر، ولكن لا يمكنك تعيين الحد الأقصى لعدد العقد المستخدمة للزيادة القصوى أعلى من عدد العقد في التجمع في وقت الترقية.
تعيين الحد الأقصى لقيمة الارتفاع المفاجئ
تعيين قيم الارتفاع الأقصى لتجمعات العقد الجديدة أو الموجودة باستخدام
az aks nodepool add
الأمر أوaz aks nodepool update
.# Set max surge for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% # Update max surge for an existing node pool az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
تعيين قيمة مهلة استنزاف العقدة
في بعض الأحيان، قد يكون لديك حمل عمل طويل الأمد على جراب معين ولا يمكن إعادة جدولته إلى عقدة أخرى أثناء وقت التشغيل، على سبيل المثال، حمل عمل ذي حالة ذاكرة مكثفة يجب أن ينتهي من التشغيل. في هذه الحالات، يمكنك تكوين مهلة استنزاف العقدة التي ستحترمها AKS في سير عمل الترقية. إذا لم يتم تحديد قيمة مهلة استنزاف العقدة، يكون الافتراضي هو 30 دقيقة. الحد الأدنى المسموح به لقيمة مهلة التصريف هو 5 دقائق.
إذا كانت قيمة مهلة الاستنزاف المنقضية والقرون لا تزال قيد التشغيل، إيقاف عملية الترقية. يجب أن تستأنف أي عملية PUT لاحقة الترقية المتوقفة. يوصى أيضا بالجرابات طويلة الأمد لتكوين [terminationGracePeriodSeconds
][https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/].
تعيين مهلة استنزاف العقدة لتجمعات العقد الجديدة أو الموجودة باستخدام
az aks nodepool add
الأمر أوaz aks nodepool update
.# Set drain timeout for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 100 # Update drain timeout for an existing node pool az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 45
تعيين قيمة وقت نقع العقدة
للسماح لمدة من الوقت بالانتظار بين استنزاف عقدة والمتابعة لإعادة تشكيلها والانتقال إلى العقدة التالية، يمكنك تعيين وقت النقع إلى قيمة بين 0 و30 دقيقة. إذا لم يتم تحديد قيمة وقت نقع العقدة، فإن القيمة الافتراضية هي 0 دقيقة.
تعيين وقت نقع العقدة لتجمعات العقد الجديدة أو الموجودة باستخدام
az aks nodepool add
الأمر أوaz aks nodepool update
أو .az aks nodepool upgrade
# Set node soak time for a new node pool az aks nodepool add --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10 # Update node soak time for an existing node pool az aks nodepool update --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5 # Set node soak time when upgrading an existing node pool az aks nodepool upgrade --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
عرض أحداث الترقية
عرض أحداث الترقية
kubectl get events
باستخدام الأمر .kubectl get events
يظهر إخراج المثال التالي بعض الأحداث المذكورة أعلاه أثناء الترقية:
... default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001] ... default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001 Soak duration 5m0s after draining node: aks-nodepool1-96663640-vmss000001 ... default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool nodepool1 ...
الخطوات التالية
لمعرفة كيفية تكوين الترقيات التلقائية، راجع تكوين الترقيات التلقائية لمجموعة AKS.
للحصول على مناقشة مفصلة حول أفضل ممارسات الترقية والاعتبارات الأخرى، راجع تصحيح AKS وإرشادات الترقية.
Azure Kubernetes Service