PDB و Graceful Shutdown
الهدف من الدرس
Section titled “الهدف من الدرس”ستتعلم كيف يستخدم Kubernetes terminationGracePeriodSeconds و preStop و PodDisruptionBudget لحماية الخدمة أثناء الصيانة.
الفكرة ببساطة
Section titled “الفكرة ببساطة”Graceful shutdown يعني أن التطبيق يأخذ وقتا ليوقف استقبال requests وينهي العمل الحالي قبل أن يموت. PDB يحدد كم Pod يمكن أن يكون unavailable أثناء disruptions الطوعية مثل drain.
YAML كامل
Section titled “YAML كامل”graceful.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: graceful-webspec: replicas: 3 selector: matchLabels: app: graceful-web template: metadata: labels: app: graceful-web spec: terminationGracePeriodSeconds: 30 containers: - name: web image: nginx:1.27 ports: - name: http containerPort: 80 lifecycle: preStop: exec: command: ["sh", "-c", "sleep 10"] readinessProbe: httpGet: path: / port: http resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi"---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: graceful-webspec: minAvailable: 2 selector: matchLabels: app: graceful-webأوامر الفحص
Section titled “أوامر الفحص”kubectl apply -f graceful.yamlkubectl get pdbkubectl describe pdb graceful-webkubectl get pods -l app=graceful-webExpected output:
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONSgraceful-web 2 N/A 1متى أستخدم PDB؟
Section titled “متى أستخدم PDB؟”| الحالة | القرار |
|---|---|
| تطبيق له 2+ replicas | استخدم PDB |
| replica واحد فقط | PDB لن يصنع availability وحده |
| database StatefulSet | استخدم PDB بحذر وافهم quorum |
| batch job | غالبا لا تحتاج PDB |
Lab: تطبيق PDB لتطبيق بثلاث نسخ
الهدف: إنشاء Deployment و PDB وفهم allowed disruptions.
Prerequisites
Section titled “Prerequisites”- Cluster محلي.
kubectl apply -f graceful.yamlkubectl wait --for=condition=Available deployment/graceful-web --timeout=90skubectl get pdb graceful-webkubectl describe pdb graceful-webExpected output
Section titled “Expected output”Allowed disruptions: 1Current healthy: 3Desired healthy: 2Cleanup
Section titled “Cleanup”kubectl delete -f graceful.yamlأخطاء شائعة
Section titled “أخطاء شائعة”| الخطأ | النتيجة |
|---|---|
minAvailable: 100% مع عدد قليل | drain قد يتعطل |
| لا توجد readinessProbe | PDB لا يعكس الجاهزية بدقة |
| termination grace قصير جدا | requests تنقطع أثناء الإغلاق |