فحوصات السلامة في Azure Container Apps
تسمح تحقيقات صحة Azure Container Apps بوقت تشغيل Container Apps بفحص حالة تطبيقات الحاوية بانتظام.
يمكنك إعداد الفحوصات باستخدام إمّا TCP وإمّا HTTP(S) حصرياً.
تدعم تطبيقات الحاوية الفحوصات التالية:
تحقق | الوصف |
---|---|
البدء | التحقق من أن التطبيق الخاص بك قد بدأ بنجاح. هذا الفحص منفصل عن فحص الحياة ويتم تنفيذه أثناء مرحلة بدء التشغيل الأولية للتطبيق الخاص بك. |
الحياة | التحقق من أن التطبيق الخاص بك لا يزال قيد التشغيل والاستجابة. |
الجهوزية | يتحقق لمعرفة ما إذا كانت النسخة المتماثلة جاهزة لمعالجة الطلبات الواردة. |
للحصول على قائمة كاملة بمواصفات الفحص المدعومة في Azure Container Apps، راجع مواصفات Azure REST API.
فحوصات HTTP
تسمح لك فحوصات HTTP بتنفيذ منطق مخصص للتحقُّق من حالة تبعيات التطبيق قبل الإبلاغ عن حالة صحية.
كوِّن نقاط نهاية فحص السلامة للاستجابة بتعليمة برمجية لحالة HTTP أكبر من 200
أو مساوٍ له وأقل من 400
للإشارة إلى النجاح. تشير أي تعليمة برمجية أخرى للاستجابة خارج هذا النطاق إلى فشل العملية.
يوضح المثال التالي كيفية تنفيذ نقطة نهاية السلامة في JavaScript.
const express = require('express');
const app = express();
app.get('/liveness', (req, res) => {
let isSystemStable = false;
// check for database availability
// check filesystem structure
// etc.
// set isSystemStable to true if all checks pass
if (isSystemStable) {
res.status(200); // Success
} else {
res.status(503); // Service unavailable
}
})
فحوصات TCP
تنتظر تحقيقات TCP لإنشاء اتصال بالخادم للإشارة إلى النجاح. يفشل التحقيق إذا لم يتمكن من إنشاء اتصال بتطبيقك.
القيود
- يمكنك فقط إضافة نوع واحد من كل نوع فحص لكل حاوية.
- فحوصات
exec
غير مدعومة. - يجب أن تكون قيم المنفذ أعداداً صحيحة؛ المنافذ المسماة غير مدعومة.
- gRPC غير مدعوم.
الأمثلة
توضح قائمة التعليمات البرمجية التالية كيفية تحديد فحوصات السلامة لحاوياتك.
تشير العناصر النائبة ...
إلى التعليمات البرمجية المحذوفة. راجع مواصفات واجهة برمجة تطبيقات قالب ARM لـ Container Apps للحصول على تفاصيل كاملة عن قالب ARM.
{
...
"containers":[
{
"image":"nginx",
"name":"web",
"probes": [
{
"type": "liveness",
"httpGet": {
"path": "/health",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "liveness probe"
}]
},
"initialDelaySeconds": 7,
"periodSeconds": 3
},
{
"type": "readiness",
"tcpSocket": {
"port": 8081
},
"initialDelaySeconds": 10,
"periodSeconds": 3
},
{
"type": "startup",
"httpGet": {
"path": "/startup",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "startup probe"
}]
},
"initialDelaySeconds": 3,
"periodSeconds": 3
}]
}]
...
}
يحدد الإعداد الاختياري failureThreshold
عدد محاولات Container Apps لتنفيذ الفحص إذا فشل التنفيذ. تتسبب المحاولات التي تتجاوز المبلغ في failureThreshold
نتائج مختلفة لكل نوع مسبار.
التكوين الافتراضي
إذا تم تمكين الدخول، تتم إضافة الفحوصات الافتراضية التالية تلقائيا إلى حاوية التطبيق الرئيسية إذا لم يتم تعريف أي منها لكل نوع.
نوع الفحص | القيم الافتراضية |
---|---|
البدء | Protocol: TCP المنفذ: منفذ هدف الدخول المهلة: 3 ثوان الفترة الزمنية: ثانية التأخير الأولي: ثانية 1 حد النجاح: 1 عتبة الفشل: 240 |
الحياة | Protocol: TCP المنفذ: منفذ هدف الدخول |
الجهوزية | Protocol: TCP المنفذ: منفذ هدف الدخول المهلة: 5 ثوان الفترة الزمنية: 5 ثوان التأخير الأولي: 3 ثوان حد النجاح: 1 عتبة الفشل: 48 |
إذا كنت تقوم بتشغيل تطبيق الحاوية في وضع مراجعة متعددة، بعد نشر مراجعة، فانتظر حتى تشير تحقيقات الجاهزية إلى النجاح قبل تحويل حركة المرور إلى تلك المراجعة. في وضع المراجعة الفردي، يتم نقل نسبة استخدام الشبكة تلقائيا بمجرد أن يرجع فحص الجاهزية حالة ناجحة.
تظهر حالة المراجعة على أنها غير صحية إذا فشلت أي من النسخ المتماثلة الخاصة بها في التحقق من فحص الجاهزية الخاص بها، حتى إذا كانت جميع النسخ المتماثلة الأخرى في المراجعة سليمة. تعيد تطبيقات الحاوية تشغيل النسخة المتماثلة المعنية حتى تصبح سليمة مرة أخرى أو يتم تجاوز حد الفشل. إذا تم تجاوز حد الفشل، فحاول إعادة تشغيل المراجعة، ولكن قد يعني ذلك أن المراجعة لم يتم تكوينها بشكل صحيح.
إذا كان تطبيقك يستغرق وقتا طويلا لبدء التشغيل (وهو أمر شائع في Java)، فغالبا ما تحتاج إلى تخصيص الفحوصات حتى لا تتعطل الحاوية.
يوضح المثال التالي كيفية تكوين فحوصات السلامة والجاهزية لتمديد وقت بدء التشغيل.
"probes": [
{
"type": "liveness",
"failureThreshold": 3,
"periodSeconds": 10,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 1
},
{
"type": "readiness",
"failureThreshold": 48,
"initialDelaySeconds": 3,
"periodSeconds": 5,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 5
}]