آموزش کوبرنتیز؛ شب اول: معماری کلاستر¶
در شب اول میخواهیم بفهمیم یک درخواست چگونه از kubectl عبور میکند و در نهایت به کانتینری در حال اجرا تبدیل میشود:
kubectl → API Server → etcd
→ Scheduler → Node
→ Controller Manager
→ kubelet → containerd → container
اجزای اصلی¶
| جزء | مسئولیت |
|---|---|
| API Server | اعتبارسنجی درخواستها و ارائهٔ API کوبرنتیز |
| etcd | نگهداری وضعیت مطلوب و وضعیت مشاهدهشدهٔ کلاستر |
| Scheduler | اختصاص Podهای زمانبندینشده به Nodeها |
| Controller Manager | نزدیککردن پیوستهٔ وضعیت واقعی به وضعیت مطلوب |
| kubelet | اطمینان از اجرای Podهای تخصیصیافته روی Node خود |
| Container Runtime | دریافت Image و راهاندازی Containerها |
کوبرنتیز یک سیستم «تطبیق وضعیت» یا Reconciliation است. شما وضعیت مطلوب را اعلام میکنید؛ کنترلرها دائماً آن را با وضعیت واقعی مقایسه میکنند و اختلاف را از بین میبرند.
آزمایش: مشاهدهٔ Control Plane و Node¶
ابتدا وضعیت کلاستر، Nodeها، سلامت API و Podهای همهٔ Namespaceها را ببینید:
kubectl cluster-info
kubectl get nodes -o wide
kubectl get --raw='/readyz?verbose'
kubectl get pods -A -o wide
kubectl describe node playground-mj
اگر نام Node شما playground-mj نیست، نام درست را از خروجی دستور دوم بردارید.
یک Namespace جدا و Deployment دونمونهای بسازید:
kubectl create namespace course-night-1
kubectl create deployment architecture-demo \
--namespace course-night-1 \
--image=nginx:alpine \
--replicas=2
kubectl get deployment,replicaset,pod \
--namespace course-night-1 \
--watch
با Ctrl+C مشاهدهٔ زنده را متوقف کنید. سپس زنجیرهٔ مالکیت را دنبال کنید:
kubectl get deployment architecture-demo \
--namespace course-night-1 \
-o yaml
kubectl get replicasets \
--namespace course-night-1 \
-o custom-columns='NAME:.metadata.name,OWNER:.metadata.ownerReferences[0].name,DESIRED:.spec.replicas'
kubectl get pods \
--namespace course-night-1 \
-o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName,OWNER:.metadata.ownerReferences[0].name,STATUS:.status.phase'
در خروجی باید مسیر Deployment → ReplicaSet → Pod → Node را ببینید.
تمرین Reconciliation¶
نام یکی از Podها را پیدا و آن را حذف کنید:
kubectl get pods --namespace course-night-1
kubectl delete pod <pod-name> --namespace course-night-1
kubectl get pods --namespace course-night-1 --watch
کنترلر Deployment بهدلیل تفاوت وضعیت واقعی با دو Replica مطلوب، Pod تازهای میسازد. پس از مشاهدهٔ Pod جایگزین، با Ctrl+C خارج شوید.
چکلیست پایان¶
- نقش هر شش جزء جدول را میتوانم توضیح دهم.
- زنجیرهٔ Deployment تا Node را دنبال کردهام.
- یک Pod را حذف و ساختهشدن خودکار جایگزین را دیدهام.
- نام Pod و Node مشاهدهشده را ثبت کردهام.
در پایان منابع تمرین را پاک کنید: