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

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 vCPU | 2 GB | 20 GB SSD |
| چند سرویس کوچک | 2 تا 4 vCPU | 4 GB | 40 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 معادل دسترسی مدیریتی به کلاستر است؛ فایل را در اختیار کاربران غیرمجاز قرار ندهید.

استقرار یک برنامه آزمایشی
برای اطمینان از سلامت کلاستر، یک 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 ندارد، سریعتر آماده استفاده میشود.
| معیار | K3s | kubeadm |
|---|---|---|
| پیچیدگی نصب | کم؛ نصب اولیه با یک اسکریپت | بیشتر؛ نیازمند تنظیم اجزای جداگانه |
| مصرف منابع | کمتر و مناسب سرورهای محدود | معمولاً بیشتر |
| اجزای پیشفرض | 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 در نهایت به اندازه کلاستر، سطح سفارشیسازی و توان تیم برای نگهداری زیرساخت بستگی دارد.




