عمليات Production
الهدف من الدرس
Section titled “الهدف من الدرس”ستتعلم كيف تفكر كمهندس يشغل Kubernetes في Production: ما الذي تراجعه قبل release؟ ماذا تفعل أثناء incident؟ وكيف توثق rollback و runbooks؟
الفكرة ببساطة
Section titled “الفكرة ببساطة”Production ليس “التطبيق يعمل الآن”. Production يعني أن لديك طريقة لتحديثه، مراقبته، تأمينه، استرجاعه، وتفسير قرارات الموارد والصلاحيات.
دورة التشغيل
Section titled “دورة التشغيل”flowchart LR Plan[Plan] --> Deploy[Deploy] Deploy --> Observe[Observe] Observe --> Respond[Respond] Respond --> Learn[Postmortem] Learn --> PlanRelease checklist
Section titled “Release checklist”| المحور | سؤال قبل الإطلاق |
|---|---|
| Rollout | هل لدينا readinessProbe و rollback واضح؟ |
| Resources | هل requests/limits مبنية على قياسات؟ |
| Security | هل RBAC و secrets و image source مقبولة؟ |
| Networking | هل Ingress/TLS/NetworkPolicy مختبرة؟ |
| Data | هل backup و restore مجربان؟ |
| Observability | هل لدينا metrics و logs و alerts؟ |
Runbook مختصر
Section titled “Runbook مختصر”runbook.md لأي خدمة يجب أن يحتوي:
# Service: web-api
## What it doesAPI for user-facing web requests.
## Dashboards- Latency- Error rate- CPU and memory
## Common commandskubectl -n prod get deploy web-apikubectl -n prod rollout status deploy/web-apikubectl -n prod logs deploy/web-api --tail=100
## Rollbackkubectl -n prod rollout undo deploy/web-api
## Dependencies- PostgreSQL- Redis- External payment APIأوامر تشغيل يومية
Section titled “أوامر تشغيل يومية”kubectl -n prod get deploy,po,svc,ingresskubectl -n prod rollout status deploy/web-apikubectl -n prod top podskubectl -n prod logs deploy/web-api --tail=100kubectl -n prod describe deploy web-apikubectl -n prod get events --sort-by=.metadata.creationTimestampقرار rollback
Section titled “قرار rollback”ارجع الإصدار بسرعة إذا تحقق أحد هذه الشروط:
| الشرط | مثال |
|---|---|
| error rate مرتفع بعد release | 5xx زادت بعد deployment |
| latency تضاعفت | p95 أصبح أكبر من SLO |
| Pods الجديدة غير ready | rollout عالق |
| data migration فشل | أخطاء في logs أو health check |
kubectl -n prod rollout undo deployment/web-apikubectl -n prod rollout status deployment/web-apiIncident response بسيط
Section titled “Incident response بسيط”flowchart TD A[Alert] --> B[تأكيد التأثير] B --> C[تحديد آخر تغيير] C --> D{هل rollback آمن؟} D -->|نعم| E[Rollback] D -->|لا| F[Mitigation] E --> G[Verify] F --> G G --> H[Postmortem]أخطاء شائعة
Section titled “أخطاء شائعة”| الخطأ | النتيجة | الحل |
|---|---|---|
| لا توجد readinessProbe | traffic يصل قبل جاهزية التطبيق | أضف readiness حقيقي |
| لا توجد limits/requests | scheduling سيء وطرد غير متوقع | أضف resources مبنية على metrics |
| rollback غير مجرب | تأخير أثناء incident | جرب rollback في staging |
| backup بلا restore test | ثقة كاذبة | نفذ restore دوري |
| صلاحيات واسعة | خطر أمني كبير | least privilege و مراجعات RBAC |
Lab: Runbook و rollback لتطبيق web
الهدف: إنشاء runbook قصير، تنفيذ rollout، ثم rollback موثق.
Prerequisites
Section titled “Prerequisites”- Deployment باسم
webمن دروس الأساسيات.
- سجل الحالة الحالية:
kubectl get deployment webkubectl rollout history deployment/web- نفذ تحديث:
kubectl set image deployment/web nginx=nginx:1.28kubectl rollout status deployment/web- اجمع أدلة التشغيل:
kubectl get pods -l app=webkubectl logs deployment/web --tail=20kubectl describe deployment web- نفذ rollback:
kubectl rollout undo deployment/webkubectl rollout status deployment/web- اكتب في runbook: الأمر، expected output، ومتى تستخدمه.
Expected output
Section titled “Expected output”deployment "web" successfully rolled outdeployment.apps/web rolled backdeployment "web" successfully rolled outCleanup
Section titled “Cleanup”لا تحذف Deployment لو ستستخدمه في الدروس التالية. إن أردت التنظيف:
kubectl delete deployment webالربط بالمشروع النهائي
Section titled “الربط بالمشروع النهائي”Capstone لن يكتمل بمجرد تشغيل YAML. يجب أن تقدم runbook، checklist، rollback workflow، monitoring plan، وشرح قرارات resources وsecurity.