آیا تهیه خوشه Kubernetes آسان و راحت است؟ اعلام اپراتور افزونه

آیا تهیه خوشه Kubernetes آسان و راحت است؟ اعلام اپراتور افزونه

بعد از اپراتور پوسته ما برادر بزرگترش را معرفی می کنیم - اپراتور افزونه. این یک پروژه منبع باز است که برای نصب اجزای سیستم در یک خوشه Kubernetes استفاده می شود که می توان آن را افزونه نامید.

اصلاً چرا اضافه شده است؟

بر کسی پوشیده نیست که Kubernetes یک محصول همه کاره آماده نیست و برای ایجاد یک خوشه "بزرگسال" به افزودنی های مختلفی نیاز دارید. اپراتور افزونه به شما در نصب، پیکربندی و به روز نگه داشتن این افزونه ها کمک می کند.

نیاز به اجزای اضافی در خوشه در فاش شده است گزارش همکاران دریوشا. به طور خلاصه، وضعیت Kubernetes در حال حاضر به گونه ای است که برای نصب ساده "play around" می توانید با اجزای خارج از جعبه کار کنید، برای توسعه دهندگان و آزمایش می توانید Ingress را اضافه کنید، اما برای نصب کامل، در مورد آن می‌توانید بگویید «تولید شما آماده است»، باید با ده‌ها افزونه مختلف اضافه کنید: چیزی برای نظارت، چیزی برای ثبت‌نام، ورودی و مدیریت گواهی را فراموش نکنید، گروه‌هایی از گره‌ها را انتخاب کنید، سیاست‌های شبکه را اضافه کنید، فصل با تنظیمات sysctl و pod autoscaler...

آیا تهیه خوشه Kubernetes آسان و راحت است؟ اعلام اپراتور افزونه

ویژگی های کار با آنها چیست؟

همانطور که تمرین نشان می دهد، موضوع به یک نصب محدود نمی شود. برای کار راحت با کلاستر، افزونه‌ها باید به‌روزرسانی شوند، غیرفعال شوند (از خوشه حذف شوند)، و قبل از نصب آن‌ها در خوشه تولید، برخی از آنها را آزمایش کنید.

بنابراین، شاید Ansible در اینجا کافی باشد؟ شاید. ولی به طور کلی، افزونه های تمام عیار بدون تنظیمات زندگی نمی کنند. این تنظیمات ممکن است بسته به نوع خوشه (aws، gce، azure، bare-metal، do، ...) متفاوت باشد. برخی از تنظیمات را نمی توان از قبل مشخص کرد، آنها باید از خوشه دریافت شوند. و خوشه ثابت نیست: برای برخی تنظیمات باید تغییرات را نظارت کنید. و در اینجا Ansible از قبل گم شده است: شما به برنامه ای نیاز دارید که در یک خوشه زندگی کند، یعنی. اپراتور Kubernetes.

کسانی که آن را در محل کار امتحان کردند اپراتور پوسته، می گویند که وظایف نصب و به روز رسانی افزونه ها و تنظیمات نظارت را می توان با استفاده از آن به طور کامل حل کرد. قلاب ها برای اپراتور پوسته شما می توانید یک اسکریپت بنویسید که یک شرطی را انجام دهد kubectl apply و به عنوان مثال، ConfigMap را که تنظیمات در آن ذخیره می شود، نظارت کنید. این تقریباً همان چیزی است که در addon-operator پیاده سازی شده است.

چگونه این در اپراتور افزونه سازماندهی می شود؟

هنگام ایجاد یک راه حل جدید، از اصول زیر پیروی کردیم:

  • نصب کننده افزونه باید پشتیبانی کند قالب بندی و پیکربندی اعلامی. ما اسکریپت های جادویی که افزونه ها را نصب می کنند، نمی سازیم. اپراتور افزونه از Helm برای نصب افزونه ها استفاده می کند. برای نصب، باید یک نمودار ایجاد کنید و مقادیری را که برای پیکربندی استفاده می شود انتخاب کنید.
  • تنظیمات می تواند باشد در هنگام نصب تولید کنید، آنها می توانند دریافت از خوشهیا دریافت به روز رسانی، نظارت بر منابع خوشه ای. این عملیات را می توان با استفاده از قلاب ها اجرا کرد.
  • تنظیمات می تواند باشد در یک خوشه ذخیره کنید. برای ذخیره تنظیمات در خوشه، یک ConfigMap/addon-operator ایجاد می شود و اپراتور Addon تغییرات به این ConfigMap را نظارت می کند. اپراتور Addon به قلاب ها با استفاده از قراردادهای ساده دسترسی به تنظیمات را می دهد.
  • افزودن به تنظیمات بستگی دارد. اگر تنظیمات تغییر کرده باشند، اپراتور Addon نمودار Helm را با مقادیر جدید منتشر می کند. ما ترکیب نمودار Helm، مقادیر مربوط به آن و قلاب ها را یک ماژول نامیدیم (برای جزئیات بیشتر به زیر مراجعه کنید).
  • صحنه سازی. هیچ اسکریپت انتشار جادویی وجود ندارد. مکانیسم به‌روزرسانی شبیه به یک برنامه معمولی است - افزونه‌ها و اپراتورهای افزونه را در یک تصویر جمع‌آوری کنید، آنها را برچسب‌گذاری کنید و آنها را منتشر کنید.
  • کنترل نتیجه. اپراتور Addon می تواند معیارهایی را برای Prometheus ارائه دهد.

padding در addon-operator چیست؟

افزودنی را می توان هر چیزی که توابع جدیدی به خوشه اضافه می کند در نظر گرفت. به عنوان مثال، نصب Ingress یک نمونه عالی از یک افزونه است. این می‌تواند هر اپراتور یا کنترل‌کننده‌ای با CRD خاص خود باشد: پرومته-اپراتور، مدیر گواهی، کنترلر-کنترل-مدیر و غیره. یا چیزی کوچک، اما استفاده آسان‌تر - برای مثال، کپی مخفی، که اسرار رجیستری را در فضاهای نام جدید کپی می‌کند، یا تیونر sysctl، که پارامترهای sysctl را روی گره‌های جدید پیکربندی می‌کند.

برای پیاده سازی افزونه ها، اپراتور Addon چندین مفهوم را ارائه می دهد:

  • نمودار هلم برای نصب نرم افزارهای مختلف در خوشه استفاده می شود - به عنوان مثال، Prometheus، Grafana، nginx-ingress. اگر جزء مورد نیاز دارای نمودار Helm باشد، نصب آن با استفاده از اپراتور Addon بسیار ساده خواهد بود.
  • ذخیره سازی ارزش ها. نمودارهای هلم معمولاً تنظیمات مختلفی دارند که می توانند در طول زمان تغییر کنند. اپراتور Addon از ذخیره این تنظیمات پشتیبانی می کند و می تواند تغییرات آنها را برای نصب مجدد نمودار Helm با مقادیر جدید نظارت کند.
  • قلاب فایل های اجرایی هستند که اپراتور Addon روی رویدادها اجرا می کند و به ذخیره مقادیر دسترسی دارند. قلاب می تواند تغییرات را در خوشه نظارت کند و مقادیر را در فروشگاه مقادیر به روز کند. آن ها با استفاده از قلاب ها، می توانید برای جمع آوری مقادیر از خوشه در هنگام راه اندازی یا طبق یک برنامه زمان بندی، اکتشاف کنید، یا می توانید کشف مستمر انجام دهید و مقادیر را از خوشه بر اساس تغییرات در خوشه جمع آوری کنید.
  • مدول ترکیبی از نمودار Helm، یک انبار مقادیر و قلاب است. ماژول ها را می توان فعال یا غیرفعال کرد. غیرفعال کردن یک ماژول به معنای حذف تمام انتشارات نمودار Helm است. ماژول ها می توانند خود را به صورت پویا فعال کنند، برای مثال، اگر همه ماژول های مورد نیاز آن فعال باشند یا اگر کشف پارامترهای لازم را در قلاب ها پیدا کرده باشد - این کار با استفاده از یک اسکریپت فعال کمکی انجام می شود.
  • قلاب های جهانی. اینها به تنهایی قلاب هستند، در ماژول ها گنجانده نمی شوند و به یک فروشگاه مقادیر جهانی دسترسی دارند که مقادیر آن برای همه هوک های ماژول ها در دسترس است.

این قطعات چگونه با هم کار می کنند؟ بیایید به تصویر از مستندات نگاه کنیم:

آیا تهیه خوشه Kubernetes آسان و راحت است؟ اعلام اپراتور افزونه

دو حالت کار وجود دارد:

  1. قلاب جهانی توسط یک رویداد راه اندازی می شود - برای مثال، زمانی که یک منبع در خوشه تغییر می کند. این قلاب تغییرات را پردازش می کند و مقادیر جدید را در فروشگاه مقادیر جهانی می نویسد. اپراتور Addon متوجه می شود که حافظه جهانی تغییر کرده است و همه ماژول ها را راه اندازی می کند. هر ماژول با استفاده از قلاب های خود تعیین می کند که آیا باید فعال شود یا خیر و ذخیره مقادیر خود را به روز می کند. اگر ماژول فعال باشد، اپراتور Addon نصب نمودار Helm را شروع می کند. در این مورد، نمودار Helm به مقادیر از ذخیره سازی ماژول و از حافظه جهانی دسترسی دارد.
  2. سناریوی دوم ساده تر است: یک قلاب ماژول توسط یک رویداد فعال می شود و مقادیر را در ذخیره مقادیر ماژول تغییر می دهد. اپراتور Addon متوجه این موضوع می شود و نمودار Helm را با مقادیر به روز شده راه اندازی می کند.

افزودن را می توان به عنوان یک قلاب منفرد، یا به عنوان یک نمودار هلم، یا اجرا کرد حتی به عنوان چندین ماژول وابسته - این به پیچیدگی مولفه نصب شده در خوشه و به سطح مطلوب انعطاف پذیری پیکربندی بستگی دارد. به عنوان مثال، در مخزن (/مثال ها) یک افزونه sysctl-tuner وجود دارد که هم به صورت یک ماژول ساده با یک قلاب و یک نمودار Helm پیاده سازی می شود و هم با استفاده از ذخیره مقادیر که امکان اضافه کردن تنظیمات را با ویرایش ConfigMap فراهم می کند.

تحویل به روز رسانی

چند کلمه در مورد سازماندهی به‌روزرسانی‌های مؤلفه‌ای که اپراتور Addon نصب می‌کند.

برای اجرای Addon-operator در یک کلاستر، شما نیاز دارید یک تصویر با اضافات بسازید در قالب فایل های نمودار هوک و هلم، یک فایل باینری اضافه کنید addon-operator و هر آنچه برای قلاب نیاز دارید: bash, kubectl, jq, python و غیره. سپس این تصویر را می توان به عنوان یک برنامه معمولی در خوشه قرار داد و به احتمال زیاد می خواهید یک یا آن طرح برچسب گذاری را سازماندهی کنید. اگر خوشه‌های کمی وجود دارد، همان رویکردی که در مورد برنامه‌ها وجود دارد ممکن است مناسب باشد: نسخه جدید، نسخه جدید، رفتن به همه خوشه‌ها و تصحیح تصویر Pods. با این حال، در مورد عرضه به تعداد قابل توجهی از خوشه ها، مفهوم خود به روز رسانی از یک کانال برای ما مناسب تر بود.

در اینجا نحوه انجام آن آمده است:

  • یک کانال در اصل یک شناسه است که می تواند روی هر چیزی تنظیم شود (به عنوان مثال، dev/stage/ea/stable).
  • نام کانال تگ تصویر است. هنگامی که نیاز دارید به‌روزرسانی‌های یک کانال را منتشر کنید، یک تصویر جدید جمع‌آوری می‌شود و با نام کانال برچسب‌گذاری می‌شود.
  • هنگامی که یک تصویر جدید در رجیستری ظاهر می شود، اپراتور Addon مجدداً راه اندازی می شود و با تصویر جدید راه اندازی می شود.

این بهترین عمل نیست، همانطور که در نوشته شده است اسناد Kubernetes. انجام این کار توصیه نمی شود، اما ما در مورد آن صحبت می کنیم یک برنامه معمولی که در یک خوشه زندگی می کند. در مورد اپراتور Addon، یک برنامه کاربردی شامل تعداد زیادی Deployments است که در خوشه ها پراکنده شده اند و خود به روز رسانی کمک زیادی می کند و زندگی را آسان تر می کند.

کانال ها کمک می کنند و در تست: اگر یک خوشه کمکی وجود دارد، می توانید آن را در کانال پیکربندی کنید stage و قبل از انتشار آن در کانال ها، به روز رسانی ها را در آن قرار دهید ea и stable. اگر با یک خوشه در کانال ea خطایی رخ داده است، می توانید آن را تغییر دهید stable، در حالی که مشکل این خوشه در حال بررسی است. اگر خوشه از پشتیبانی فعال خارج شود، به کانال "یخ زده" خود تغییر می کند - برای مثال، freeze-2019-03-20.

علاوه بر به روز رسانی قلاب ها و نمودارهای هلم، ممکن است نیاز داشته باشید به روز رسانی و جزء شخص ثالث. به عنوان مثال، متوجه یک اشکال در صادرکننده گره شرطی شده اید و حتی متوجه شده اید که چگونه آن را وصله کنید. در مرحله بعد، شما PR را باز کردید و منتظر نسخه جدید هستید تا از همه خوشه ها عبور کند و نسخه تصویر را افزایش دهد. برای اینکه به طور نامحدود منتظر نمانید، می توانید صادرکننده گره خود را بسازید و قبل از پذیرش روابط عمومی به آن سوئیچ کنید.

به طور کلی، این کار را می توان بدون Addon-operator انجام داد، اما با Addon-operator ماژول نصب node-exporter در یک مخزن قابل مشاهده خواهد بود، Dockerfile برای ساخت تصویر شما می تواند همانجا نگه داشته شود، این کار برای همه شرکت کنندگان آسان تر می شود. فرآیند درک آنچه اتفاق می‌افتد... و اگر چندین خوشه وجود داشته باشد، آزمایش روابط عمومی و ارائه نسخه جدید آسان‌تر می‌شود!

این سازماندهی به‌روزرسانی مؤلفه برای ما با موفقیت کار می‌کند، اما هر طرح مناسب دیگری را می‌توان پیاده‌سازی کرد - بالاخره در این مورد Addon-operator یک فایل باینری ساده است.

نتیجه

اصول پیاده‌سازی شده در اپراتور Addon به شما این امکان را می‌دهد که فرآیندی شفاف برای ایجاد، آزمایش، نصب و به‌روزرسانی افزونه‌ها در یک کلاستر، مشابه فرآیندهای توسعه برنامه‌های معمولی بسازید.

افزونه‌ها برای اپراتور Addon در قالب ماژول (نمودار هلم + قلاب) می‌توانند در دسترس عموم قرار گیرند. ما، شرکت فلانت، در نظر داریم که تحولات خود را در قالب چنین مواردی در تابستان منتشر کنیم. به توسعه در GitHub بپیوندید (اپراتور پوسته, اپراتور افزونه)، سعی کنید اضافه کردن خود را بر اساس مثال ها и مستندات، منتظر اخبار در Habré و ما باشید کانال یوتیوب!

PS

در وبلاگ ما نیز بخوانید:

منبع: www.habr.com

اضافه کردن نظر