توی این قسمت میریم به سراغ هلم (Helm) که یکی از پراستفادهترین و کاربردیترین ابزارهایی هست که در کنار کوبرنتیز میاد و ازش برای راهاندازی برنامههای مختلف استفاده میکنند. کلا با استفاده از Helm به راحتی میتونیم ابزارها و سرویسهایی که میخواهیم رو روی کوبرنتیز راهاندازی و مدیریت کنیم.
خب یه مروری کنیم پستهای قبلی رو:
- دواپس چیه و چرا لازمه؟ اینجا در مورد دواپس و ضرورت استفاده از آن صحبت کردم.
- مسیر شغلی دواپس اینجا در مورد مسیر شغلی دواپس و موارد پیرامون آن صحبت کردم.
- چطور اپلیکیشن مناسب کلاد آماده کنیم؟ و اینجا توضیح دادم که چطور میتونیم یه اپلیکیشن مناسب کلاد توسعه بدیم.
- چه عمقی از لینوکس برای دواپس لازمه؟ و اینجا توضیح دادم که کدوم موارد لینوکس برای دواپس الزامی هست که اول سراغ اون موارد بریم.
- خودکارش کن، مشکلاتت حل میشه 🙂 در اینجا در مورد اتومیشن و اینکه انسیبل چیه و چه کمکی به ما میکنه صحبت کردم.
- در مسیر دواپس اینبار اجزای اصلی انسیبل تو این پست اجزای انسیبل رو معرفی کردم و آنها را شرح دادم.
- در مسیر دواپس به داکر رسیدم. (قسمت اول) تو این پست داکر رو شروع کردیم و اونو معرفی کردیم.
- در مسیر دواپس اینبار: پشت داکر چه خبره؟ (قسمت دوم) توی این پست در مورد تکنولوژی هایی که داکر ازشون استفاده میکنه توضیح دادیم.
- در مسیر دواپس اینبار: والیوم و نتورک داکر (قسمت سوم) توی این پست در مورد شبکه توی داکر و اینکه چطوری دیتای کانتینر رو میتونیم نگه داریم توضیح دادیم.
- در مسیر دواپس اینبار: داکر فایل ( قسمت چهارم ) توی این پست در مورد اینکه چطور با استفاده از داکر اپلیکیشن مون رو بیلد کنیم و ایمیج بسازیم توضیح دادیم.
- در مسیر دواپس اینبار: کامپوز فایل و داکر کامپوز (قسمت پنجم) توی این پست در مورد اینکه چطور روند دیپلوی کردن سرویسهامون و کانفیگ اونها رو به صورت کد داشته باشیم توضیح دادیم.
- در مسیر دواپس: اینبار داکر سوآرم (قسمت ششم) توی این پست در مورد داکر سوآرم و اینکه چطوری به کمک داکر چنتا سرور رو کلاستر کنیم، توضیح دادیم.
- در مسیر دواپس اینبار: دور و بری های داکر (قسمت هفتم) توی این پست در مورد ابزارهای جانبی که بهمون توی کار با داکر کمک میکنن توضیح دادیم.
- در مسیر دواپس: جمع بندی داکر (قسمت هشتم) توی این پست در مورد امنیت داکر توضیح دادیم و در آخر هم یه سری از بست پرکتیسها و تجربیات خودم رو گفتم.
- تست نوشتن و شروع مسیر CI/CD (قسمت اول) توی این پست انواع تست رو بررسی کردیم و با ابزارهای CI/CD آشنا شدیم و یه مقایسه بین گیتلب و جنکینز داشتیم.
- در مسیر CI/CD گیت رو بررسی میکنیم (قسمت دوم) توی این پست قبل ورود به گیتلب نیاز بود که گیت و ورژن کنترل سیستم ها رو یه بررسی کنیم.
- در مسیر CI/CD شناخت گیتلب (قسمت سوم) توی این پست اجزای گیتلب رو بررسی کردیم و با کامپوننتهای مختلفی که داره بیشتر آشنا شدیم.
- در مسیر CI/CD پایپلاین و رانر گیتلب (قسمت چهارم) توی این پست پایپلاین و رانر گیتلب رو بررسی کردیم.
- در مسیر CI/CD وریبل، گیتآپس و جمعبندی (قسمت پنجم) توی این پست وریبلهای گیتلب رو بررسی کردیم و یه معرفی کوتاه از گیتآپس و آتودواپس کردیم و در انتها یه مقدار تجربههای خودم رو در گیتلب باهاتون به اشتراک گذاشتم.
- مسیر Observability (قسمت اول) توی این پست معرفی observability رو داشتیم و مقایسه اش با مانیتورینگ و یه توضیح مختصر هم در مورد اپنتلهمتری دادیم.
- در مسیر Observability، الک (قسمت دوم) توی این پست استک قدرتمند ELK رو بررسی کردیم.
- در مسیر Observability، جمع بندی استک الک (قسمت سوم) توی این پست بقیه کامپوننتهای استک الک رو بررسی کردیم و fluentd و fluentbit رو مقایسه کردیم و نهایتا یه معرفی هم روی opensearch داشتیم.
- در مسیر Observability، استک پرومتئوس (قسمت چهارم) توی این پست یه معرفی اولیه داشتیم روی استک پرومتئوس.
- در مسیر Observability، استک پرومتئوس (قسمت پنجم) توی این پست یه مقدار کامپوننت های استک پرومتئوس رو بیشتر بررسی کردیم.
- در مسیر Observability، استک ویکتوریا (قسمت ششم) توی این پست استک ویکتوریا رو معرفی کردیم و سعی کردیم با پرومتئوس مقایسهاش کنیم.
- در مسیر Observability، میمیر (قسمت هفتم) توی این پست در مورد ابزار میمیر از ابزارهای گرافانا توضیح دادیم و کاربردش رو بررسی کردیم.
- در مسیر Observability، لوکی (قسمت هشتم) توی این پست در مورد ابزار گرافانا برای مدیریت لاگ یعنی لوکی توضیح دادیم و آخرشم یه معرفی کوتاه رو graylog داشتیم.
- در مسیر Observability، تمپو (قسمت نهم) توی این پست در مورد تریسینگ توضیح دادیم و گرافانا تمپو رو بررسی کردیم و یه معرفی کوتاه روی Jaeger داشتیم
- در مسیر Observability، گرافانا (قسمت دهم) توی این پست در مورد گرافانا و HA کردنش و همچنین یه سری از ابزارهاش مثل alloy , incident, on-call توضیح دادیم.
- آغاز مسیر کوبر (قسمت اول) تو این قدم به معرفی ابزارهای ارکستریشن پرداختیم و مدارک کوبرنتیز رو بررسی کردیم.
- کوبر سینگل ( قسمت دوم ) توی این قدم در مورد kubectl , kubeconfig توضیح دادیم و تعدادی ابزار رو معرفی کردیم که به کمک اونها میتونیم یک کوبرنتیز دمهدستی واسه تستهامون داشته باشیم.
- کامپوننتهای کوبر ( قسمت سوم ) توی این پست کامپوننتهای مختلف کوبرنتیز رو بررسی کردیم و اجزای نودهای مستر و ورکر رو دونه دونه بررسی کردیم و توضیح دادیم.
- پادها و مدیریت اونها در کوبرنتیز (قسمت چهارم) توی این پست در مورد پاد توی کوبرنتیز توضیح دادیم و موارد مربوط به اون رو بررسی کردیم.
- ورکلودهای کوبر و مدیریت منابع کوبر (قسمت پنجم) توی این پست در مورد namespaceها توی کوبر توضیح دادیم و انواع ورکلود کوبر رو بررسی کردیم.
- اگه لازم شد کوبر خودش گنده میشه! ( قسمت ششم ) توی این پست در مورد سه نوع ورکلود مرتبط با scaling به صورت خودکار در کوبرنتیز توضیح دادیم.
- نتورک کوبر (قسمت هفتم) توی این قسمت انواع سرویس توی کوبرنتیز رو بررسی کردیم و در مورد مفاهیم اینگرس و نتورک پالیسی توضیح دادیم.
- استورج کوبرنتیز (قسمت هشتم) توی این قسمت در مورد انواع استورج توی کوبرنتیز توضیح دادیم و مفاهیم PV و PVC و Storage Class رو بررسی کردیم.
- پراب، ریکوئست و لیمیت (قسمت نهم) توی این قسمت موارد مربوط به محدود کردن منابع کانتینر توی کوبرنتیز رو بررسی کردیم و در مورد انواع probe ها توی کوبرنتیز توضیح دادیم.
- پاد تو نود (قسمت دهم) توی این قسمت درمورد فرآیند انتقال پاد به نود مناسب مفاهیم پیشرفتهتری مثل affinity و anti-affinity و taint و toleration رو بررسی کردیم.
- اولویت پاد و امنیت (قسمت یازدهم) توی این قسمت در مورد تعیین اولویت برای پادها و جنبههای مختلف امنیت در کوبرنتیز توضیح دادیم.
- کنترل دسترسی به کوبر (قسمت دوازدهم) توی این قسمت در مورد مراحل دسترسی به api کوبرنتیز صحبت کردیم و بعدش مفاهیمی مثل سرویس اکانت رو توضیح دادیم.
- دیزاین کلاستر (قسمت سیزدهم) توی این قسمت در مورد طراحی و دیزاین یک کلاستر و روشهای مختلفی که داره توضیح دادیم و همچنین تفاوت روشهای مختلف تقسیم منابع در کلاسترها را بررسی کردیم.
- مالتی تننسی در کوبر (قسمت چهاردهم) توی این قسمت چالشهای مربوط به داشتن چند مستاجر بر روی کلاستر کوبرنتیز توضیح دادیم.
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
هلم (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 آشنا بشیم و ویژگیهای اون رو بشناسیم و کار باهاش رو یاد بگیریم.
اگر هنوز از هلم استفاده نمیکنید، حتماً اونو امتحان کنید!
تو ادامهی مسیرمون بیشتر با موارد مربوط به کوبرنتیز آشنا میشیم.
مراقب خودتون باشید. 🌹🐳🌹