enginedevops
enginedevops
خواندن ۷ دقیقه·۲ سال پیش

Helm چیست؟

معرفی 6 دقیقه ای HELM

ساده سازی مدیریت اپلیکیشن Kubernetes

“چرا به آن نیاز دارم”

شما می‌توانید وابستگی‌ها و نرم‌افزارهای اختصاصی را روی کلاستر K8S خود با یک روش ساده نصب کنید:

helm install stable/mysql

، صدها نصب در دسترس مانند این وجود دارد، اما می‌توانید این کار را با محصول/خدمات خود نیز انجام دهید!

HELM چیست؟

سکاندار یا سکاندار شخصی است که کشتی، قایق بادبانی، زیردریایی، انواع دیگر کشتی های دریایی یا فضاپیما را هدایت می کند. – —  ویکیپدیا

«مدیر بسته برای کوبرنتیز ; Helm بهترین راه برای یافتن، اشتراک گذاری و استفاده از نرم افزار ساخته شده برای Kubernetes است.” — Helm.sh

چرا ما به Helm  نیاز داریم؟

سوالی که چندین بار از خودم پرسیدم و سعی کردم بفهمم چگونه این نصب کننده جادویی زندگی K8S من را بهتر می کند. خوب، Helm به شما امکان می‌دهد چرخه عمر برنامه‌ها، هم محصولات شخص ثالث و هم محصولات خودتان را واکشی، استقرار و مدیریت کنید. دیگر نیازی به نگهداری گروه‌های تصادفی از فایل‌های YAML (یا موارد بسیار طولانی) که پادها، مجموعه‌های تکراری، سرویس‌ها، تنظیمات RBAC و غیره را توصیف می‌کنند، وجود ندارد. با فرمان، ساختار و قراردادی برای یک بسته نرم‌افزاری وجود دارد که لایه‌ای از قالب‌های YAML و دیگری را تعریف می‌کند. لایه ای که قالب هایی templates  به نام مقادیر values را تغییر می دهد. مقادیر values به قالب‌ها templates تزریق می‌شوند، بنابراین امکان جداسازی پیکربندی را فراهم می‌کنند و مشخص می‌کنند که در آن تغییرات مجاز هستند. کل این بسته یک Helm Chart. نامیده می شود. اساساً شما بسته‌های برنامه‌ای ساخت‌یافته ایجاد می‌کنید که شامل همه چیزهایی است که برای اجرا در یک کلاستر  Kubernetes نیاز دارند. از جمله وابستگی های dependencies مورد نیاز برنامه.

Helm یک CLI است, Tiller یک backend آن است

از نظر عملی، Helm یک ابزار CLI است که با سرور پشتیبان خود به نام “Tiller” تعامل دارد. Tiller معمولاً با ارسال helm init نصب می شود و درمحیط  kube-system  ایجاد میشود. این مسئول استقرار نمودارهای درخواست شده توسط helm است. هنگامی که نمودار نصب می شود، Tiller یک “Release” ایجاد می کند و شروع به ردیابی آن برای تغییرات می کند. به این ترتیب Helm نه تنها در نصب شرکت می کند، بلکه یک ابزار واقعی استقرار است که چرخه عمر برنامه ها را در یک کلاستر با استفاده از انتشار نمودارها و ویرایش های آنها مدیریت می کند.

مفاهیم Helm  | Chart

Helm از Chart ها برای بسته بندی تمام اجزای مورد نیاز K8S برای یک برنامه کاربردی برای استقرار، اجرا و مقیاس استفاده می کند. همچنین جایی است که وابستگی ها تعریف می شوند و پیکربندی ها به روز می شوند و حفظ می شوند.  فقط یک فایل با نام  Chart.yaml باید وجود داشته باشد.

می‌تواند به‌صورت اختیاری (و به‌طور پیش‌فرض اگر از helm create استفاده می‌کنید) چند مؤلفه دیگر داشته باشد که به‌زودی در مورد آنها توضیح خواهم داد، اما ابتدا، در اینجا یک ساختار نمودار معمولی به نظر می‌رسد:

?

در این قسمت، بیایید آن را “web-ui” بنامیم، الگوهایی از یک سرویس و یک replicaset وجود دارد که پس ازhelm install ، با استفاده از values.yaml ایجاد می شود که در آخر قابل مشاهده است. همچنین، نمودار web-ui به Nginx نیاز دارد تا اجرا شود، زیرا nginx یک نمودار فرعی در دایرکتوری chart است و requires.yaml فایلی است که نیاز واقعی را توصیف می‌کند. فایل lock که همچنین بخشی از بسته است، زمانی ایجاد می‌شود که فرمان helm dependency update ، الزامات را نصب می‌کند.

یک Chart.yaml شرحی از package است و در واقع تنها فایل مورد نیاز در آن، تنها سه ورودی مورد نیاز وجود دارد:

apiVersion, name version

در اینجا نمونه ای از آنچه به نظر می رسد آورده شده است: (شما می توانید لیست کامل گزینه ها و ورودی های یک نمودار را در اینجا پیدا کنید.)

?

Templates یک زیرشاخه اختیاری در Chart است که اجزای K8S آن را ترکیب می کند، به عنوان مثال.

Service, ReplicaSet, Deployment etc,

بیایید نگاهی به یک نمونه قالب جزئی بیندازیم:

?
که با زبان Go ایجاد شده است.

Values در values.yaml شرح داده شده است

فایلی که لزوماً یک ساختار yaml است که مقادیری را برای مطابقت با الگوها در خود نگه می دارد. با در نظر گرفتن الگوی بالا، یک فایل مقادیر منطبق به این صورت خواهد بود:

?

Subcharts همچنین به نام dependencies ، نمودارهای مورد نیاز برای نمودار فعلی هستند. می‌توانید آن را به‌عنوان روش دیگری برای بسته‌بندی برنامه‌ها در نظر بگیرید، به طوری که اگر من برای اجرا به حافظه پنهان Redis نیاز دارد، این راه دیگری برای تنظیم آن است. روش دیگر استفاده از نمودارهای فرعی در نظر گرفتن آن به عنوان مکانیزم ارثی است که امکان واکشی نمودار استاندارد با الگوها را فراهم می کند و از آن به عنوان یک نمودار فرعی در  parent charts  متعدد استفاده می کند که مقادیر را ارائه می دهد.

مفاهیم Helm | Repository

مخازن محل نگهداری و نگهداری نمودارهای فرمان هستند. در اصل، اینها مجموعه ای از الگوها و مقادیر پیکربندی هستند که به عنوان کد ذخیره می شوند (گاهی اوقات به عنوان یک فایل .tar.gz بسته بندی می شوند).

زمانیکه دستور
helm install stable/redis

اجرا می کنید .

به طور پیش‌فرض فرمان به مخزن Helm/Charts در GitHub می‌رسد و در آن جستجو می‌کند.

یک مثال عالی برای استفاده از مخزن های مختلف، نمودار ElasticSearch Elastic است که قبلاً توسط شرکت در مخزن Helm/Charts نگهداری می شد. Elastic تصمیم گرفته است که محصول خود را به انبار Helm خود منتقل کند و برای دریافت آخرین نمودار رسمی، اکنون می توانید مخزن خود را به Helm اضافه کنید:

helm repo add elastic https://helm.elastic.co

و دستور زیر را اجرا نمایید :

helm install –name elasticsearch elastic/elasticsearch

مفاهیم Helm | Release

انتشار را به عنوان مکانیزمی برای ردیابی برنامه های نصب شده در یک کلاستر K8S در نظر بگیرید. هنگامی که یک برنامه توسط Helm نصب می شود، یک نسخه در حال ایجاد است. می‌توانید نصب‌های مختلفی از یک محصول ایجاد کنید،

نسخه‌ها را می‌توان با helm ls ردیابی کرد، هر کدام یک “revision” دارند که اصطلاحات نسخه‌سازی Helm است. اگر نسخه خاصی به روز شود، به عنوان مثال، حافظه بیشتری به نسخه Redis اضافه شود، “revision” افزایش می یابد. Helm امکان بازگشت به یک ویرایش خاص revision  را فراهم می کند و آن را عملاً مدیر استقرار و کنترل کننده وضعیت تولید می کند.

TLS

Tiller و Helm به راهی برای برقراری ارتباط نیاز دارند. به طور پیش فرض، این اتصال بسیار امن نیست، به این معنی که اگر یکی از نقاط پایانی در معرض خطر قرار گیرد یا برای یک مؤلفه در معرض خطر قابل دسترسی باشد، ترافیک قابل خواندن و تجزیه و تحلیل است. فراتر از بحث در مورد سطح حمله واقعی که ارتباط بین سیستم‌ها را ایمن نمی‌کند، می‌توانیم به راحتی یک اتصال TLS امن با استفاده از یک گواهی تولید خودکار ایجاد کنیم. برای انجام این کار، در اینجا یک اسکریپت وجود دارد که شما را در طول فرآیند هدایت می کند و می تواند در هر جایی پیاده سازی شود.

مشارکت ها Contributions

ممکن است خودتان (مانند من) با یک نیاز جدید برای یک توانایی یا ویژگی از یک نمودار رسمی تحت github.com/helm/charts مواجه شوید، ممکن است به خوبی یک اشکال باشد . از آنجایی که Helm و نمودارهای آن هر دو پروژه های منبع باز با صدها مشارکت کننده هستند، به شدت فعال هستند. تغییراتی را در نمودار مورد نظر ایجاد کنید و با مشارکت یک روابط عمومی باز کنید، اگر همه الزامات انجام شده باشد و به آنها رسیدگی شده باشد، تیم در عرض چند روز این تغییر را تایید خواهد کرد.

در حالی که این روند کاملاً سخت است (و باید سپاسگزار باشیم)، تغییرات به سرعت در حال بررسی و تایید یا رد شدن هستند. درباره مشارکت در پروژه بیشتر بخوانید؛ توجه داشته باشید که اگر فقط تغییرات کوچکی ایجاد می کنید، بیشتر سند مربوطه نیست زیرا الزامات نمودارهای جدید را مشخص می کند.

منبع :

https://medium.com/prodopsio/a-6-minute-introduction-to-helm-ab5949bf425

https://enginedevops.com/2022/06/24/what-is-helm/

helmdevopکوبرنتیزمدیریت کوبرنتیزدواپز
شاید از این پست‌ها خوشتان بیاید