الگوی اپراتور چیست؟

اتوماسیون کار همیشه یک چیز کاملا خاص است. به محض اینکه بخواهیم در کارهای خاصی جلوتر برویم، باید بتوانیم به اتفاقات خاصی واکنش نشان دهیم. اما گوش دادن به این رویدادها همیشه آسان نیست، به خصوص در داخل یک خوشه Kubernetes. و این جایی است که آنچه امروز در مورد آن صحبت خواهیم کرد، اتفاق می افتد اپراتور الگو
TLDR
اپراتورها توسعه Kubernetes هستند که اجازه ایجاد منابع سفارشی برای مدیریت برنامهها و سایر اجزا را میدهند، در حالی که از اصول خاص Kubernetes مانند حلقه کنترل پیروی میکنند.
منبع – اسناد Kubernetes
الگوی اپراتور چیست؟
الگوی اپراتور به کاربران Kubernetes اجازه می دهد تا خود را ایجاد کنند کنترل کننده منابع برای اینکه بتوانید به طور خودکار مجموعه ای از برنامه ها و مؤلفه ها را استقرار و مدیریت کنید.
این الگو معمولا استفاده می کند CRD (تعریف منابع سفارشی – یا تعریف منابع سفارشی) به منظور تسهیل پیکربندی وظایف خاص.
و از آنجایی که همه چیز از اصول خاص Kubernetes مانند حلقه کنترل پیروی می کند، اپراتور شما می تواند بسته به پیکربندی شما و آنچه در اپراتور خود تعریف کرده اید، تمام منابعی را که ایجاد کرده اید نظارت کند. (دیگران را ببینید) و به طور بالقوه قادر به واکنش بر اساس رویدادهای خاص به لطف API Kube هستند. (به ویژه برای اینکه بتوانید به طور خودکار مشکلات خاصی را حل کنید)
در اینجا نموداری از RedHat است که زمینه را توصیف می کند.
مثال
به منظور دقیق تر، در اینجا چند مثال آورده شده است.
1. خودکار کردن برای جلوگیری از ایجاد منابع یکسان به صورت دستی
شما در تیمی هستید که به تیم های دیگر شرکت شما همه ابزارها را می دهد تا بتوانند به طور کاملا مستقل معیارهای خود را جمع آوری و تجسم کنند.
این بدان معناست که برای هر یک از مشتریان خود، باید به صورت دستی مستقر و مدیریت کنید:
- پرومتئوس
- OpenTelemetry
- گرافانا
- Postgres
در این شرایط، به جای اینکه مجبور باشید تمام اقدامات را در گوشه خود تکرار کنید تا بتوانید این برنامه ها و تمام اجزای آن را مستقر کنید. (سرویسها، نقشه پیکربندی، حسابهای سرویس…) همکاران، شما می توانید یک اپراتور ایجاد کنید تا بتواند این دستکاری ها را برای شما مدیریت کند و یک CRD ایجاد کنید به شما امکان می دهد چند نقطه را که می توانند از یک پشته به پشته دیگر متفاوت باشند پیکربندی کنید.
CRD در اینجا نامیده می شود ObservabilityStack
و هنگامی که نمونه ای از این منبع را ایجاد می کنید، به طور خودکار تمام منابع مرتبط با پشته را ایجاد و به درستی پیکربندی می کند.
2. برای جلوگیری از خطاهای دستی هنگام ایجاد/به روز رسانی/حذف خودکار
کسانی که قبلاً مدیریت کرده اند StatefulSet
بلافاصله متوجه خواهید شد که در اینجا در مورد چه چیزی صحبت می کنم. در واقع، هنگام مدیریت برنامههای خاص، بهویژه برنامههایی که دارای حجمهای مرتبط هستند، ممکن است ایجاد، بهروزرسانی یا حذف نیاز به اجرای مجموعه کاملی از دستورات به ترتیب خاصی داشته باشد تا مطمئن شویم همه چیز به خوبی پیش میرود.
وقتی 3-4 دارید، هنوز مشکلی ندارد که آن را با اسکریپت های bash یا ansible مدیریت کنید. اما وقتی 400، 500 یا بیشتر دارید؟
در چنین شرایطی اپراتور الگو نیز به کمک شما می آید. شما می توانید مجموعه ای از اقدامات را به صورت خودکار تعریف کنید که به محض شناسایی یک رویداد ایجاد، به روز رسانی یا حذف به طور خودکار اجرا می شوند.
بنابراین، این برنامهها دیگر برای بهروزرسانی به شما وابسته نیستند و به وضوح زندگی شما را آسانتر کرده و در وقت شما صرفهجویی میکنند.
3. تنظیم خودکار
در این مثال، ما تصور می کنیم که شما در تیمی هستید که Nginx را مدیریت می کند که به عنوان دروازه ای برای همه API های شرکت شما عمل می کند. به محض ایجاد یک API جدید، باید آن را به فایل های پیکربندی همه محیط های خود اضافه کنید. و از آنجایی که شرکت شما بر روی میکروسرویس ها متمرکز است، تقریبا هر هفته درخواست هایی دارید.
علاوه بر این، برخی از api ها تغییر نام داده می شوند، جابه جا می شوند یا حتی حذف می شوند، اما شما همیشه در جریان قرار نمی گیرید، بنابراین به محض اینکه یک api دیگر کار نمی کند، به سراغ شما می آییم تا از شما بپرسیم که چرا X api بیشتر در دسترس نیست؟
همانطور که متوجه شدید اپراتور دوباره به کمک شما می آید! در واقع، از آنجایی که می توانید منابعی را که “به اپراتور تعلق ندارند” نظارت کنید. (یعنی منابعی که توسط اپراتور ایجاد نشده اند و توسط اپراتور مدیریت نمی شوند)، می توانید تمام سرویس های ایجاد شده در خوشه خود را نظارت کنید تا به محض ایجاد، به روز رسانی و/یا حذف یک سرویس، پیکربندی خود را به طور خودکار به روز کنید.
4. نظارت خودکار
برای مثال آخر، تصور کنید که بخشی از یک تیم پشتیبانی هستید که همه برنامههای آن در یک خوشه Kubernetes مستقر هستند. برخی از این برنامهها ممکن است پادهایی داشته باشند که از کار میافتند و برای اینکه بتوانید آنها را به درستی راهاندازی مجدد کنید، نیاز به مدیریت خاصی دارند.
همانطور که قبلاً توانستیم ذکر کنیم، اپراتور قادر به اجرای یک سری کامل از اقدامات برنامه ریزی شده است. ناگهان، ممکن است بتواند آنچه را که برای راه اندازی مجدد برنامه ها به درستی نیاز دارد، اجرا کند.
اما چگونه به محض بروز خطا آن را فعال کنیم؟
در حال حاضر، به محض بروز خطا نمی توان آن را فعال کرد. اما باید بدانید که به طور پیش فرض یک اپراتور a را انجام می دهد منابعی را که مدیریت می کند هر 10 ساعت بررسی کنید. بنابراین، اگر اپراتور دارید که راه اندازی مجدد برنامه های شما را مدیریت نمی کند، می توانید آن را مرتب تر بغلتانید. (البته این به بحرانی بودن برنامه های کاربردی شما، اهداف در دسترس بودن شما و غیره بستگی دارد)
خوب، با تمام این مثال ها، فکر می کنم شما اصل و فایده چنین الگویی را درک کرده اید.
حال، اگر بخواهیم بیشتر پیش برویم تا با کمی جزییات بیشتر نحوه عملکرد آن را درک کنیم، باید دست خود را در آن بگذاریم. بنابراین، در ادامه این مقاله با نحوه ایجاد یک اپراتور آشنا خواهیم شد!
امیدوارم این کمک کند و اگر سوالی دارید (هرگز سوال احمقانه ای وجود ندارد!) یا نکاتی که برای شما واضح نیست، در نظرات پیام بگذارید یا مستقیماً در لینکدین با من تماس بگیرید (حتی برای صحبت در مورد موضوعات دیگر!).