الفصل 3.6 - عمليات النشر
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم دور عمليات النشر
- إنشاء وإدارة عمليات النشر
- تنفيذ التحديثات المتدحرجة
- إدارة التراجعات
- توسيع عمليات النشر
ما هي عملية النشر؟
تدير عملية النشر مجموعات النسخ المتماثلة وتوفر ميزات التحديث التصريحي، والتراجع، والتوسيع.
المزايا:
- إدارة الإصدارات
- تحديثات متدحرجة
- تراجعات تلقائية
- توسيع سهل
إعلان YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
التحديثات المتدحرجة
العملية
الاستراتيجيات
RollingUpdate (الافتراضية):
- استبدال البودات تدريجيًا
- لا يوجد انقطاع في الخدمة
- قابلة للتكوين (maxSurge، maxUnavailable)
Recreate:
- حذف جميع البودات القديمة
- إنشاء البودات الجديدة
- انقطاع في الخدمة
تحديث عملية النشر
الطريقة 1: تعديل الصورة
# تحديث الصورة
kubectl set image deployment/web-deployment nginx=nginx:1.21
# عرض حالة التحديث
kubectl rollout status deployment/web-deployment
الطريقة 2: تحرير YAML
# تحرير عملية النشر
kubectl edit deployment web-deployment
# أو تعديل الملف وتطبيقه
kubectl apply -f deployment.yaml
الطريقة 3: التصحيح
# تعديل جزء محدد
kubectl patch deployment web-deployment -p '{"spec":{"replicas":5}}'
التراجع
عرض التاريخ
# عرض تاريخ التوزيعات
kubectl rollout history deployment/web-deployment
# تفاصيل مراجعة معينة
kubectl rollout history deployment/web-deployment --revision=2
تنفيذ التراجع
# التراجع إلى الإصدار السابق
kubectl rollout undo deployment/web-deployment
# التراجع إلى مراجعة معينة
kubectl rollout undo deployment/web-deployment --to-revision=2
التوسيع
التوسيع اليدوي
# زيادة عدد النسخ المتماثلة
kubectl scale deployment web-deployment --replicas=5
# أو التحرير
kubectl edit deployment web-deployment
التوسيع التلقائي (HPA)
# إنشاء موازن أفقى للبودات
kubectl autoscale deployment web-deployment --min=2 --max=10 --cpu-percent=80
الأوامر المفيدة
# عرض عمليات النشر
kubectl get deployments
# تفاصيل عملية نشر
kubectl describe deployment web-deployment
# عرض مجموعات النسخ المتماثلة التي تم إنشاؤها
kubectl get replicasets
# إيقاف/استئناف توزيع
kubectl rollout pause deployment/web-deployment
kubectl rollout resume deployment/web-deployment
الملخص
في هذا الفصل، تعلمت:
عملية النشر: إدارة مجموعات النسخ المتماثلة بميزات متقدمة
التحديثات المتدحرجة: تحديثات بدون انقطاع
التراجع: العودة إلى إصدار سابق
التوسيع: يدوي أو تلقائي (HPA)
الإدارة: kubectl set image، rollout، scale
الخطوات التالية
الآن بعد أن أتقنت عمليات النشر:
الفصل 3.7: استراتيجيات النشر
الفصل 3.8: فحوصات الصحة
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة مع عمليات النشر
المشكلة 1: عملية النشر لا تنشئ بودات
الأعراض:
kubectl get deployment
# NAME READY UP-TO-DATE AVAILABLE
# my-app 0/3 0 0
الحلول:
-
التحقق من الأحداث:
kubectl describe deployment my-app
kubectl get events --sort-by='.lastTimestamp' -
التحقق من مجموعات النسخ المتماثلة:
kubectl get replicasets
kubectl describe replicaset <rs-name> -
التحقق من حصص الموارد:
kubectl describe quota
المشكلة 2: التحديث المتدحرج متوقف
الأعراض:
- يبقى التوزيع في "التحديث"
- البودات الجديدة لا تبدأ
الحلول:
-
التحقق من الأحداث:
kubectl describe deployment my-app -
التحقق من الموارد المتاحة:
kubectl top nodes
kubectl describe nodes -
التحقق من فحوصات الصحة:
- يمكن أن تمنع الفحوصات (liveness/readiness) التوزيع
- تحقق من سجلات البودات
-
إجبار التراجع إذا لزم الأمر:
kubectl rollout undo deployment/my-app
المشكلة 3: البودات في CrashLoopBackOff
الأعراض:
kubectl get pods
# NAME READY STATUS RESTARTS
# my-app-xxx-123 0/1 CrashLoopBackOff 5
الحلول:
-
التحقق من السجلات:
kubectl logs <pod-name>
kubectl logs <pod-name> --previous -
التحقق من التكوين:
kubectl describe pod <pod-name> -
التحقق من الموارد:
- حدود CPU/Memory منخفضة جدًا
- وحدات تخزين مفقودة
- أسرار/ConfigMaps غير صحيحة
المشكلة 4: التوسيع لا يعمل
الأعراض:
kubectl scale deployment my-app --replicas=5
# لكن لا يزال 3 بودات
الحلول:
-
التحقق من الحصص:
kubectl describe quota -
التحقق من موارد العقد:
kubectl describe nodes -
التحقق من القيود:
kubectl get deployment my-app -o yaml
# تحقق من nodeSelectors، affinity، إلخ.
التنقل
الفصل السابق: الفصل 3.5 - مجموعات النسخ المتماثلة
الفصل التالي: الفصل 3.7 - استراتيجيات النشر
العودة إلى الوحدة: الوحدة 3 - البودات وعمليات النشر
تم إنشاء الفصل في: ديسمبر 2024