بلاگ/راه‌اندازی K3s (Kubernetes سبک) روی VPS و سرور اختصاصی: مناسب پروژه‌های کوچک و کم‌مصرف
به‌روز شده

راه‌اندازی K3s (Kubernetes سبک) روی VPS و سرور اختصاصی: مناسب پروژه‌های کوچک و کم‌مصرف

1405/06/190 بازدید
راه‌اندازی K3s (Kubernetes سبک) روی VPS و سرور اختصاصی: مناسب پروژه‌های کوچک و کم‌مصرف

راه‌اندازی K3s (Kubernetes سبک) روی VPS و سرور اختصاصی: مناسب پروژه‌های کوچک و کم‌مصرف

Kubernetes برای مدیریت کانتینرها امکانات زیادی دارد، اما راه‌اندازی یک کلاستر کامل با kubeadm برای همه پروژه‌ها ضروری نیست. اگر می‌خواهید چند سرویس کوچک، محیط آزمایشی، سامانه مانیتورینگ یا اپلیکیشن شخصی را روی یک VPS اجرا کنید، K3s گزینه کم‌مصرف‌تری است. K3s یک توزیع سازگار با Kubernetes است که اجزای مورد نیاز کلاستر را در قالب یک بسته ساده ارائه می‌کند. نصب اولیه آن با یک دستور انجام می‌شود و برای اجرا به منابع کمتری نسبت به کلاسترهای متداول Kubernetes نیاز دارد. در این راهنما، نصب K3s روی VPS را از آماده‌سازی سرور تا استقرار یک برنامه آزمایشی بررسی می‌کنیم. سپس یک Worker Node به کلاستر اضافه می‌کنیم و تفاوت K3s با kubeadm را توضیح می‌دهیم. نمای کلی کلاستر K3s روی VPS

K3s چیست و چه تفاوتی با Kubernetes معمولی دارد؟

K3s پروژه‌ای از Rancher و یکی از توزیع‌های تأییدشده Kubernetes است. عبارت «Kubernetes سبک» به این معنا نیست که APIها و مفهوم‌های اصلی Kubernetes حذف شده‌اند؛ Deployment، Service، ConfigMap، Secret، Ingress و بیشتر قابلیت‌های رایج همچنان در دسترس‌اند. تفاوت اصلی در بسته‌بندی و انتخاب اجزای پیش‌فرض است. K3s بسیاری از وابستگی‌ها را در یک فایل اجرایی قرار می‌دهد و نصب و نگهداری کلاستر را ساده‌تر می‌کند. این توزیع به‌صورت پیش‌فرض از containerd برای اجرای کانتینرها استفاده می‌کند و ابزارهایی مانند CoreDNS، Traefik، ServiceLB و Local Path Provisioner را نیز همراه خود دارد. در یک کلاستر کوچک، دیتابیس داخلی SQLite می‌تواند وضعیت کلاستر تک‌سروری را نگه دارد. برای محیط‌های چندسروری یا با دسترس‌پذیری بالا می‌توان از etcd توکار یا دیتابیس خارجی پشتیبانی‌شده استفاده کرد.

چه زمانی K3s انتخاب مناسبی است؟

K3s برای شرایطی مناسب است که به API و شیوه مدیریت Kubernetes نیاز دارید، اما نمی‌خواهید بخش زیادی از منابع سرور صرف خود کلاستر شود. نمونه‌های متداول عبارت‌اند از: - محیط توسعه، آزمایش و نمایش محصول - وب‌سایت‌ها و APIهای کوچک با چند سرویس - اجرای ابزارهای داخلی تیم - آزمایش Helm Chart و Manifestهای Kubernetes - کلاسترهای لبه یا Edge با منابع محدود - محیط آموزشی برای یادگیری Kubernetes - سامانه‌های کوچک مانیتورینگ و جمع‌آوری داده سبک بودن K3s به‌تنهایی تضمین نمی‌کند که هر بار کاری روی یک VPS ضعیف اجرا شود. مصرف واقعی حافظه و پردازنده بیشتر به تعداد Podها، پایگاه داده، سیستم مانیتورینگ و الگوی ترافیک بستگی دارد. برای بارهای حساس یا کلاسترهای بزرگ، باید ظرفیت‌سنجی و طراحی دسترس‌پذیری جداگانه انجام شود.

حداقل منابع پیشنهادی

K3s را می‌توان روی سخت‌افزار محدود اجرا کرد، اما حداقل فنی همیشه انتخاب مناسبی برای محیط عملیاتی نیست. برای یک کلاستر تک‌گرهی آزمایشی، VPS با ۲ هسته پردازنده، ۲ گیگابایت RAM و حدود ۲۰ گیگابایت فضای SSD نقطه شروع قابل‌قبولی است. اگر قرار است پایگاه داده، سامانه ثبت لاگ یا چند سرویس هم‌زمان اجرا شوند، ۴ گیگابایت RAM یا بیشتر انتخاب مطمئن‌تری خواهد بود. روی Worker Node نیز باید منابع مورد نیاز Podهایی را که زمان‌بند روی آن قرار می‌دهد در نظر بگیرید. پیشنهادهای زیر برای شروع هستند و باید بر اساس بار واقعی تنظیم شوند:

نوع استفادهCPU پیشنهادیRAM پیشنهادیفضای ذخیره‌سازی
یادگیری و آزمایش ساده2 vCPU2 GB20 GB SSD
چند سرویس کوچک2 تا 4 vCPU4 GB40 GB SSD
محیط عملیاتی کم‌ترافیک4 vCPU یا بیشتر8 GB یا بیشتر80 GB SSD یا بیشتر
Worker Nodeمتناسب با بارحداقل 2 تا 4 GBمتناسب با داده برنامه

برای نصب به یک توزیع لینوکسی پشتیبانی‌شده، دسترسی root یا کاربر دارای sudo، اتصال شبکه پایدار و یک آدرس IP ثابت نیاز دارید. این آموزش بر پایه Ubuntu 22.04 یا 24.04 نوشته شده است.

آماده‌سازی VPS یا سرور اختصاصی

ابتدا از طریق SSH به سرور متصل شوید:

ssh root@SERVER_IP

فهرست بسته‌ها را به‌روز و ارتقاهای موجود را نصب کنید:

apt update
apt upgrade -y

نام میزبان را مشخص کنید. برای گره اصلی می‌توان از نام k3s-server استفاده کرد:

hostnamectl set-hostname k3s-server

زمان سیستم نیز باید دقیق باشد. وضعیت همگام‌سازی را بررسی کنید:

timedatectl status

اگر فایروال فعال است، پورت SSH را باز نگه دارید. در کلاستر چندگرهی، Workerها باید بتوانند از طریق TCP روی پورت 6443 به Server Node متصل شوند. بسته به تنظیمات شبکه کلاستر، Ingress و سرویس‌های مورد استفاده ممکن است پورت‌های دیگری نیز لازم باشند. باز کردن بی‌قیدوشرط پورت API برای تمام اینترنت کار درستی نیست. دسترسی پورت 6443 را به IP گره‌های کلاستر یا شبکه خصوصی محدود کنید. اگر سرویس‌دهنده شما شبکه خصوصی بین سرورها ارائه می‌کند، بهتر است ارتباط داخلی K3s از همان مسیر انجام شود.

نصب K3s روی VPS تک‌گرهی

برای نصب نسخه پایدار K3s دستور زیر را روی گره اصلی اجرا کنید:

curl -sfL https://get.k3s.io | sh -

اسکریپت نصب، سرویس k3s را ایجاد و فعال می‌کند. پس از پایان نصب، وضعیت سرویس را بررسی کنید:

systemctl status k3s --no-pager

سپس فهرست گره‌ها را ببینید:

sudo k3s kubectl get nodes

خروجی باید گره اصلی را با وضعیت Ready نشان دهد. برای بررسی Podهای سیستمی نیز این دستور را اجرا کنید:

sudo k3s kubectl get pods -A

فایل kubeconfig کلاستر در مسیر زیر قرار دارد:

/etc/rancher/k3s/k3s.yaml

اگر فقط روی همان سرور کار می‌کنید، می‌توانید دستورهای مدیریتی را با sudo k3s kubectl اجرا کنید. برای استفاده از شکل معمول kubectl در حساب کاربری فعلی، متغیر محیطی زیر را تنظیم کنید:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

برای دائمی کردن آن می‌توانید این مقدار را به فایل تنظیمات Shell کاربر اضافه کنید. دسترسی به kubeconfig معادل دسترسی مدیریتی به کلاستر است؛ فایل را در اختیار کاربران غیرمجاز قرار ندهید. بررسی وضعیت گره اصلی K3s با دستور kubectl get nodes

استقرار یک برنامه آزمایشی

برای اطمینان از سلامت کلاستر، یک Deployment ساده بر پایه Nginx بسازید:

sudo k3s kubectl create deployment nginx-demo --image=nginx:alpine

سپس آن را با یک Service از نوع NodePort در دسترس قرار دهید:

sudo k3s kubectl expose deployment nginx-demo \
  --type=NodePort \
  --port=80

وضعیت منابع را بررسی کنید:

sudo k3s kubectl get deployments,pods,services

در خروجی Service، پورتی در محدوده NodePort نمایش داده می‌شود. برای آزمایش از داخل سرور می‌توانید دستور زیر را با شماره پورت واقعی اجرا کنید:

curl http://127.0.0.1:NODE_PORT

برای دسترسی از بیرون باید همان پورت در فایروال باز باشد. NodePort برای آزمایش مناسب است، اما در محیط واقعی معمولاً Ingress و دامنه دارای TLS انتخاب بهتری هستند. K3s به‌صورت پیش‌فرض Traefik را نصب می‌کند، مگر اینکه هنگام نصب آن را غیرفعال کرده باشید. برای دسترسی از طریق IP واقعی به‌جای NodePort، می‌توان به‌جای ServiceLB داخلی از MetalLB به‌عنوان Load Balancer استفاده کرد.

افزودن Worker Node به کلاستر

برای ساخت کلاستر چندگرهی، ابتدا توکن عضویت را از Server Node بخوانید:

sudo cat /var/lib/rancher/k3s/server/node-token

این توکن محرمانه است و باید مانند رمز عبور نگهداری شود. سپس روی VPS یا سرور دوم، دستور نصب Agent را اجرا کنید:

curl -sfL https://get.k3s.io | \
  K3S_URL=https://SERVER_PRIVATE_IP:6443 \
  K3S_TOKEN="YOUR_NODE_TOKEN" sh -

به‌جای SERVER_PRIVATE_IP آدرس قابل‌دسترسی گره اصلی و به‌جای YOUR_NODE_TOKEN توکن دریافت‌شده را قرار دهید. در صورت نبود شبکه خصوصی می‌توان از IP عمومی استفاده کرد، اما باید دسترسی فایروال را فقط به IPهای مشخص محدود کنید. اکنون روی گره اصلی وضعیت اعضای کلاستر را ببینید:

sudo k3s kubectl get nodes -o wide

Worker جدید پس از مدتی باید با وضعیت Ready نمایش داده شود. اگر گره اضافه نشد، سرویس Agent را روی Worker بررسی کنید:

systemctl status k3s-agent --no-pager
journalctl -u k3s-agent -n 100 --no-pager

مشکلات DNS، بسته بودن پورت 6443، اشتباه بودن توکن و استفاده از IP غیرقابل‌دسترسی از علت‌های رایج شکست اتصال هستند.

مقایسه K3s و kubeadm

kubeadm ابزار استانداردی برای راه‌اندازی کلاستر Kubernetes است و کنترل بیشتری روی انتخاب Runtime، افزونه شبکه، Ingress Controller و معماری اجزای Control Plane می‌دهد. این انعطاف در محیط‌های بزرگ ارزشمند است، اما نصب و نگهداری را پیچیده‌تر می‌کند. K3s تنظیمات اولیه معقولی دارد و بسیاری از اجزا را همراه خود نصب می‌کند. در نتیجه برای تیم کوچک یا پروژه‌ای که مدیر تمام‌وقت Kubernetes ندارد، سریع‌تر آماده استفاده می‌شود.

معیارK3skubeadm
پیچیدگی نصبکم؛ نصب اولیه با یک اسکریپتبیشتر؛ نیازمند تنظیم اجزای جداگانه
مصرف منابعکمتر و مناسب سرورهای محدودمعمولاً بیشتر
اجزای پیش‌فرضcontainerd، Traefik، CoreDNS و ابزارهای ذخیره‌سازیانتخاب بیشتر بر عهده مدیر کلاستر
کاربرد متداولپروژه کوچک، Edge، توسعه و آموزشکلاسترهای استاندارد و قابل‌سفارشی‌سازی
نگهداریساده‌تر برای کلاسترهای کوچکنیازمند دانش عملیاتی بیشتر
دسترس‌پذیری بالاپشتیبانی می‌شود، اما نیازمند طراحیپشتیبانی می‌شود و کنترل بیشتری دارد

اگر هدف یادگیری دقیق معماری Kubernetes یا ساخت سکویی با تنظیمات اختصاصی شبکه و ذخیره‌سازی است، راه‌اندازی کلاستر Kubernetes با kubeadm ممکن است مناسب‌تر باشد. اگر هدف اجرای سریع چند سرویس با سربار کمتر است، K3s معمولاً مسیر کوتاه‌تری دارد.

تنظیمات مهم پس از نصب

غیرفعال کردن Traefik در صورت استفاده از Ingress دیگر

اگر قصد دارید NGINX Ingress Controller یا گزینه دیگری را نصب کنید، K3s را بدون Traefik راه‌اندازی کنید:

curl -sfL https://get.k3s.io | sh -s - --disable=traefik

این گزینه بهتر است هنگام نصب اولیه مشخص شود. حذف یک جزء از کلاستر فعال باید با بررسی منابع و تنظیمات وابسته انجام شود.

گرفتن نسخه پشتیبان

در نصب تک‌گرهی پیش‌فرض، داده‌های مهم K3s زیر مسیر /var/lib/rancher/k3s قرار دارند. کپی ساده فایل‌ها هنگام فعال بودن سرویس، روش مطمئنی برای پشتیبان‌گیری سازگار نیست. روش پشتیبان باید با نوع datastore هماهنگ باشد. در کلاسترهایی که از etcd توکار استفاده می‌کنند، قابلیت snapshot خود K3s در دسترس است:

sudo k3s etcd-snapshot save

نسخه پشتیبان را خارج از همان سرور نگهداری کنید. خرابی دیسک نباید هم‌زمان کلاستر و تنها نسخه پشتیبان آن را از بین ببرد.

محدود کردن دسترسی به Kubernetes API

پورت API را فقط برای مدیران و گره‌های مجاز باز کنید. kubeconfig و توکن عضویت Workerها را در مخزن Git قرار ندهید. برای کاربران و برنامه‌ها نیز به‌جای دسترسی مدیریتی عمومی، ServiceAccount و قواعد RBAC محدود بسازید.

پایش منابع

سبک بودن K3s مانع پر شدن دیسک یا حافظه نمی‌شود. مصرف CPU، RAM، فضای دیسک و تعداد Podها را پایش کنید؛ برای این کار می‌توان Prometheus و Grafana را روی همان سرور یا سروری جداگانه راه‌اندازی کرد. لاگ کانتینرها و Imageهای قدیمی نیز ممکن است به‌مرور فضای ذخیره‌سازی را اشغال کنند. برای یک بررسی سریع می‌توانید از این دستورها استفاده کنید:

free -h
df -h
sudo k3s kubectl get pods -A
sudo k3s kubectl top nodes

دستور top تنها زمانی کار می‌کند که Metrics Server فعال و آماده باشد.

حذف K3s

نصب K3s اسکریپت حذف را نیز روی سیستم قرار می‌دهد. برای حذف Server Node اجرا کنید:

sudo /usr/local/bin/k3s-uninstall.sh

روی Worker Node از دستور زیر استفاده کنید:

sudo /usr/local/bin/k3s-agent-uninstall.sh

حذف K3s داده‌های کلاستر و منابع محلی آن گره را از بین می‌برد. پیش از اجرای این دستور از Manifestها، داده‌های پایدار و datastore نسخه پشتیبان بگیرید.

انتخاب VPS یا سرور اختصاصی برای K3s

برای محیط آموزشی و سرویس‌های کم‌ترافیک، یک VPS با SSD و حداقل ۲ گیگابایت RAM کافی است. اگر چند Worker، پایگاه داده سنگین، پردازش مداوم یا ترافیک بیشتر دارید، منابع بالاتر یا سرور اختصاصی امکان برنامه‌ریزی دقیق‌تری برای CPU، حافظه و ذخیره‌سازی می‌دهد. مهم‌تر از نام نوع سرور، پایداری شبکه، سرعت دیسک، امکان افزایش منابع و وجود شبکه خصوصی میان گره‌ها است. پیش از تصمیم‌گیری می‌توانید چک‌لیست خرید سرور مجازی یا در مقیاس بزرگ‌تر راهنمای خرید سرور اختصاصی را ببینید. اگر هنوز زیرساخت پروژه را انتخاب نکرده‌اید، می‌توانید مشخصات سرور مجازی ابری آریانت را بررسی و پلن را بر اساس مجموع مصرف سرویس‌ها انتخاب کنید.

جمع‌بندی

نصب K3s روی VPS راهی ساده برای استفاده از قابلیت‌های اصلی Kubernetes با سربار کمتر است. یک کلاستر تک‌گرهی را می‌توان در چند دقیقه آماده کرد و در صورت نیاز با افزودن Worker Node گسترش داد. برای پروژه‌های کوچک، محیط توسعه و سرویس‌های کم‌مصرف، تنظیمات پیش‌فرض K3s معمولاً کافی است. با بزرگ‌تر شدن بار کاری باید موضوع‌هایی مانند دسترس‌پذیری Control Plane، پشتیبان‌گیری datastore، ذخیره‌سازی پایدار، محدودسازی شبکه و پایش منابع را نیز وارد طراحی کنید. انتخاب میان K3s و kubeadm در نهایت به اندازه کلاستر، سطح سفارشی‌سازی و توان تیم برای نگهداری زیرساخت بستگی دارد.