در داخل هواپیمای کنترلی Kubernetes

معرفی
در این مقاله، بخشهای اساسی جعبه مغزی Kubernetes، یعنی بخشهایی از هواپیمای کنترل Kubernetes را مورد بحث قرار خواهم داد. این مقاله پایهای برای شیرجه عمیق به Kubernetes است که در طول سال انجام خواهم داد. هدف این نوشته ارائه یک پایه روشن به بخشهای مختلف هواپیمای کنترلی Kubernetes و نحوه عملکرد آنها به صورت جداگانه و جمعی برای اطمینان از استقرار هموار و کارآمد پادها است. این مجموعه کار نیز صرفاً بر روی مؤلفههای اصلی گره متمرکز است، سایر مؤلفههایی که روی گرههای کارگر کار میکنند در مقاله بعدی مورد بحث قرار خواهند گرفت. برای دریافت بهترین این مقاله به هیچ دانش قبلی در مورد Kubernetes یا تجربه برنامه نویسی نیاز ندارید.
لطفاً توجه داشته باشید که کلمه “Kubernetes” به جای کلمه “kube” استفاده می شود، به خصوص در هنگام توصیف یک جزء اصلی از صفحه کنترل، این مخفف است که به عنوان یک استاندارد در جامعه پذیرفته شده است.
آشنایی با هواپیمای کنترل Kubernetes
Kubernetes یک پلتفرم ارکستراسیون منبع باز است که برای مدیریت، استقرار و مقیاسبندی برنامههای کانتینری در هر مکانی استفاده میشود. Kubernetes (مخفف k8s) قابل حمل و گسترش است و می تواند برای مدیریت بارهای کاری استفاده شود که هم پیکربندی اعلامی و هم اتوماسیون را تسهیل می کند.
واقعیت جالب: نام Kubernetes از یونانی به معنای سکان دار یا خلبان گرفته شده است
در این مقاله، ما بر روی یک سری از اجزای اکوسیستم Kubernetes به نام صفحه کنترل متمرکز شدهایم. صفحه کنترل Kubernetes مجموعه ای از اجزای Kubernetes است که به طور جمعی برای پیکربندی مجدد حالت یک خوشه با هدف اصلی دستیابی به یک حالت دلخواه کار می کنند. صفحه کنترل از اطلاعاتی مانند فعالیت خوشه و تاریخ گره استفاده می کند تا اطمینان حاصل کند که برنامه های کاربردی مستقر در برابر خطا و بسیار در دسترس هستند.
در این مقاله، ما چهار بخش اصلی صفحه کنترل یعنی:
- سرور api بود
- etcd
- کوبه-زمان بندی
- کنترلر-مدیر کوبه
Caveat: I am not including the Cloud controller manager because this article is solely focused on native parts of Kubernetes, outside of any cloud provider or third-party system.
سرور api بود
سرور api Kube API Kubernetes را از طریق مسیرهای متعدد (مانند HTTP، gRPC، و kubectl) در معرض دید قرار میدهد و آن را به تنها جزء خارجی صفحه کنترل تبدیل میکند. سرور api kube داده ها را برای اشیاء بومی Kubernetes مانند پادها، استقرارها و سرویس ها تأیید و پیکربندی می کند. سرور api همچنین تنها مسئول احراز هویت درخواستهای API، مجوز نقشها و گروهها و کنترل پذیرش اشیاء Kubernetes است.
وضعیت api-server در یک پایگاه داده توزیع شده و بسیار سازگار (etcd) ذخیره می شود، بنابراین سرور api خود بدون حالت است و می تواند به راحتی در ماشین های مختلف تکرار شود. سرور api از پروتکل SPDY و همچنین HTTP2/WebSocket پشتیبانی می کند، اما SPDY برای HTTP2/Websocket منسوخ شده است.
etcd
etcd یک ذخیرهسازی با ارزش کلیدی با منبع باز و کاملاً سازگار است که برای ذخیره پیکربندی، وضعیت دادهها و اطلاعات متا برای Kubernetes استفاده میشود. Kubernetes از ماهیت بسیار در دسترس etcd برای ارائه یک منبع منسجم از حقیقت در مورد وضعیت خوشههای توزیع شده خود استفاده میکند، این شامل پادها و نمونههای کاربردی است که در همان پادها مستقر شدهاند.
etcd به گونهای طراحی شده است که هیچ نقطهای از خرابی نداشته باشد و به خوبی خرابی سختافزار و پارتیشنهای شبکه را تحمل کند، همچنین بسیار سریع است زیرا میتواند بیش از 1000 نوشتن در ثانیه را انجام دهد (https://etcd.io/docs/) v3.5/benchmarks/etcd-2-1-0-alpha-benchmarks/).
به دلیل ماهیت بسیار حساس دادههایی که در Kubernetes قرار دارند، etcd از تأیید اعتبار گواهی مشتری لایه امنیتی خودکار (TLS) و لایه سوکت امن (SSL) نیز پشتیبانی میکند.
سرور api kube دادههای حالت هر خوشه را در etcd ذخیره میکند، همچنین از تابع watch etcd برای نظارت بر دادههای وضعیت ذخیرهشده استفاده میکند و هنگامی که دادههای حالت از دادههای مورد نظر منحرف میشوند، پاسخی را آغاز میکند.
زمانبندی کوبه
زمانبندی Kubernetes جزء صفحه کنترل است که وظیفه تخصیص پادها به Nodes را بر عهده دارد. زمانبند غلافهای تازه ایجاد شده را تماشا میکند و سپس بهترین گره موجود ممکن را به آن پادها اختصاص میدهد. بسته به الگوریتم زمانبندی مورد نظر، میتوان از چندین زمانبندی مختلف در یک خوشه استفاده کرد.
در یک خوشه، گره هایی که الزامات زمان بندی یک pod را برآورده می کنند نامیده می شوند گره های امکان پذیر، اگر هیچ یک از گره ها مناسب نباشند، غلاف در حالت معلق باقی می ماند تا زمانی که به یک گره تخصیص داده شود.
فرآیندی که توسط آن kube-scheduler، غلاف ها را به گره ها اختصاص می دهد، بسیار ساده است. هنگامی که یک غلاف جدید ایجاد میشود، زمانبندیکننده نیازمندیهای آن را برمیدارد و به دنبال یافتن گرههای امکانپذیر برای غلاف در فرآیندی به نام فیلتر کردن. پس از فیلتر کردن، زمانبندیکننده مجموعهای از توابع را اجرا میکند تا گرههای امکانپذیر را در فرآیندی که به نام نامیده میشود، امتیاز دهد به ثمر رساندن. پس از تکمیل امتیازدهی، زمانبندی گرهی را که بالاترین امتیاز را از بین گرههای امکان پذیر دارد را برای اجرای پاد انتخاب میکند و اقدام به اتصال آن گره به غلاف میکند، این فرآیند به عنوان شناخته میشود. الزام آور.
زمانبند Kube، غلاف را به گرهای با بالاترین امتیاز اختصاص میدهد و اگر بیش از یک گره با بالاترین امتیاز وجود داشته باشد، زمانبند بهطور تصادفی یکی را انتخاب کرده و غلاف را به آن گره متصل میکند.
کنترلر-مدیر کوبه
برای درک کامل نقش کنترلر-مدیر Kubernetes، ضروری است که عملکرد کامل کنترلر A را درک کنید.
یک کنترل کننده یک حلقه غیر پایانی است که وضعیت سیستم Kubernetes را تنظیم می کند، یک کنترل کننده کار می کند تا کل سیستم را به حالت عملکرد مطلوب برساند. هنگامی که وضعیت فعلی یک شی از حالت مطلوب منحرف می شود، حلقه کنترل اقدامات اصلاحی را انجام می دهد تا مطمئن شود که وضعیت فعلی با حالت مطلوب یکسان است. یک کنترلر می تواند وظایف فوق را با کمک api-server kube انجام دهد.
نمونه ای از یک کنترلر، کنترل گر گره است که وظیفه نظارت بر وضعیت گره ها و انجام اقدامات لازم برای اجرای برنامه ها را در صورت معیوب بودن یک گره بر عهده دارد. مثال دیگر کنترل کننده تکرار است، این کنترلر وضعیت مجموعه های ماکت را کنترل می کند و اطمینان حاصل می کند که تعداد مورد نظر غلاف در هر لحظه در مجموعه موجود است. اگر یک غلاف خاتمه یابد، یک غلاف دیگر به جای آن ایجاد می شود.
کنترلر-مدیر kube یک جزء اصلی از محل کنترل است که مسئول اجرای چندین کنترلر است که حالت مطلوب یک خوشه را حفظ می کنند. مدیر کنترلر kube به عنوان یک شبح اجرا می شود (روی هر گره در خوشه) و با کنترلرهای لازم برای اجرای موفقیت آمیز یک خوشه Kubernetes از قبل بسته بندی شده است.
نتیجه
در این مقاله، بخشهای اصلی صفحه کنترل Kubernetes، نقشهای آنها و نحوه عملکرد آنها برای اطمینان از سالم بودن خوشه توضیح دادهایم. این مقاله آغازگر مجموعه ای از مقالاتی است که در طول سال در Kubernetes خواهم نوشت. با تشکر از شما برای خواندن! لطفاً لایک کنید، به اشتراک بگذارید و مشترک شوید تا از مقالات بیشتر من لذت ببرید. متشکرم!