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

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

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

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

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 شروع می‌شود.

بررسی وضعیت کلاستر Kubernetes با دستور 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 نیاز دارید. سرورهای مجازی آریانت همین را فراهم می‌کنند؛ جزئیات پلن‌ها و قیمت را اینجا ببینید:

سرور مجازی آریانت