فهرست محتوا
مقدمه:
Kubernetes بهعنوان یکی از مهمترین فناوریهای دنیای زیرساخت ابری، نقشی کلیدی در مقیاسپذیری و مدیریت اپلیکیشنهای کانتینری ایفا میکند. با وجود مزایای فراوان، فرایند نصب و راهاندازی Kubernetes بهمراتب پیچیدهتر از اجرای مستقیم کانتینرها با Docker است. این پیچیدگی ناشی از ماهیت توزیعشده Kubernetes، مدیریت کلاسترها و هماهنگی میان چندین نود است که نیازمند پیکربندی دقیق در بخشهای شبکه، امنیت و ذخیرهسازی میباشد.
یکی از نکات اساسی در شروع کار با Kubernetes، درک تفاوت میان محیطهای تست و تولید است. ابزارهایی مانند Minikube یا k3s، امکان راهاندازی سریع و ساده Kubernetes را برای یادگیری و آزمایش فراهم میسازند، در حالی که در محیطهای Production نیاز به ایجاد کلاسترهای واقعی با چندین نود، Load Balancer، افزونگی (High Availability) و افزونههای شبکهای وجود دارد. از همین رو، مسیر نصب و راهاندازی Kubernetes بسته به هدف کاربر – چه آموزشی و چه تجاری – میتواند کاملاً متفاوت باشد.
پیشنیازها برای نصب Kubernetes
پیش از آغاز فرایند نصب و راهاندازی Kubernetes، لازم است زیرساخت پایه بهدرستی آمادهسازی شود. عدم رعایت این الزامات معمولاً منجر به بروز خطا در حین نصب یا ناپایداری کلاستر در آینده خواهد شد. در ادامه، اصلیترین پیشنیازها به تفصیل توضیح داده میشوند.
۱) سرور مجازی یا فیزیکی (Ubuntu / CentOS / Debian)
اجرای Kubernetes نیازمند سروری پایدار با منابع سختافزاری متناسب است. بسته به اینکه قصد دارید کلاستر را برای آزمایش و یادگیری یا برای محیط تولید (Production) راهاندازی کنید، میزان منابع سختافزاری مورد نیاز متفاوت خواهد بود.
-
محیط آزمایشی (Single Node یا Cluster کوچک):
حداقل ۲ هسته پردازنده (vCPU)، چهار گیگابایت حافظه RAM و ۳۰ گیگابایت فضای ذخیرهسازی کافی خواهد بود. -
محیط تولیدی:
توصیه میشود نودهای کنترلپلین (Control Plane) با حداقل چهار هسته پردازنده و هشت گیگابایت RAM در نظر گرفته شوند. برای اطمینان از دسترسپذیری بالا (High Availability)، استفاده از سه نود کنترلپلین استاندارد است. نودهای Worker نیز باید حداقل چهار هسته پردازنده و هشت گیگابایت RAM در اختیار داشته باشند.
از نظر سیستمعامل، توزیعهای Ubuntu LTS (22.04/24.04)، Debian 12 و AlmaLinux/Rocky Linux 9 بیشترین سازگاری را با Kubernetes دارند. استفاده از نسخههای قدیمی مانند CentOS 7 توصیه نمیشود، زیرا دیگر بهروز نمیشوند.
علاوه بر این، ضروری است که:
-
سرورها دارای IP ثابت باشند.
-
نام میزبان (Hostname) هر نود یکتا و در DNS یا فایل
/etc/hosts
بهدرستی ثبت شده باشد. -
زمان سیستم از طریق سرویس NTP یا Chrony همگامسازی گردد.
-
حافظه Swap بهطور کامل غیرفعال شود، زیرا Kubernetes از Swap پشتیبانی نمیکند.
۲) دسترسی root یا sudo
برای اجرای مراحل نصب، نیاز به دسترسی مدیریتی وجود دارد. بهترین روش آن است که به جای استفاده مستقیم از کاربر root، یک کاربر عادی ایجاد شود و از طریق گروه sudo یا wheel به آن دسترسی مدیریتی داده شود. این کار علاوه بر امنیت بالاتر، امکان کنترل و مدیریت بهتری نیز فراهم میکند.
بهعنوان نمونه، در سیستمعامل Ubuntu میتوان چنین کاربری را ایجاد کرد:
sudo adduser devops sudo usermod -aG sudo devops
همچنین توصیه میشود احراز هویت ورود به سرور تنها از طریق کلیدهای SSH انجام شود و دسترسی با رمز عبور و ورود مستقیم کاربر root غیرفعال گردد.
۳) نصب Docker یا containerd
Kubernetes برای اجرای کانتینرها به یک موتور کانتینری نیاز دارد که از Container Runtime Interface (CRI) پشتیبانی کند. امروزه پایدارترین و توصیهشدهترین گزینه، containerd است. هرچند امکان استفاده از Docker نیز با افزودن ماژول cri-dockerd
وجود دارد، اما containerd سازگاری و پایداری بیشتری در محیطهای تولیدی دارد.
پس از نصب، باید پارامتر SystemdCgroup در فایل پیکربندی containerd فعال شود تا هماهنگی لازم با Kubernetes برقرار گردد. همچنین اطمینان حاصل کنید که ماژولهای شبکهای overlay و br_netfilter بارگذاری شده و پارامترهای شبکهای لازم در سیستم اعمال شده باشند.
۴) تنظیمات شبکه و فایروال
Kubernetes برای مدیریت ارتباط بین نودها و اجرای سرویسها، نیازمند پیکربندی شبکهای مشخص است. برخی از مهمترین موارد عبارتاند از:
-
فعالسازی ماژولهای کرنل:
ماژولهایoverlay
وbr_netfilter
باید بارگذاری شوند. همچنین مقادیر پارامترهای زیر در فایلهای sysctl فعال گردد:-
net.bridge.bridge-nf-call-iptables = 1
-
net.bridge.bridge-nf-call-ip6tables = 1
-
net.ipv4.ip_forward = 1
-
-
تعریف محدودههای آدرسدهی (CIDR):
محدوده آدرسدهی Pods و Services باید از پیش تعیین شود و با شبکه داخلی یا VPN سازمان تداخل نداشته باشد. بهعنوان مثال:-
Pod CIDR:
10.244.0.0/16
(برای Flannel) -
Service CIDR:
10.96.0.0/12
-
-
باز کردن پورتهای ضروری در فایروال:
-
پورت ۶۴۴۳/TCP: دسترسی به API Server
-
پورتهای ۲۳۷۹–۲۳۸۰/TCP: ارتباط etcd
-
پورت ۱۰۲۵۰/TCP: ارتباط kubelet
-
پورت ۱۰۲۵۷ و ۱۰۲۵۹/TCP: سرویسهای کنترلپلین
-
بازه ۳۰۰۰۰–۳۲۷۶۷/TCP: سرویسهای NodePort
-
اعمال این قوانین میتواند از طریق ابزارهایی مانند ufw در Ubuntu یا firewalld در توزیعهای مبتنی بر RHEL انجام شود.
با رعایت این پیشنیازها، زیرساخت شما آماده اجرای مراحل اصلی نصب Kubernetes خواهد بود. در گام بعدی میتوان وارد مراحل نصب ابزارهایی مانند kubeadm، kubelet و kubectl شد و کلاستر Kubernetes را راهاندازی کرد.
روشهای نصب Kubernetes
برای نصب و راهاندازی Kubernetes دو رویکرد اصلی وجود دارد: روش ساده برای تست و یادگیری و روش حرفهای برای محیطهای تولیدی (Production). انتخاب هر روش وابسته به هدف شما از راهاندازی کلاستر است.
۱) روش ساده: نصب با Minikube یا K3s
این روش برای افرادی که قصد دارند Kubernetes را صرفاً برای یادگیری مفاهیم یا اجرای آزمایشی در مقیاس کوچک تجربه کنند، مناسب است. در این حالت همه اجزای کلاستر روی یک نود نصب میشوند و پیچیدگی راهاندازی در حداقل میزان ممکن خواهد بود.
الف) نصب با Minikube
Minikube ابزاری متنباز است که اجرای Kubernetes را روی یک ماشین محلی یا سرور کوچک ممکن میسازد.
مراحل نصب روی Ubuntu:
# نصب پیشنیازها sudo apt update -y sudo apt install -y curl apt-transport-https virtualbox virtualbox-ext-pack # دانلود و نصب Minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # شروع به کار Minikube minikube start --driver=docker # بررسی وضعیت kubectl get nodes
با این دستورات، یک کلاستر تکنودی Kubernetes ایجاد و آماده استفاده خواهد شد.
ب) نصب با K3s
K3s نسخهای سبک و سادهشده از Kubernetes است که توسط Rancher توسعه یافته و برای محیطهای کممنبع یا تست سریع بسیار محبوب است.
نصب آن تنها با یک دستور امکانپذیر است:
پس از اجرا، سرویس K3s فعال میشود و دستور kubectl
آماده استفاده خواهد بود. مسیر kubeconfig نیز بهطور پیشفرض در /etc/rancher/k3s/k3s.yaml
قرار میگیرد.
Minikube بیشتر برای یادگیری روی سیستمهای شخصی استفاده میشود، در حالیکه K3s در محیطهای آزمایشی یا حتی برخی سناریوهای عملیاتی سبک (مانند IoT یا Edge) نیز کاربرد دارد.
۲) روش حرفهای: نصب با kubeadm
برای محیطهای Production یا پروژههایی که نیاز به کلاستر چندنودی و پایداری بالا دارند، ابزار استاندارد نصب Kubernetes، استفاده از kubeadm است. این ابزار امکان ایجاد یک کلاستر کامل و پایدار را فراهم میکند، اما نیازمند آمادهسازی دقیق پیشنیازها و منابع سختافزاری است.
مراحل نصب با kubeadm (روی Ubuntu/Debian)
-
نصب پیشنیازها
sudo apt update sudo apt install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes.gpg echo "deb https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update
- نصب بستههای اصلی Kubernetes
sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
- ایجاد کلاستر روی نود کنترلپلین
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- تنظیم دسترسی kubectl برای کاربر فعلی
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
نصب افزونه شبکه (مثال: Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-
افزودن نودهای Worker به کلاستر
پس از اجرایkubeadm init
یک دستورkubeadm join
نمایش داده میشود که باید روی نودهای Worker اجرا شود. -
بررسی وضعیت کلاستر
kubectl get nodes kubectl get pods -n kube-system
-
اگر هدف شما یادگیری یا اجرای تستهای سریع است، Minikube یا K3s بهترین گزینه خواهند بود.
-
اگر قصد دارید یک محیط پایدار و مقیاسپذیر در سرورهای مجازی یا فیزیکی راهاندازی کنید، باید از kubeadm استفاده کنید.
راهاندازی کلاستر Kubernetes
پس از نصب پیشنیازها و ابزارهای اصلی (kubeadm، kubelet و kubectl)، نوبت به ایجاد کلاستر Kubernetes میرسد. این مرحله شامل راهاندازی نود کنترلپلین (Master)، اتصال نودهای Worker و پیکربندی شبکه داخلی کلاستر خواهد بود.
اجرای kubeadm init
روی Master
روی نود کنترلپلین دستور زیر اجرا میشود:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
-
گزینه
--pod-network-cidr
محدوده آدرسدهی Podها را مشخص میکند و باید با افزونه شبکهای (CNI Plugin) که بعداً نصب خواهد شد هماهنگ باشد. -
پس از اجرا، ابزار kubeadm تمامی اجزای اصلی کلاستر شامل API Server، etcd، Controller Manager و Scheduler را راهاندازی میکند.
در پایان، یک خروجی شامل دستور kubeadm join
نمایش داده خواهد شد. این دستور مخصوص اتصال نودهای Worker به کلاستر است.
برای استفاده از kubectl
توسط کاربر فعلی، باید فایل پیکربندی دسترسی تنظیم شود:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Join کردن Worker Nodes
روی هر نود Worker، دستور kubeadm join
که در خروجی مرحله قبل نمایش داده شد اجرا میشود. نمونهای از این دستور به شکل زیر خواهد بود:
sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:112233445566778899...
-
آدرس
192.168.1.100:6443
مربوط به نود کنترلپلین است. -
مقدار
--token
و--discovery-token-ca-cert-hash
برای احراز هویت نود Worker مورد استفاده قرار میگیرد.
با اجرای این دستور، نود Worker به کلاستر متصل شده و آماده دریافت Podها خواهد بود.
نصب CNI Plugin (شبکهسازی)
Kubernetes بهطور پیشفرض فاقد راهکار شبکه داخلی است. برای برقراری ارتباط میان Podها و نودها باید یک CNI Plugin نصب گردد. دو افزونه رایج عبارتاند از:
-
Flannel (سادگی و نصب سریع)
-
Calico (کارایی بالا و امکانات امنیتی پیشرفتهتر)
نصب Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
نصب Calico:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/calico.yaml
۴) بررسی وضعیت نودها
برای اطمینان از صحت راهاندازی کلاستر، میتوان وضعیت نودها و Podهای سیستمی را بررسی کرد:
kubectl get nodes kubectl get pods -n kube-system
-
خروجی دستور اول باید تمامی نودهای Master و Worker را در وضعیت Ready نمایش دهد.
-
در خروجی دستور دوم، Podهای مربوط به اجزای سیستمی Kubernetes و افزونه شبکه باید در وضعیت Running قرار داشته باشند.
اجرای اولین اپلیکیشن در Kubernetes
پس از راهاندازی کلاستر و نصب افزونه شبکه، میتوان اولین اپلیکیشن را روی آن مستقر کرد. این کار در Kubernetes معمولاً با استفاده از Deployment انجام میشود. Deployment امکان مدیریت نسخهها، مقیاسپذیری و پایداری اپلیکیشن را بهصورت خودکار فراهم میکند.
۱) ساخت Deployment ساده (Nginx بهعنوان مثال)
برای شروع، یک اپلیکیشن وب ساده مانند Nginx را روی کلاستر مستقر میکنیم:
kubectl create deployment nginx-deployment --image=nginx:latest
-
با این دستور، یک Deployment به نام
nginx-deployment
ایجاد شده و یک Pod حاوی کانتینر Nginx اجرا خواهد شد. -
برای بررسی وضعیت Deployment: