توی این قسمت میریم به سراغ هلم (Helm) که یکی از پراستفادهترین و کاربردیترین ابزارهایی هست که در کنار کوبرنتیز میاد و ازش برای راهاندازی برنامههای مختلف استفاده میکنند. کلا با استفاده از Helm به راحتی میتونیم ابزارها و سرویسهایی که میخواهیم رو روی کوبرنتیز راهاندازی و مدیریت کنیم.
هلم (Helm):
در دنیای پویا و مقیاسپذیر ارکستراسیون کانتینرها، Kubernetes به عنوان یک فناوری اساسی برای استقرار و مدیریت برنامههای کانتینری در مقیاس بزرگ ظهور کرده است. با این حال، مدیریت منابع Kubernetes با رشد اندازه و پیچیدگی برنامهها میتواند چالشبرانگیز شود. اینجاست که هلم (Helm)، مدیر بسته Kubernetes، با آوردن سادگی و کارایی به مدیریت برنامههای Kubernetes وارد عمل میشود. یکی از ویژگیهای قدرتمند هلم، استفاده از چارتها است. در این بخش به بررسی چارتهای هلم، دلیل نیاز به آنها در Kubernetes و نحوه استفاده موثر از آنها میپردازیم.
ابزار Kubernetes به استاندارد اصلی برای ارکستراسیون و استقرار کانتینرها تبدیل شده است. با افزایش پیچیدگی برنامههای Kubernetes، مدیریت دستی آنها میتواند به یک کار دشوار تبدیل شود. در اینجا، هلم (Helm)، یک مدیر بسته برای Kubernetes، وارد عمل میشود.
هلم (Helm) یک پکیج منیجر برای Kubernetes است که مدیریت، استقرار و بهروزرسانی برنامههای اجراشده روی کلاستر Kubernetes شما را سادهتر میکند.
هلم به شما کمک میکند برنامههای Kubernetes را با ارائه روشی برای تعریف، نصب و بهروزرسانی برنامههای پیچیده Kubernetes مدیریت کنید. اگر بخوام یه مثال بزنم که به ذهن نزدیک بشه میتونیم پکیج منیجر لینوکس رو مثال بزنیم. شما با استفاده از پکیج منیجر میتونید سرچ، نصب، کانفیگ و دیلیت کنید هر پکیجی رو که میخواهید اینجا هم با استفاده از Helm میتونید در مورد اپلیکیشنها و سرویسهای خودتون به این صورت رفتار کنید.

در هستهی اصلی، هلم از چارتها استفاده میکند که بستههایی از منابع از پیش پیکربندیشده Kubernetes هستند. این چارتها برای تعریف، نصب و مدیریت برنامههای پیچیده Kubernetes استفاده میشوند.
چارتهای هلم میتوانند هر چیزی را از یک برنامه وب ساده تا یک سیستم توزیعشده پیچیده تعریف کنند.
هلم مدیریت برنامههای Kubernetes را با استفاده از چارتها ساده میکند. چارتها بستههایی از منابع از پیش پیکربندیشده Kubernetes هستند. میتوانید چارتهای هلم را شبیه به قالبهایی برای برنامههای Kubernetes در نظر بگیرید که قابلیت سفارشیسازی بر اساس نیاز شما را دارند.

ساختار چارت هلم
- مدیریت بستهها: نصب، بهروزرسانی و مدیریت برنامههای Kubernetes.
- مدیریت نسخهها: مدیریت نسخههای مختلف از برنامهها.
- مدیریت پیکربندیها: سفارشیسازی برنامهها با فایلهای مقادیر (Values Files).
یک چارت هلم شامل چند فایل است که منابع Kubernetes را تعریف میکنند. این فایلها شامل موارد زیر هستند:
- Chart.yaml:
شامل متادیتا دربارهی چارت، مانند نام و نسخه آن.
- values.yaml:
شامل مقادیر پیکربندی برای چارت. این مقادیر به ازای دیپلویمنتهای مختلف میتواند متفاوت باشد که به ما این امکان رو میدهد که به راحتی سرویسها و اپلیکیشنهای خودمون رو در محیطهای مختلف متفاوت راهاندازی و مدیریت کنیم.
- templates/:
شامل قالبهای منابع Kubernetes که برای ایجاد منابع واقعی در کلاستر استفاده میشوند. این مانیفستها طوری ایجاد شدند که مقادیر آنها با استفاده از Value فایلها تغییر میکنند.

چرا به چارتهای هلم در Kubernetes نیاز داریم؟
سادهسازی فرایند استقرار
مانفیستهای Kubernetes که در قالب YAML یا JSON نوشته میشوند، نحوه اجرای برنامهها و تعامل آنها با سایر سرویسها را توصیف میکنند. با رشد برنامهها، این مانفیستها پیچیدهتر و مدیریت آنها دشوارتر میشود. چارتهای هلم این پیچیدگی را با بستهبندی تمام جزئیات ضروری در یک بسته کاهش میدهند و استقرار را قابل مدیریتتر و کمتر مستعد خطا میکنند. به ما این امکان رو میدهند که بتونیم به صورت خودکار سرویسها و اپلیکیشنهامون رو روی کلاستر پیادهسازی کنیم.
کنترل نسخه و بازگشت به نسخه قبلی
چارتهای هلم از نسخهبندی پشتیبانی میکنند، که به توسعهدهندگان اجازه میدهد نسخههای مختلف استقرار برنامهها و تغییرات پیکربندی را مدیریت کنند. این ویژگی امکان بازگشت آسان به نسخههای قبلی را در صورت بروز مشکل فراهم میکند و قابلیت اطمینان استقرار را افزایش میدهد. کلا قابلیت نسخهبندی خیلی به ما تو مدیریت سرویسها و اپلیکیشنهامون کمک میکنه.
قابلیت استفاده مجدد و اشتراکگذاری
با استفاده از چارتهای هلم، پیکربندیهای استقرار برنامهها میتوانند در پروژهها یا تیمهای مختلف مجدداً استفاده شوند، که این امر بهبود بهترین روشها و صرفهجویی در زمان را ممکن میسازد. همچنین چارتها را میتوان از طریق مخازن چارت هلم به اشتراک گذاشت و همکاری و کارایی را افزایش داد.
سفارشیسازی از طریق فایل values.yaml
چارتهای هلم از یک فایل values.yaml استفاده میکنند که امکان سفارشیسازی آسان استقرار را بدون تغییر در خود چارت فراهم میسازد. به این ترتیب، میتوان از یک چارت برای استقرار برنامهها در محیطهای مختلف (develop و test و production) تنها با تغییر مقادیر استفاده کرد.

ویژگیهای هلم
استقرار سریع و آسان
با استفاده از چارتهای هلم، میتوانید به سرعت برنامههای پیچیده Kubernetes را مستقر کنید و خیلی خوب این کار رو تکرار، قابل انتقال و بهبود بدید.
مدیریت بهروزرسانیها و بازگشتها
- بهروزرسانی یک برنامه به نسخه جدید تنها با بهروزرسانی چارت و اجرای دستور
helm upgradeامکانپذیر است. - اگر مشکلی پیش بیاید، میتوانید به راحتی به نسخه قبلی با دستور
helm rollbackبازگردید.
سفارشیسازی بالا
- میتوانید مقادیر پیکربندی خود را در فایل
values.yamlتعریف کنید. - همچنین میتوانید این مقادیر را در زمان نصب با دستور
helm installبازنویسی کنید.
مخزن چارتهای از پیش ساختهشده
- هلم دارای مخزن مرکزی از چارتهای آماده است که میتوانید از آنها برای استقرار سریع برنامههای محبوب مانند WordPress، MySQL و Prometheus استفاده کنید. artifacthub.io جایی هست که مخزن پابلیک برای helm chart هاست و میتونید چارتهای پابلیک رو از اونجا بردارید و استفاده کنید. البته معمولا شرکتها و سازمانها برای خودشون ریپوزیتوری helm به صورت خصوصی و عمومی دارند.

کار با هلم
گام ۱: نصب هلم
ابتدا باید هلم را روی سیستم خود نصب کنید. فایلهای باینری هلم برای macOS، لینوکس و ویندوز در دسترس هستند.
روی macOS:
brew install helm
روی لینوکس:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
روی ویندوز:
فایل باینری هلم را از صفحه رسمی انتشارهای GitHub دانلود کرده و آن را به مسیر PATH خود اضافه کنید.
تأیید نصب:
helm version
گام ۲: اضافه کردن مخزن هلم
هلم از مخازن برای توزیع چارتها استفاده میکند. مخزن پیشفرض هلم https://charts.helm.sh/stable است.
اضافه کردن مخزن Stable:
helm repo add stable https://charts.helm.sh/stable
helm repo update
لیست مخازن موجود:
helm repo list
گام ۳: جستجو برای چارتهای هلم
میتوانید با استفاده از دستور helm search چارتهای موجود در مخزن آرتیفکهاب را جستجو کنید.
مثال: جستجوی چارت MySQL:
helm search repo mysql
گام ۴: نصب یک چارت هلم
برای نصب یک چارت هلم از دستور helm install استفاده کنید. مثال:
helm install [RELEASE_NAME] [CHART_NAME]
[RELEASE_NAME]:
نام یکتایی که برای استقرار خود تعیین میکنید.
[CHART_NAME]:
نام چارت، میتواند از یک مخزن یا یک دایرکتوری محلی باشد.
مثال: نصب چارت MySQL:
helm install my-mysql stable/mysql
بررسی وضعیت انتشار:
helm status my-mysql
لیست تمام انتشارها:
helm list
گام ۵: سفارشیسازی چارتهای هلم
هلم امکان سفارشیسازی چارتها را با استفاده از فایلهای مقادیر فراهم میکند. میتوانید مقادیر پیشفرض یک چارت را تغییر دهید.
دریافت مقادیر پیشفرض:
helm show values stable/mysql > my-values.yaml
ویرایش فایل my-values.yaml برای سفارشیسازی تنظیمات.
نصب چارت با استفاده از فایل مقادیر سفارشی:
helm install my-mysql -f my-values.yaml stable/mysql
گام ۶: بهروزرسانی انتشار
برای بهروزرسانی یک انتشار، فایل مقادیر را تغییر داده و از دستور helm upgrade استفاده کنید.
مثال:
- ویرایش فایل
my-values.yaml. - بهروزرسانی انتشار:
helm upgrade my-mysql -f my-values.yaml stable/mysql
گام ۷: حذف یک انتشار
برای حذف یک انتشار از دستور helm uninstall استفاده کنید.
مثال: حذف انتشار MySQL:
helm uninstall my-mysql
گام ۸: ایجاد چارت سفارشی هلم
برای ایجاد یک چارت سفارشی، از دستور helm create استفاده کنید. این دستور ساختار اولیه یک چارت را ایجاد میکند.
ایجاد چارت جدید:
helm create my-chart
ساختار ایجاد شده:
my-chart/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
└── templates/tests/
اضافه کردن مانیفستهای Kubernetes به پوشه templates/.
گام ۹: استقرار چارت سفارشی
بستهبندی چارت:
helm package my-chart
نصب چارت:
helm install my-release my-chart-0.1.0.tgz
گام ۱۰: هوکهای هلم
هوکهای هلم امکان اجرای کارها در نقاط مشخصی از چرخه عمر انتشار را فراهم میکنند. به عنوان مثال، میتوانید یک Job پیش از نصب ایجاد کنید.
مثال هوک:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-pre-install"
labels:
app: "{{ .Release.Name }}"
annotations:
"helm.sh/hook": pre-install
spec:
template:
spec:
containers:
- name: pre-install-job
image: busybox
command: ['sh', '-c', 'echo Hello from the pre-install hook!']
restartPolicy: Never
هلم ابزاری قدرتمند است که مدیریت برنامههای Kubernetes را ساده میکند. با استفاده از چارتهای هلم میتوانید به راحتی برنامهها را مستقر، مدیریت و بهروزرسانی کنید. این راهنما اصول پایهای هلم را پوشش داد و شما را برای استفاده از قابلیتهای پیشرفتهتر آن آماده میکند.
مثالی از یک چارت ساده هلم برای یک برنامه وب
۱. ایجاد چارت جدید
ابتدا یک دایرکتوری جدید برای چارت خود ایجاد کنید:
mkdir my-web-app-chart
cd my-web-app-chart
۲. ایجاد فایل Chart.yaml
یک فایل به نام Chart.yaml ایجاد کنید و محتویات زیر را اضافه کنید:
apiVersion: v2
name: my-web-app
description: A Helm chart for a simple web application
version: 1.0.0
این فایل متادیتای پایهای دربارهی چارت، مانند نام، توضیحات و نسخه آن را تعریف میکند.
۳. ایجاد فایل values.yaml
یک فایل به نام values.yaml با محتویات زیر ایجاد کنید:
replicaCount: 3
image:
repository: my-web-app
tag: latest
pullPolicy: IfNotPresent
service:
name: my-web-app
type: ClusterIP
port: 80
ingress:
enabled: false
این فایل مقادیر پیکربندی برای چارت را تعریف میکند، از جمله تعداد نسخهها (replicas)، تصویر Docker و تنظیمات سرویس.
۴. تعریف Deployment
یک دایرکتوری به نام templates ایجاد کرده و یک فایل deployment.yaml در آن با محتویات زیر ایجاد کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 80
این فایل استقرار Kubernetes برای برنامه وب شما را تعریف میکند.
۵. تعریف Service
یک فایل دیگر به نام service.yaml در دایرکتوری templates ایجاد کنید و محتویات زیر را اضافه کنید:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.service.name }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
selector:
app: {{ .Chart.Name }}
این فایل سرویس Kubernetes برای برنامه وب شما را تعریف میکند.
۶. بستهبندی چارت
چارت خود را با اجرای دستور زیر بستهبندی کنید:
bashCopy codehelm package .
این دستور فایل my-web-app-1.0.0.tgz را ایجاد میکند.
۷. نصب چارت
چارت را روی یک کلاستر Kubernetes با دستور زیر نصب کنید:
bashCopy codehelm install my-release my-web-app-1.0.0.tgz
توی این بلاگ پست سعی کردیم یه مقدار به Helm آشنا بشیم و ویژگیهای اون رو بشناسیم و کار باهاش رو یاد بگیریم.
اگر هنوز از هلم استفاده نمیکنید، حتماً اونو امتحان کنید!
تو ادامهی مسیرمون بیشتر با موارد مربوط به کوبرنتیز آشنا میشیم.
مراقب خودتون باشید. 🌹🐳🌹
ورکلودهای کوبر و مدیریت منابع کوبر (قسمت پنجم) توی این پست در مورد namespaceها توی کوبر توضیح دادیم و انواع ورکلود کوبر رو بررسی کردیم.
اگه لازم شد کوبر خودش گنده میشه! ( قسمت ششم ) توی این پست در مورد سه نوع ورکلود مرتبط با scaling به صورت خودکار در کوبرنتیز توضیح دادیم.
نتورک کوبر (قسمت هفتم) توی این قسمت انواع سرویس توی کوبرنتیز رو بررسی کردیم و در مورد مفاهیم اینگرس و نتورک پالیسی توضیح دادیم.
استورج کوبرنتیز (قسمت هشتم) توی این قسمت در مورد انواع استورج توی کوبرنتیز توضیح دادیم و مفاهیم PV و PVC و Storage Class رو بررسی کردیم.



