آنچه در این مقاله میخوانید
Helm چیست؟ ابزار مدیریت پکیج برای Kubernetes
۳ خرداد ۱۴۰۴
Helm، ابزار فوقالعادهای است که کار با Kubernetes را آسانتر میکند. به بیان دیگر، Helm برای کوبرنتیز همان نقشی را دارد که ابزارهای apt یا yum برای لینوکس ایفا میکنند. با ابزار Helm، میتوانید تمام اطلاعات ضروری برای برنامههای بستهبندی شده (Packaged) را دریافت کرده و آنها را به chart تبدیل کنید، هر یک از این chartها، شامل دیتاهایی هستند که برای اجرای اپلیکیشن روی کلاسترهای کوبرنتیز ضروری هستند. در واقع Helm این امکان را میدهد که بهراحتی چرخه عمر برنامهها را مدیریت کنید؛ دیگر نیازی نیست با فایلهای YAML طولانی و پراکنده پادها و سرویسها دستو پنجه نرم کنید. ابزار Helm، شما را از شر انجام کارهای تکراری و خستهکننده نجات داده و کارهایتان را سرعت میبخشد. در این مقاله از سری آموزشهای کوبرنتیز، قصد داریم شما را با اهمیت و ضرورت استفاده از Helm آشنا کنیم، پس تا پایان همراه ما باشید:)

آنچه در این مقاله میخوانید:
- Helm چست؟
- Chartها در Helm
- پیکربندی Chart
- مفهوم Release
- ایجاد chart
- چرا از Helm استفاده کنیم؟
- جمعبندی
- سوالات متداول
Helm چست؟
Helm یک پکیج منیجر برای کوبرنتیز است که با آن، میتوانید اپلیکیشنها را مانند یک بسته نرمافزاری، تعریف، نصب، آپدیت و حذف کنید. درست همانطور که در لینوکس با apt یا yum، نرم افزار نصب میکنید، در کوبرنتیز هم با Helm اپلیکیشن را دیپلوی میکنید.
اما موضوعی که Helm را فراتر از یک ابزار ساده میکند، معماری آن است؛ Helm از ساختاری بهنام chart استفاده میکند، ساختاری فولدری که تمام manifestهای مورد نیاز برای اجرای یک اپلیکیشن را در قالب template نگهمیدارد. در واقع بهجای اینکه اجزای مختلف یک اپلیکیشن مثل Deployment، Service، ConfigMap و Secret را جداگانه ایجاد کنید، همه اینها داخل یک بسته به نام Chart قرار میگیرند. به این معنی که بارها میتوانید یک برنامه را با تنظیمات متفاوت روی محیطهای مختلف دیپلوی کنید، بدون اینکه نیاز باید کل فایل YAML را از نو ایجاد کنید؛ بنابراین با ابزار Helm، تنها یک دستور مانند helm install
یا helm upgrade
را اجرا میکنید. به همین دلیل Helm نه تنها زمان دیپلوی را کاهش میدهد، بلکه کدهای YAML را ساختیافتهتر کرده و آماده استفاده در هر محیطی نگهمیدارد.
برای آشنایی با کوبرنتیز (Kubernetes) و چگونگی کارکرد آن، مقاله زیر را میتوانید مطالعه کنید.
کوبرنتیز(Kubernetes) چیست؟

ابزار Helm کارهای زیر را میتواند انجام دهد:
- نصب نرمافزار
- نصب خودکار وابستگیهای نرمافزار
- ارتقاء نرمافزار
- پیکربندی دیپلویمنتها
- واکشی پکیجها از ریپازیتوریها
برای اجرای این قابلیتها، Helm از چند مولفه کلیدی استفاده میکند:
- ابزار خط فرمان
helm
که واسط کاربری اصلی برای اجرای تمام دستورات Helm است. - یک مؤلفه سمت سرور بهنام
tiller
که روی کلاستر Kubernetes اجرا میشود، دستورات ارسالی از helm را دریافت کرده و وظیفه پیکربندی و دیپلوی ریلیزهای نرمافزاری را برعهده دارد. - فرمت پکیجینگ Helm که به آن Chart گفته میشود.
- یک ریپازیتوری رسمی و مدیریتشده که شامل chartهای از پیش ساخته شده برای پروژههای متنباز محبوب است.
در ادامه ساختار chartها را با جزئیات بیشتری بررسی خواهیم کرد.
همین حالا به سادگی پروژههای داکر خود را در هاست ابری لیارا دیپلوی کنید!
✅ دامنه رایگان ✅ ترافیک نامحدود ✅ هزینه ساعتی
خرید هاست ابری Docker
chartها در Helm
پکیجهای Helm با نام Chart شناخته میشوند؛ در واقع چارتها مجموعهای از چند فایل پیکربندی YAML به همراه قالبهایی هستند که در نهایت به مانیفستهای قابل فهم برای Kubernetes تبدیل میشوند. ساختار دایرکتوری یک chart پایه معمولا به شکل زیر است:
package-name/
charts/
templates/
Chart.yaml
LICENSE
README.md
requirements.yaml
values.yaml
این فایلها و دایرکتوریهایی که در ساختار یک Helm chart وجود دارند ،هر کدام نقش مشخصی دارند که به آنها میپردازیم:
- charts/: اگر میخواهید وابستگیهای یک chart را بهصورت دستی مدیریت کنید، میتوانید آنها را در این فولدر قرار دهید. با این حال، بهتر است از فایل
requirements.yaml
برای تعریف وابستگیها استفاده کنید تا Helm بتواند آنها را بهصورت داینامیک دریافت و مدیریت کند. - templates/: این فولدر بخش اصلی هر chart محسوب میشود. فایلهای موجود در این فولدر در واقع قالبهایی (template) هستند که از طریق موتور قالبسازی Go به manifestهای واقعی Kubernetes تبدیل میشوند. این templateها با دادههایی از فایل
values.yaml
یا حتی مقادیری که در زمان اجرا به Helm ارسال میکنید ترکیب میشوند. - Chart.yaml: یک فایل متادیتا از نوع YAML است که اطلاعات پایهای مثل نام chart، نسخه، نگهدارنده (maintainer)، وبسایت مرجع و کلمات کلیدی برای جستوجو را شامل میشود.
- LICENSE: اگر chart شما لایسنس مشخصی دارد (مثل MIT، Apache 2.0 یا GPL)، متن آن در این فایل قرار میگیرد.
- README.md: این فایل شامل توضیحات کاربری در مورد نحوه استفاده از chart، پارامترهای قابل تنظیم و مثالهایی برای اجرا است.
- requirements.yaml: در این فایل، وابستگیهای chart تعریف میشوند. Helm بر اساس این فایل میتواند وابستگیها را بهصورت خودکار دانلود و نصب کند.
- values.yaml: در این فایل، مقادیر پیشفرضی که در زمان render شدن templateها استفاده میشوند تعریف میشوند. البته شما میتوانید در زمان نصب یا بروزرسانی chart، این مقادیر را override کنید.
در ادامه به بررسی تنظیمات و پیکربندیهای چارتها خواهیم پرداخت.
برای آشنایی با نحوه راهاندازی کلاستر K3s Kubernetes در اوبونتو 22.04، مقاله زیر را بخوانید.
راهاندازی کلاستر K3s Kubernetes
پیکربندی Chart
هر chart معمولا یک فایل بهنام values.yaml
دارد که کانفیگهای پیشفرض در آن تعریف شده است. بعضی از اپلیکیشنها با تنظیمات پیشفرض اجرا میشوند اما بهتر است، بسته به نیاز پروژهتان آنها را تغییر دهید.
نحوه پیکربندی توسط سازنده chart مشخص میشود. بعضی از مقادیر برای تنظیم بخشهای مربوط به Kubernetes هستند، و برخی دیگر هم مستقیما با پیکربندی اپلیکیشن در ارتباط است.
در ادامه، بخشی از کد فایل values.yaml
را مشاهده میکنید، که نشان میدهد چگونه میتوانید تنظیمات مختلف یک chart را مشخص کرد:
service:
type: ClusterIP
port: 3306
این مقادیر برای پیکربندی resource از نوع Kubernetes Service استفاده میشوند. برای مشاهدهی همهی گزینههای قابل پیکربندی در یک chart، میتوانید از دستور helm inspect values chart-name
استفاده کنید.
برای اعمال تنظیمات دلخواه، کافی است فایل YAML اختصاصیتان را تهیه کرده و هنگام اجرای دستور helm install
از آن استفاده کنید. همچنین میتوانید با استفاده از فلگ --set
، مقدارها را مستقیماً از طریق خط فرمان تغییر دهید. فقط کافی است مقادیری را مشخص کنید که نیاز به تغییر دارند.
هر بار که یک Helm chart با تنظیمات مشخص روی کلاستر نصب میشود، یک ریلیز (Release) جدید ایجاد خواهد شد. در ادامه، به مفهوم Release و نحوه مدیریت آن میپردازیم.

نحوه استفاده از Docker Model Runner برای اجرای بهینه مدل های GenAI بصورت لوکالی را در مقاله زیر بخوانید.
استفاده از Docker Model Runner
مفهوم Release
زمان نصب یک chart، ابزار Helm قالبهای ان chart را با تظیماتی که کاربر مشخص کرده و مقادیر پیشفرض فایل values.yaml
، ترکیب میکند. خروجی این فرآیند، manifestهایی از نوع Kubernetes خواهد بود که از طریق API کلاستر دیپلوی میشوند. نتیجه نهایی این فرآیند، چیزیست که به آن یک ریلیز (Release) میگوییم: یعنی اجرای مشخصی از یک chart با تنظیمات مشخص.
درک مفهوم Release اهمیت زیادی دارد، زیرا ممکن است بخواهید یک اپلیکیشن مشخص را چندبار، با تنظیمات متفاوت، روی کلاستر اجرا کنید. برای مثال، ممکن است به چند نسخهی مختلف از MySQL نیاز داشته باشید که هر کدام پیکربندی خاص خودشان را داشته باشند.
همچنین معمولاً نیاز دارید که نسخههای مختلف یک chart را بهصورت مستقل از هم بهروزرسانی کنید. ممکن است یک اپلیکیشن آمادگی ارتقا به نسخهی جدیدتر MySQL را داشته باشد، اما اپلیکیشن دیگر نداشته باشد. با Helm، میتوانید هر release را جداگانه upgrade کنید.
هنگام ارتقای یک release، ممکن است تغییراتی در خود chart صورت گرفته باشد یا نیاز به اعمال تنظیمات جدیدی باشد. هر بار که یک release بهروزرسانی میشود، Helm یک revision جدید برای آن ایجاد میکند. این قابلیت به شما اجازه میدهد که در صورت بروز مشکل، به نسخههای قبلی برگشته و عملیات را به حالت اولیه بازگردانید.
آموزش نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو را از دست ندهید.
نصب داکر کامپوز
ایجاد chart
اگر نتوانید چارت آمادهای برای نرمافزاری که میخواهید استقرار دهید، پیدا کنید، ممکن است بخواهید خودتان چارت مخصوص به آن را بسازید. با استفاده از دستور helm create chart-name
، میتوانید یک اسکلت از فولدر چارت ایجاد کنید. این دستور یک فولدر جدید به همراه فایلها و دایرکتوریهایی که پیشتر در بخش چارتها به آن اشاره کردیم، ایجاد خواهد کرد.
پس از ایجاد چارت، باید اطلاعات متاداده چارت خود را در فایل Chart.yaml
وارد کنید و فایلهای مانیفست کوبرنتیز خود را در دایرکتوری templates
قرار دهید. پس از آن باید متغیرهای پیکربندی مرتبط از مانیفستهایتان را استخراج کرده و به فایل values.yaml
منتقل کنید.
helm create chart-name
پس از ایجاد دایرکتوری chart، متادادهها را در فایل Chart.yaml وارد کنید:
apiVersion: v2
name: chart-name
description: A Helm chart for Kubernetes
version: 0.1.0
حالا فایلهای مانیفست کوبرنتیز خود را در دایرکتوری templates
قرار دهید.
replicaCount: 1
image:
repository: nginx
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
در نهایت این متغیرها با استفاده از سیستم قالبسازی به قالبهای مانیفست خود وارد کنید.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "chart-name.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
با طی کردن این مراحل، چارت شما به درستی پیکربندی و آماده استفاده خواهد بود.
آموزش گام به گام راه اندازی رجیستری خصوصی داکر در اوبونتو را در مقاله زیر بخوانید.
راه اندازی رجیستری خصوصی داکر
چرا از Helm استفاده کنیم؟
یکی از بزرگترین چالشها وقتی با Kubernetes کار میکنیم، مدیریت حجم زیادی از فایلهای YAML برای تنظیمات مختلف است. این فایلها شامل پیکربندیهایی مثل پادها، سرویسها، تنظیمات RBAC و… هستند که خیلی وقتها میتوانند بسیار پیچیده شوند و مدیریت آنها زمانبر و دشوار باشد. اینجا جاییست که Helm به کمک میآید.
Helm یکی از ابزارهای کاربردی در Kubernetes است که به شما این امکان را میدهد تا مدیریت اپلیکیشنها و سرویسها را بهطور چشمگیری سادهتر کنید. با استفاده از Helm، به جای اینکه مجبور باشید برای هر سرویس یا اپلیکیشن چندین فایل YAML بنویسید، میتوانید تمامی تنظیمات مورد نیاز خود را در قالب یک بسته به نام Helm Chart قرار دهید. این بسته شامل تمام منابعی است که برای استقرار و اجرای اپلیکیشنها در Kubernetes به آن نیاز دارید.
یکی از ویژگیهای برجسته Helm این است که به شما اجازه میدهد تا تنظیمات مختلف را بهراحتی از طریق فایل values.yaml
تغییر دهید. این فایل امکان تزریق مقادیر دلخواه به قالبهای YAML را فراهم میکند و به شما این امکان را میدهد که تغییرات لازم را به راحتی در اپلیکیشنهای خود اعمال کنید.
با استفاده از Helm میتوانید بدون پیچیدگیهای زیاد و با استفاده از یک سیستم ساختارمند، اپلیکیشنها و سرویسها را در Kubernetes مدیریت کنید و دیگر نیازی به نگهداری چندین فایل YAML نخواهید داشت.
برای آسنایی با نحوه کار کانتینرهای داکر (ساخت + مدیریت و حذف کانتینرها)، مقاله زیر را مطالعه کنید.
آموزش کار با کانتینرهای داکر
جمعبندی
Helm یک ابزار بسیار کاربردی است که کار با Kubernetes را بهطور قابل توجهی سادهتر میکند. اگر پیشتر با ابزارهایی مانند apt یا yum در لینوکس کار کردهاید، Helm نیز همان نقش را برای Kubernetes ایفا میکند، با این تفاوت که بهجای نصب نرمافزار، اپلیکیشنها را در Kubernetes مستقر میکند. با استفاده از Helm، میتوانید تمام تنظیمات اپلیکیشنها را در فایلهای سادهای مانند values.yaml وارد کنید و دیگر نیازی به دستوپنجه نرم کردن با فایلهای پیچیده و طولانی YAML نخواهید داشت. این ابزار نهتنها باعث تسریع فرآیندها میشود، بلکه بهراحتی میتوانید اپلیکیشنها را با تنظیمات مختلف نصب، بهروزرسانی یا حتی حذف کنید. برای هر کسی که با Kubernetes کار میکند، Helm یک ابزار نجاتدهنده محسوب میشود:)
در این مقاله، بهطور مقدماتی و ابتدایی این موضوعات را بررسی کردیم. اما اگر به یادگیری جامعتر نیاز دارید، پیشنهاد میکنیم که به مستندات رسمی Helm مراجعه نمایید.
سوالات متداول
Helm چیست؟
Helm یک پکیج منیجر برای Kubernetes است که با آن میتوانید اپلیکیشنها را بر روی کلاسترهای کوبرنتیز نصب، پیکربندی و مدیریت کنید.
Chart در Helm چیست؟
Chart یک بسته نرمافزاری است که شامل تمام فایلهای پیکربندی و تنظیمات لازم برای استقرار یک اپلیکیشن روی Kubernetes میباشد. هر Chart شامل قالبهایی است که بهطور خودکار به فایلهای مانیفست Kubernetes تبدیل میشوند.
چه زمانی باید از Helm استفاده کنیم؟
وقتی که نیاز دارید بهطور منظم اپلیکیشنها را بر روی Kubernetes استقرار دهید و بخواهید تنظیمات آنها را بهراحتی مدیریت و بهروز رسانی کنید.
چطور میتوانم یک Chart را حذف کنم؟
برای حذف یک Chart، از دستور helm uninstall استفاده کنید که باعث حذف تمام منابع ایجاد شده توسط آن Chart خواهد شد.