Helm چیست و چطور نصب برنامهها روی Kubernetes خودمیزبان را ساده میکند؟

اگر چند بار یک برنامه را با چند فایل YAML روی Kubernetes نصب کرده باشید، میدانید نگهداشتن Deployment، Service و ConfigMap هماهنگ با هم کار راحتی نیست. Helm همین مشکل را حل میکند: برنامه را در یک بسته جمع میکند و نصب، آپدیت و حذف آن را به یک دستور تبدیل میکند.
Helm در Kubernetes چیست؟
Helm یک ابزار مدیریت پکیج برای Kubernetes است، چیزی شبیه apt روی اوبونتو یا npm برای Node.js. بهجای نوشتن و نگهداری چند فایل YAML جدا برای هر برنامه، همه چیز (Deployment، Service، ConfigMap، Secret و بقیه) در یک پکیج به اسم Chart بستهبندی میشود. وقتی یک Chart را نصب میکنید، Helm یک نمونه در حال اجرا از آن میسازد که به آن Release میگویند و وضعیتش را روی کلاستر دنبال میکند.
این یعنی برای نصب یک برنامه مثل WordPress یا GitLab دیگر لازم نیست دهها فایل را دستبهدست کپی کنید؛ یک دستور helm install کافی است.
چرا بدون Helm نصب برنامه سختتر میشود؟
با فایلهای YAML خام، هر تغییر کوچک یعنی باز کردن چند فایل، ویرایش دستی و اجرای دوباره kubectl apply. اگر همین برنامه را روی محیط تست و محیط اصلی با تنظیمات متفاوت (مثلا تعداد replica یا نام دامنه) بخواهید اجرا کنید، باید یک کپی دیگر از فایلها نگه دارید. برگشت به نسخه قبلی هم یعنی پیدا کردن فایلهای قدیمی و اعمال دوبارهشان.
| ویژگی | با kubectl و YAML خام | با Helm |
|---|---|---|
| نصب یک برنامه | چند فایل YAML، چند دستور apply | یک دستور helm install |
| آپدیت نسخه | ویرایش دستی فایلها | یک دستور helm upgrade |
| برگشت به نسخه قبلی | پیدا کردن فایلهای قدیمی | helm rollback با شماره نسخه |
| تنظیمات متفاوت برای هر محیط | کپی جدا از فایلها | یک فایل values.yaml جدا برای هر محیط |
| نصب از یک پکیج آماده | باید فایلها را خودتان بنویسید | helm repo add و نصب مستقیم |
اجزای اصلی Helm
سه مفهوم کافی است تا بقیه مستندات Helm برایتان قابل فهم شود:
- Chart: پکیج برنامه، شامل تمام فایلهای YAML و یک فایل تنظیمات پیشفرض.
- Release: یک نمونه نصبشده از یک Chart روی کلاستر، با یک اسم مشخص. میتوانید همان Chart را چند بار با اسمهای مختلف نصب کنید.
- Values: تنظیماتی که روی مقادیر پیشفرض Chart مینشینند، مثل تعداد replica، نام دامنه یا رمز دیتابیس.
یک Chart میتواند از کامپیوتر شما یا از یک مخزن عمومی (Repository) مثل Bitnami نصب شود؛ همانطور که یک پکیج npm از ریجستری npm نصب میشود.
پیشنیاز: یک کلاستر Kubernetes در حال اجرا
Helm جایگزین Kubernetes نیست، روی یک کلاستر از قبل آماده کار میکند. برای یک کلاستر خودمیزبان معمولا یکی از این دو مسیر را میروید:
- یک نصب سبک مثل k3s یا kubeadm روی یک VPS، برای تست یا پروژههای کوچک.
- چند سرور اختصاصی برای worker nodeهای جدا، وقتی بار واقعی کاربر پشت برنامه هست.
در هر دو حالت باید kubectl را با فایل kubeconfig کلاستر تنظیم کرده باشید و دستور kubectl get nodes خروجی درست بدهد؛ از همانجا Helm شروع میشود.

نصب Helm روی کلاستر خودمیزبان
روی اوبونتو یا دبیان، سادهترین راه اسکریپت رسمی نصب است:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
اگر ترجیح میدهید از مخزن apt نصب کنید:
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
بعد از نصب، این دستور را بزنید تا مطمئن شوید Helm به درستی نشسته و به کلاستر شما دید دارد:
helm version
kubectl get nodes
اگر هر دو خروجی درست دادند، نوبت اولین Chart است.
اجرای اولین Chart
اول یک مخزن عمومی اضافه کنید و لیست Chartهایش را بهروز کنید:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
بعد یک برنامه را نصب کنید، مثلا nginx:
helm install my-nginx bitnami/nginx
my-nginx اسم Release شماست. وضعیتش را با این دستور میبینید:
helm list
helm status my-nginx
برای تغییر تنظیمات پیشفرض، بهجای ویرایش فایلهای داخل Chart، یک فایل values.yaml کوچک میسازید:
service:
type: LoadBalancer
replicaCount: 2
و همان Chart را با این فایل نصب میکنید:
helm install my-nginx bitnami/nginx -f values.yaml
آپدیت و Rollback با Helm
وقتی نسخه جدیدی از برنامه یا تنظیمات جدیدی میخواهید، بهجای حذف و نصب دوباره، Release موجود را آپدیت میکنید:
helm upgrade my-nginx bitnami/nginx -f values.yaml
Helm تاریخچه هر تغییر را نگه میدارد:
helm history my-nginx
اگر آپدیت جدید مشکلی داشت، برگشت به نسخه قبلی یک دستور است:
helm rollback my-nginx 1
همین یک قابلیت، تفاوت اصلی Helm با کار دستی با YAML است: برگشت به حالت قبل بدون دنبال گشتن فایلهای قدیمی.
چند نکته قبل از استفاده روی محیط اصلی
- قبل از نصب، با
helm lint <chart>خطاهای ساختاری Chart را بررسی کنید. - نسخه دقیق Chart را پین کنید (
--version)، نه فقط آخرین نسخه، تا یک آپدیت مخزن عمومی برنامهتان را غافلگیر نکند. - برای هر محیط (تست، اصلی) یک فایل
values.yamlجدا نگه دارید، نه یک فایل مشترک با کلی--setپراکنده. - رمزها و کلیدهای حساس را در
--setروی خط فرمان ننویسید؛ این دستورها در تاریخچه shell باقی میمانند. از Secret جدا یا ابزارهایی مثل Sealed Secrets استفاده کنید.
اگر چند محیط را همزمان مدیریت میکنید، ترکیب Helm با یک ابزار GitOps مثل ArgoCD باعث میشود هر تغییر در values.yaml بهصورت خودکار و قابل ردیابی روی کلاستر اعمال شود.
سؤالات متداول
Helm با kubectl چه فرقی دارد؟ kubectl فایلهای YAML را یکییکی روی کلاستر اعمال میکند. Helm یک لایه بالاتر است: همان فایلها را در یک Chart بستهبندی میکند و نصب، آپدیت و rollback را به یک Release با یک دستور تبدیل میکند.
آیا Helm 2 و Tiller هنوز لازم است؟ نه. Helm 3 که الان استاندارد است، Tiller (سرویس واسط داخل کلاستر) را کنار گذاشته و مستقیم با دسترسی kubeconfig شما کار میکند؛ نصبش هم همینطور سادهتر شده.
آیا Helm روی هر کلاستر Kubernetes کار میکند؟
بله. چون Helm فقط با API استاندارد Kubernetes صحبت میکند، روی k3s، kubeadm، یا هر کلاستر دیگری که kubectl به آن متصل است همانطور کار میکند.
چطور یک Chart برای برنامه خودم بسازم؟
با helm create my-app یک ساختار پایه Chart میسازد که شامل یک Deployment و Service نمونه است؛ از همانجا فایلها را برای برنامه خودتان تغییر میدهید.
برای اجرای یک کلاستر Kubernetes خودمیزبان، چه برای تست Helm و چه برای یک پروژه واقعی، به منابع قابل پیشبینی و دسترسی root نیاز دارید. سرورهای مجازی آریانت همین را فراهم میکنند؛ جزئیات پلنها و قیمت را اینجا ببینید:




