معرفی Kubernetes و مفاهیم پایه ارکستریشن کانتینر
وقتی تعداد کانتینرهای یک برنامه از چند تا فراتر میرود و باید روی چند سرور مختلف اجرا شوند، مدیریت دستی آنها با دستوراتی مثل docker run عملاً غیرممکن میشود. اینجاست که Kubernetes (یا بهاختصار K8s) وارد میشود؛ یک پلتفرم متنباز برای ارکستریشن (Orchestration) کانتینرها که کارهایی مثل زمانبندی اجرا، مقیاسپذیری خودکار، بازیابی از خطا و مدیریت شبکه بین کانتینرها را بهصورت خودکار انجام میدهد.
ارکستریشن کانتینر چیست و چرا به آن نیاز داریم؟
وقتی از Docker برای اجرای یک یا چند کانتینر روی یک سرور استفاده میکنید، همهچیز ساده است. اما در مقیاس واقعی این سؤالها مطرح میشوند:
- اگر یک کانتینر کرش کند، چه کسی آن را دوباره بالا میآورد؟
- اگر ترافیک سایت زیاد شود، چطور بهصورت خودکار تعداد نمونهها (replica) افزایش پیدا کند؟
- چطور بین چند سرور فیزیکی، بار بهطور بهینه توزیع شود؟
- چطور نسخهٔ جدید برنامه را بدون قطعی (Zero Downtime) منتشر کنیم؟
Kubernetes دقیقاً برای پاسخ به همین سؤالها طراحی شده و امروز استاندارد صنعتی ارکستریشن کانتینر است.
معماری Kubernetes: اجزای اصلی یک کلاستر
یک کلاستر Kubernetes از دو نوع نود تشکیل شده است:
Control Plane (صفحهٔ کنترل)
مغز متفکر کلاستر است و تصمیم میگیرد چه چیزی، کجا و چطور اجرا شود. مهمترین اجزای آن عبارتند از:
- kube-apiserver: دروازهٔ ورودی همهٔ درخواستها (از جمله دستورات kubectl)
- etcd: پایگاه دادهٔ کلید-مقدار که وضعیت کل کلاستر را ذخیره میکند
- kube-scheduler: تصمیم میگیرد هر Pod روی کدام نود اجرا شود
- kube-controller-manager: وضعیت فعلی را با وضعیت مطلوب مقایسه و اصلاح میکند
Worker Node (نود کارگر)
جایی است که کانتینرهای واقعی روی آن اجرا میشوند و شامل این اجزاست:
- kubelet: عامل اجرایی روی هر نود که Podها را مدیریت میکند
- kube-proxy: مسیریابی شبکه بین Podها و Serviceها
- Container Runtime: موتور اجرای کانتینر (معمولاً containerd)
مفاهیم پایهای که باید بشناسید
پیش از شروع کار عملی، آشنایی با چند مفهوم کلیدی ضروری است:
| مفهوم | توضیح |
|---|---|
| Pod | کوچکترین واحد قابل استقرار؛ یک یا چند کانتینر که با هم شبکه و فضای ذخیرهسازی به اشتراک میگذارند |
| Deployment | تعریف میکند چند نسخه (Replica) از یک Pod باید همیشه در حال اجرا باشد و بهروزرسانیها را مدیریت میکند |
| Service | یک آدرس شبکهای ثابت برای دسترسی به مجموعهای از Podها فراهم میکند، حتی اگر Podها عوض شوند |
| Namespace | فضای نام مجازی برای جداسازی منطقی منابع (مثلاً محیط تست از محیط تولید) |
| ConfigMap / Secret | ذخیرهٔ تنظیمات و اطلاعات حساس جدا از کد برنامه |
راهاندازی یک کلاستر تکنودی برای تست با Minikube
برای یادگیری و تست، نیازی به چند سرور واقعی نیست؛ Minikube یک کلاستر تکنودی روی سیستم شما اجرا میکند:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker
minikube status
kubectl get nodesدستورات پرکاربرد kubectl
kubectl get pods
kubectl create deployment nginx-app --image=nginx
kubectl scale deployment nginx-app --replicas=3
kubectl expose deployment nginx-app --port=80 --type=NodePort
kubectl logs POD_NAME
kubectl exec -it POD_NAME -- /bin/bashKubernetes یا Docker Compose؛ کدام را انتخاب کنیم؟
اگر پروژهای کوچک دارید که روی یک سرور اجرا میشود، Docker Compose کاملاً کافی و سادهتر است. اما وقتی نیاز به مقیاسپذیری خودکار، توزیع بار بین چند سرور، یا بازیابی خودکار از خطا در سطح تولید (Production) دارید، Kubernetes گزینهٔ درستتری است. بسیاری از تیمها مسیر را از یک سرور اختصاصی با Docker Compose شروع میکنند و با رشد پروژه به Kubernetes مهاجرت میکنند.
برای اینکه از سلامت Podها و نودهای کلاستر هم مطلع باشید، پیشنهاد میکنیم مقالهٔ مانیتورینگ سرور لینوکس با Prometheus و Node Exporter را هم مطالعه کنید؛ چون Prometheus یکی از رایجترین ابزارهای مانیتورینگ کلاسترهای Kubernetes هم هست.
جمعبندی
Kubernetes با انتزاع مفاهیمی مثل Pod، Deployment و Service، مدیریت برنامههای کانتینری در مقیاس بزرگ را بهمراتب سادهتر میکند. شروع کار با یک کلاستر تکنودی مثل Minikube بهترین راه برای یادگیری عملی این مفاهیم پیش از اجرای آنها روی سرورهای واقعی تولید است.
