استكشاف أخطاء حساب Kubernetes وإصلاحها

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

دليل الاستدلال

يتم تصنيف أخطاء نقطة نهاية Kubernetes الشائعة على حساب Kubernetes إلى نطاقين: نطاق الحساب ونطاق نظام المجموعة. ترتبط أخطاء نطاق الحساب بهدف الحساب، مثل عدم العثور على هدف الحساب، أو لا يمكن الوصول إلى هدف الحساب. ترتبط أخطاء نطاق نظام المجموعة بمجموعة Kubernetes الأساسية، مثل نظام المجموعة نفسه غير قابل للوصول، أو لم يتم العثور على نظام المجموعة.

أخطاء حساب Kubernetes

فيما يلي أنواع الأخطاء الشائعة في نطاق الحوسبة التي قد تواجهها عند استخدام حساب Kubernetes لإنشاء نقاط النهاية عبر الإنترنت والنشرات عبر الإنترنت لاستدلال النموذج في الوقت الفعلي. يمكنك مواجهة مشكلة في التصوير باتباع الأقسام المرتبطة للحصول على الإرشادات:

خطأ: GenericComputeError

رسالة الخطأ هي كما يلي:

Failed to get compute information.

يجب أن يحدث هذا الخطأ عندما فشل النظام في الحصول على معلومات الحساب من مجموعة Kubernetes. يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

  • تحقق من حالة مجموعة Kubernetes. إذا لم يكن نظام المجموعة قيد التشغيل، فستحتاج إلى بدء تشغيل نظام المجموعة أولا.
  • تحقق من صحة مجموعة Kubernetes.
    • يمكنك عرض تقرير التحقق من صحة نظام المجموعة لأي مشكلات، على سبيل المثال، إذا لم يكن نظام المجموعة قابلا للوصول.
    • يمكنك الانتقال إلى مدخل مساحة العمل للتحقق من حالة الحساب.
  • تحقق مما إذا كانت أنواع المثيلات معلومات صحيحة. يمكنك التحقق من أنواع المثيلات المدعومة في وثائق حساب Kubernetes.
  • حاول فصل الحساب وإعادة إرفاقه إلى مساحة العمل إذا كان ذلك ممكنا.

إشعار

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

خطأ: ComputeNotFound

رسالة الخطأ هي كما يلي:

Cannot find Kubernetes compute.

يجب أن يحدث هذا الخطأ عندما:

  • يتعذر على النظام العثور على الحساب عند إنشاء/تحديث نقطة نهاية/نشر جديدة عبر الإنترنت.
  • تمت إزالة حساب نقاط النهاية/عمليات النشر الموجودة عبر الإنترنت.

يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

  • حاول إعادة إنشاء نقطة النهاية والنشر.
  • حاول فصل الحساب وإعادة إرفاقه إلى مساحة العمل. انتبه إلى المزيد من الملاحظات حول إعادة إرفاق.

خطأ: ComputeNotAccessible

رسالة الخطأ هي كما يلي:

The Kubernetes compute is not accessible.

يجب أن يحدث هذا الخطأ عندما لا يكون لمساحة العمل MSI (الهوية المدارة) حق الوصول إلى نظام مجموعة AKS. يمكنك التحقق مما إذا كان MSI لمساحة العمل لديه حق الوصول إلى AKS، وإذا لم يكن الأمر كما هو، يمكنك اتباع هذا المستند لإدارة الوصول والهوية.

ERROR: InvalidComputeInformation

رسالة الخطأ هي كما يلي:

The compute information is invalid.

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

يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

  • تحقق مما إذا كان هدف الحساب الذي استخدمته صحيحا وموجودا في مساحة العمل الخاصة بك.
  • حاول فصل الحساب وإعادة إرفاقه إلى مساحة العمل. انتبه إلى المزيد من الملاحظات حول إعادة إرفاق.

خطأ: InvalidComputeNoKubernetesConfiguration

رسالة الخطأ هي كما يلي:

The compute kubeconfig is invalid.

يجب أن يحدث هذا الخطأ عندما فشل النظام في العثور على أي تكوين للاتصال بنظام المجموعة، مثل:

  • بالنسبة إلى مجموعة Arc-Kubernetes، لا يمكن العثور على تكوين Azure Relay.
  • بالنسبة إلى نظام مجموعة AKS، لا يمكن العثور على تكوين AKS.

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

خطأ في نظام مجموعة Kubernetes

فيما يلي قائمة بأنواع الأخطاء في نطاق نظام المجموعة التي قد تواجهها عند استخدام حساب Kubernetes لإنشاء نقاط نهاية عبر الإنترنت وتوزيعات عبر الإنترنت لاستنتاج النموذج في الوقت الحقيقي، والتي يمكنك مواجهتها عن طريق اتباع الإرشادات:

خطأ: GenericClusterError

رسالة الخطأ هي كما يلي:

Failed to connect to Kubernetes cluster: <message>

يجب أن يحدث هذا الخطأ عندما فشل النظام في الاتصال بمجموعة Kubernetes لسبب غير معروف. يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

بالنسبة لمجموعات AKS:

  • تحقق مما إذا كان نظام مجموعة AKS متوقفا عن التشغيل.
    • إذا لم يكن نظام المجموعة قيد التشغيل، فستحتاج إلى بدء تشغيل نظام المجموعة أولا.
  • تحقق مما إذا كان نظام مجموعة AKS قد قام بتمكين شبكة محددة باستخدام نطاقات IP المعتمدة.
    • إذا قام نظام مجموعة AKS بتمكين نطاقات IP المعتمدة، فتأكد من تمكين جميع نطاقات IP لمستوى التحكم Azure التعلم الآلي لنظام مجموعة AKS. مزيد من المعلومات يمكنك الاطلاع على هذا المستند.

بالنسبة لمجموعة AKS أو مجموعة Kubernetes الممكنة في Azure Arc:

  • تحقق مما إذا كان خادم Kubernetes API يمكن الوصول إليه عن طريق تشغيل kubectl الأمر في نظام المجموعة.

خطأ: ClusterNotReachable

رسالة الخطأ هي كما يلي:

The Kubernetes cluster is not reachable. 

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

بالنسبة لمجموعات AKS:

  • تحقق مما إذا كان نظام مجموعة AKS متوقفا عن التشغيل.
    • إذا لم يكن نظام المجموعة قيد التشغيل، فستحتاج إلى بدء تشغيل نظام المجموعة أولا.

بالنسبة لمجموعة AKS أو مجموعة Kubernetes الممكنة في Azure Arc:

  • تحقق مما إذا كان خادم Kubernetes API يمكن الوصول إليه عن طريق تشغيل kubectl الأمر في نظام المجموعة.

خطأ: ClusterNotFound

رسالة الخطأ هي كما يلي:

Cannot found Kubernetes cluster. 

يجب أن يحدث هذا الخطأ عندما يتعذر على النظام العثور على نظام مجموعة AKS/Arc-Kubernetes.

يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

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

خطأ: ClusterServiceNotFound

رسالة الخطأ هي كما يلي:

AzureML extension service not found in cluster.

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

يمكنك:

  • الوصول إلى نظام المجموعة والتحقق من حالة الخدمة azureml-ingress-nginx-controller والجراب الخلفي الخاص بها ضمن azureml مساحة الاسم.
  • إذا لم يكن للمجموعة أي جرابات خلفية قيد التشغيل، فتحقق من السبب عن طريق وصف الجراب. على سبيل المثال، إذا لم يكن لدى الجراب موارد كافية للتشغيل، يمكنك حذف بعض الحجيرات لتحرير موارد كافية لجراب الدخول.

خطأ: ClusterUnauthorized

رسالة الخطأ هي كما يلي:

Request to Kubernetes cluster unauthorized.

يجب أن يحدث هذا الخطأ فقط في نظام المجموعة الذي يدعم TA، مما يعني انتهاء صلاحية الرمز المميز للوصول أثناء النشر.

يمكنك المحاولة مرة أخرى بعد عدة دقائق.

تلميح

مزيد من دليل استكشاف الأخطاء الشائعة وإصلاحها عند إنشاء/تحديث نقاط النهاية والنشرات في Kubernetes عبر الإنترنت، يمكنك العثور على كيفية استكشاف أخطاء نقاط النهاية عبر الإنترنت وإصلاحها.

خطأ في الهوية

خطأ: RefreshExtensionIdentityNotSet

يحدث هذا الخطأ عند تثبيت الملحق ولكن لم يتم تعيين هوية الملحق بشكل صحيح. يمكنك محاولة إعادة تثبيت الملحق لإصلاحه.

يرجى ملاحظة أن هذا الخطأ مخصص فقط للمجموعات المدارة

كيفية التحقق من sslCertPemFile وsslKeyPemFile صحيح؟

للسماح بسطح أي أخطاء معروفة، يمكنك استخدام الأوامر لتشغيل فحص أساسي للرتيب والمفتاح. توقع الأمر الثاني لإرجاع "مفتاح RSA ok" دون مطالبتك بكلمة مرور.

openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check

قم بتشغيل الأوامر للتحقق مما إذا كانت sslCertPemFile وsslKeyPemFile متطابقتين:

openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum

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

  • شهادة الخادم: يقدم الخادم للعميل أثناء تأكيد اتصال TLS. يحتوي على المفتاح العام للخادم واسم المجال ومعلومات أخرى. يتم توقيع شهادة الخادم من قبل مرجع مصدق وسيط (CA) يضمن هوية الخادم.
  • شهادة المرجع المصدق الوسيط: يقدم المرجع المصدق الوسيط للعميل لإثبات سلطته لتوقيع شهادة الخادم. يحتوي على المفتاح العام للمرجع المصدق الوسيط والاسم والمعلومات الأخرى. يتم توقيع شهادة المرجع المصدق المتوسطة من قبل المرجع المصدق الجذر الذي يضمن هوية المرجع المصدق الوسيط.
  • شهادة المرجع المصدق الجذر: يقدم المرجع المصدق الجذر للعميل لإثبات سلطته لتوقيع شهادة المرجع المصدق الوسيطة. يحتوي على المفتاح العام للمرجع المصدق الجذري والاسم والمعلومات الأخرى. شهادة المرجع المصدق الجذر موقعة ذاتيا وموثوق بها من قبل العميل.

دليل التدريب

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

تصحيح أخطاء إعادة محاولة المهمة

إذا تم إنهاء جراب مهمة التدريب الذي يعمل في نظام المجموعة بسبب تشغيل العقدة إلى OOM العقدة (نفاد الذاكرة)، تتم إعادة محاولة المهمة تلقائيا إلى عقدة أخرى متوفرة.

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

  • يتم تسجيل كل سجل إعادة محاولة في مجلد سجل جديد بتنسيق "retry-retry< number>" (مثل: retry-001).

ثم يمكنك الحصول على معلومات تعيين عقدة مهمة إعادة المحاولة، لمعرفة العقدة التي تم تشغيل مهمة إعادة المحاولة عليها.

لقطة شاشة لإضافة ملحق جديد إلى مجموعة Kubernetes الممكنة في Azure Arc من مدخل Microsoft Azure.

يمكنك الحصول على معلومات تعيين عقدة الوظيفة من amlarc_cr_bootstrap.log ضمن مجلد system_logs.

يشار إلى اسم مضيف العقدة، الذي يتم تشغيل جراب الوظيفة عليه في هذا السجل، على سبيل المثال:

++ echo 'Run on node: ask-agentpool-17631869-vmss0000"

يمثل "ask-agentpool-17631869-vmss0000" اسم مضيف العقدة الذي يقوم بتشغيل هذه المهمة في نظام مجموعة AKS. ثم يمكنك الوصول إلى نظام المجموعة للتحقق من حالة العقدة لمزيد من التحقيق.

تتعثر جراب الوظيفة في حالة Init

إذا كانت المهمة تعمل لفترة أطول مما كنت تتوقع، وإذا وجدت أن pods الخاصة بالوظيفة تتعثر في حالة Init مع هذا التحذيرUnable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matched، فقد تحدث المشكلة لأن ملحق Azure التعلم الآلي لا يدعم وضع التنزيل لبيانات الإدخال.

لحل هذه المشكلة، قم بالتغيير إلى وضع التحميل لبيانات الإدخال.

أخطاء فشل الوظيفة الشائعة

فيما يلي قائمة بأنواع الأخطاء الشائعة التي قد تواجهها عند استخدام حساب Kubernetes لإنشاء مهمة تدريبية وتنفيذها، والتي يمكنك مواجهتها عن طريق اتباع الإرشادات:

فشلت المهمة. 137

إذا كانت رسالة الخطأ هي:

Azure Machine Learning Kubernetes job failed. 137:PodPattern matched: {"containers":[{"name":"training-identity-sidecar","message":"Updating certificates in /etc/ssl/certs...\n1 added, 0 removed; done.\nRunning hooks in /etc/ca-certificates/update.d...\ndone.\n * Serving Flask app 'msi-endpoint-server' (lazy loading)\n * Environment: production\n   WARNING: This is a development server. Do not use it in a production deployment.\n   Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:12342/ (Press CTRL+C to quit)\n","code":137}]}

تحقق من إعداد الوكيل وتحقق مما إذا كان قد تمت إضافة 127.0.0.1 إلى نطاق تخطي الوكيل عند استخدام az connectedk8s connect باتباع تكوين الشبكة هذا.

فشلت المهمة. E45004

إذا كانت رسالة الخطأ هي:

Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."

تحقق مما إذا كنت قد enableTraining=True عينت عند إجراء تثبيت ملحق Azure التعلم الآلي. يمكن العثور على مزيد من التفاصيل في نشر ملحق Azure التعلم الآلي على نظام مجموعة AKS أو Arc Kubernetes

فشلت المهمة. 400

إذا كانت رسالة الخطأ هي:

Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}

يمكنك اتباع قسم استكشاف الأخطاء وإصلاحها في Private Link للتحقق من إعدادات الشبكة.

إعطاء إما مفتاح حساب أو رمز SAS المميز

إذا كنت بحاجة إلى الوصول إلى Azure Container Registry (ACR) لصورة Docker، وللوصول إلى حساب التخزين لبيانات التدريب، يجب أن تحدث هذه المشكلة عندما لا يتم تحديد الحساب بهوية مدارة.

للوصول إلى Azure Container Registry (ACR) من مجموعة حساب Kubernetes لصور Docker، أو الوصول إلى حساب تخزين لبيانات التدريب، تحتاج إلى إرفاق حساب Kubernetes مع تمكين هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم.

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

Unable to mount data store workspaceblobstore. Give either an account key or SAS token

السبب هو حساب التخزين الافتراضي لمساحة عمل التعلم الآلي دون أي بيانات اعتماد لا يمكن الوصول إليها لوظائف التدريب في حساب Kubernetes.

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

فشل تخويل AzureBlob

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

Unable to upload project files to working directory in AzureBlob because the authorization failed. 

السبب هو فشل التخويل عندما تحاول المهمة تحميل ملفات المشروع إلى AzureBlob. يمكنك التحقق من العناصر التالية لاستكشاف المشكلة وإصلاحها:

  • تأكد من تمكين حساب التخزين استثناءات "السماح لخدمات Azure في قائمة الخدمة الموثوق بها بالوصول إلى حساب التخزين هذا" ومساحة العمل في قائمة مثيلات الموارد.
  • تأكد من أن مساحة العمل لديها هوية مدارة معينة من قبل النظام.

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

  • ابحث عن معرف مساحة العمل في مدخل Microsoft Azure أو احصل على هذا المعرف عن طريق التشغيل az ml workspace show في سطر الأوامر.

  • إظهار جميع azureml-fe pods التي يتم تشغيلها بواسطة kubectl get po -n azureml -l azuremlappname=azureml-fe.

  • قم بتسجيل الدخول إلى أي منها تشغيل kubectl exec -it -n azureml {scorin_fe_pod_name} bash.

  • إذا لم يستخدم نظام المجموعة تشغيل nslookup {workspace_id}.workspace.{region}.api.azureml.msالوكيل . إذا قمت بإعداد ارتباط خاص من VNet إلى مساحة العمل بشكل صحيح، فيجب الرد على IP الداخلي في VNet من خلال أداة DNSLookup .

  • إذا كان نظام المجموعة يستخدم الوكيل، يمكنك محاولة مساحة curl العمل

curl https://{workspace_id}.workspace.westcentralus.api.azureml.ms/metric/v2.0/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{workspace_name}/api/2.0/prometheus/post -X POST -x {proxy_address} -d {} -v -k

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

المشكلات المعروفة الأخرى

لا يسري تحديث حساب Kubernetes

في هذا الوقت، لا يسمح CLI v2 وSDK v2 بتحديث أي تكوين لحساب Kubernetes موجود. على سبيل المثال، لا يسري تغيير مساحة الاسم.

مساحة العمل أو اسم مجموعة الموارد ينتهي ب '-'

أحد الأسباب الشائعة لفشل "InternalServerError" عند إنشاء أحمال العمل مثل عمليات التوزيع أو نقاط النهاية أو المهام في حساب Kubernetes هو وجود أحرف خاصة مثل '-' في نهاية مساحة العمل أو اسم مجموعة الموارد.

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