انتقل إلى المحتوى الرئيسي

الفصل 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

الحلول:

  1. التحقق من الأحداث:

    kubectl describe deployment my-app
    kubectl get events --sort-by='.lastTimestamp'
  2. التحقق من مجموعات النسخ المتماثلة:

    kubectl get replicasets
    kubectl describe replicaset <rs-name>
  3. التحقق من حصص الموارد:

    kubectl describe quota

المشكلة 2: التحديث المتدحرج متوقف​

الأعراض:

  • يبقى التوزيع في "التحديث"
  • البودات الجديدة لا تبدأ

الحلول:

  1. التحقق من الأحداث:

    kubectl describe deployment my-app
  2. التحقق من الموارد المتاحة:

    kubectl top nodes
    kubectl describe nodes
  3. التحقق من فحوصات الصحة:

    • يمكن أن تمنع الفحوصات (liveness/readiness) التوزيع
    • تحقق من سجلات البودات
  4. إجبار التراجع إذا لزم الأمر:

    kubectl rollout undo deployment/my-app

المشكلة 3: البودات في CrashLoopBackOff​

الأعراض:

kubectl get pods
# NAME READY STATUS RESTARTS
# my-app-xxx-123 0/1 CrashLoopBackOff 5

الحلول:

  1. التحقق من السجلات:

    kubectl logs <pod-name>
    kubectl logs <pod-name> --previous
  2. التحقق من التكوين:

    kubectl describe pod <pod-name>
  3. التحقق من الموارد:

    • حدود CPU/Memory منخفضة جدًا
    • وحدات تخزين مفقودة
    • أسرار/ConfigMaps غير صحيحة

المشكلة 4: التوسيع لا يعمل​

الأعراض:

kubectl scale deployment my-app --replicas=5
# لكن لا يزال 3 بودات

الحلول:

  1. التحقق من الحصص:

    kubectl describe quota
  2. التحقق من موارد العقد:

    kubectl describe nodes
  3. التحقق من القيود:

    kubectl get deployment my-app -o yaml
    # تحقق من nodeSelectors، affinity، إلخ.

التنقل​

الفصل السابق: الفصل 3.5 - مجموعات النسخ المتماثلة
الفصل التالي: الفصل 3.7 - استراتيجيات النشر
العودة إلى الوحدة: الوحدة 3 - البودات وعمليات النشر


تم إنشاء الفصل في: ديسمبر 2024