دواپس · ۱۶ آبان ۱۴۰۵ · ۳ دقیقه
کوبرنتیز (Kubernetes) چیست؟ آموزش مفاهیم پایه از صفر
کوبرنتیز استاندارد اجرای کانتینرها در مقیاس بزرگ است. در این مقاله میبینید چرا به آن نیاز داریم، اجزای اصلیاش (Pod، Deployment، Service و…) چه میکنند و چطور اولین برنامه را روی یک کلاستر محلی اجرا کنید.
📺 ویدیوی کامل این آموزش: تماشا در یوتیوب · کانال آپارات
Docker به ما یاد داد برنامه را داخل کانتینر بستهبندی کنیم تا همهجا یکسان اجرا شود. اما وقتی دهها یا صدها کانتینر روی چند سرور دارید، سؤالهای تازهای پیش میآید: اگر یک کانتینر از کار افتاد چه کسی دوباره روشنش کند؟ ترافیک بین نسخهها چطور تقسیم شود؟ بهروزرسانی بدون قطعی چطور انجام شود؟ Kubernetes (به اختصار K8s) دقیقاً برای همین ساخته شده است.
کوبرنتیز چه کاری انجام میدهد؟
- اجرای خودکار و ترمیم: اگر کانتینری خراب شود، کوبرنتیز آن را دوباره اجرا میکند.
- مقیاسپذیری: تعداد نسخههای برنامه را با یک دستور یا بهصورت خودکار بر اساس بار کم و زیاد میکند.
- Load Balancing و کشف سرویس: ترافیک را بین نسخهها تقسیم میکند و هر سرویس یک نام ثابت دارد.
- بهروزرسانی تدریجی (Rolling Update): نسخهٔ جدید را کمکم جایگزین میکند و در صورت مشکل برمیگرداند.
- مدیریت تنظیمات و رمزها: با ConfigMap و Secret.
معماری در یک نگاه
یک کلاستر کوبرنتیز از دو بخش تشکیل میشود:
- Control Plane: مغز کلاستر؛ شامل API Server (درِ ورود همهٔ دستورها)، etcd (پایگاه دادهٔ وضعیت)، Scheduler (تصمیم میگیرد هر Pod روی کدام نود اجرا شود) و Controller Manager (وضعیت واقعی را به وضعیت مطلوب میرساند).
- Worker Nodeها: سرورهایی که کانتینرها رویشان اجرا میشوند؛ هر نود یک kubelet و یک Container Runtime دارد.
ایدهٔ کلیدی کوبرنتیز حالت مطلوب (Desired State) است: شما در یک فایل YAML میگویید «سه نسخه از این برنامه میخواهم» و کوبرنتیز دائماً تلاش میکند واقعیت را با آن یکی کند.
مفاهیم اصلی
| مفهوم | کاربرد |
|---|---|
| Pod | کوچکترین واحد اجرا؛ یک یا چند کانتینر با شبکهٔ مشترک |
| Deployment | تعداد نسخهها و نحوهٔ بهروزرسانی Podها را مدیریت میکند |
| Service | آدرس و نام ثابت برای دسترسی به گروهی از Podها |
| Ingress | ورود ترافیک HTTP/HTTPS از بیرون به سرویسها |
| ConfigMap / Secret | نگهداری تنظیمات و اطلاعات محرمانه |
| Namespace | تقسیم منطقی کلاستر بین تیمها یا محیطها |
اولین برنامه روی کلاستر محلی
برای تمرین لازم نیست سرور بخرید. با ابزارهایی مثل kind یا minikube یک کلاستر روی کامپیوتر خودتان میسازید:
kind create cluster --name lab
kubectl get nodes
یک Deployment با سه نسخه از وبسرور nginx:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels: { app: web }
template:
metadata:
labels: { app: web }
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
kubectl apply -f web.yaml
kubectl get pods
kubectl expose deployment web --port=80 --type=ClusterIP
kubectl port-forward service/web 8080:80
حالا در مرورگر http://localhost:8080 را باز کنید. یکی از Podها را پاک کنید (kubectl delete pod <name>) و ببینید کوبرنتیز بلافاصله Pod جدیدی میسازد.
دستورهای پرکاربرد kubectl
kubectl get pods -A # همهٔ Podها در همهٔ Namespaceها
kubectl describe pod <name> # جزئیات و رویدادها (اولین قدم عیبیابی)
kubectl logs <pod> # لاگ کانتینر
kubectl scale deployment web --replicas=5
kubectl rollout status deployment web
kubectl rollout undo deployment web
پیشنیازها
قبل از کوبرنتیز اینها را بلد باشید: لینوکس و خط فرمان، شبکه (IP، پورت، DNS) و Docker. کسی که بدون این پایه سراغ کوبرنتیز میرود معمولاً در عیبیابی شبکه و Podها گیر میکند.
قدم بعدی
بعد از مفاهیم پایه، سراغ Helm، Ingress Controller، مانیتورینگ با Prometheus و Grafana و یکپارچهسازی با CI/CD بروید؛ همان مسیری که در نقشهٔ راه DevOps آمده است.
ادامهٔ مسیر: نقشهٔ راه کامل، سرفصلها و سؤالات متداول را در صفحهٔ آموزش DevOps ببینید. اگر نمیدانید از کجا شروع کنید، آزمون تعیین مسیر را بزنید یا نقشهٔ راه PDF رایگان را بگیرید. سؤال دارید؟ از دکمهٔ «مشاوره رایگان» در تلگرام یا بله بپرسید.