تخطَّ إلى المحتوى

PDB و Graceful Shutdown

ستتعلم كيف يستخدم Kubernetes terminationGracePeriodSeconds و preStop و PodDisruptionBudget لحماية الخدمة أثناء الصيانة.

Graceful shutdown يعني أن التطبيق يأخذ وقتا ليوقف استقبال requests وينهي العمل الحالي قبل أن يموت. PDB يحدد كم Pod يمكن أن يكون unavailable أثناء disruptions الطوعية مثل drain.

graceful.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: graceful-web
spec:
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/v1
kind: PodDisruptionBudget
metadata:
name: graceful-web
spec:
minAvailable: 2
selector:
matchLabels:
app: graceful-web
Terminal window
kubectl apply -f graceful.yaml
kubectl get pdb
kubectl describe pdb graceful-web
kubectl get pods -l app=graceful-web

Expected output:

NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS
graceful-web 2 N/A 1
الحالةالقرار
تطبيق له 2+ replicasاستخدم PDB
replica واحد فقطPDB لن يصنع availability وحده
database StatefulSetاستخدم PDB بحذر وافهم quorum
batch jobغالبا لا تحتاج PDB

Lab: تطبيق PDB لتطبيق بثلاث نسخ

المستوى: مبتدئ الوقت: 30 دقيقة الأدوات: kubectl

الهدف: إنشاء Deployment و PDB وفهم allowed disruptions.

  • Cluster محلي.
Terminal window
kubectl apply -f graceful.yaml
kubectl wait --for=condition=Available deployment/graceful-web --timeout=90s
kubectl get pdb graceful-web
kubectl describe pdb graceful-web
Allowed disruptions: 1
Current healthy: 3
Desired healthy: 2
Terminal window
kubectl delete -f graceful.yaml
الخطأالنتيجة
minAvailable: 100% مع عدد قليلdrain قد يتعطل
لا توجد readinessProbePDB لا يعكس الجاهزية بدقة
termination grace قصير جداrequests تنقطع أثناء الإغلاق