
Kubernetes چیست؟ – بخش اول
Kubernetes یک سیستم متنباز قدرتمند است که در ابتدا توسط شرکت گوگل برای مدیریت برنامهها و سرویسهای تحت کانتینر ایجاد شد
مقدمهای بر Kubernetes
Kubernetes یک سیستم متنباز قدرتمند است که در ابتدا توسط شرکت گوگل برای مدیریت برنامهها و سرویسهای تحت کانتینر(Container) در محیط کلاسترینگ(Clustering) ایجاد شد. هدف Kubernetes ارائهی راهی بهتر برای مدیریت و توزیع اجزا و سرویسها در سراسر زیرساخت است. در این مقاله در مورد مفاهیم پایه Kubernetes و معماری سیستم آن و همچنین مدلی که برای مدیریت Deploymentها و توسعهی آن استفاده میشود، صحبت خواهیم کرد.
Kubernetes چیست؟
Kubernetes در سطح پایهی آن یک سیستم برای اجرا و هماهنگسازی برنامههای Container در سراسر کلاستر است. این پلتفرم جهت مدیریت کامل چرخهی حیات برنامهها، سرویسها و ارائهی بستری برای گسترشپذیری و در دسترسبودن بسیار بالا طراحی شده است. شما به عنوان مدیر Kubernetes میتوانید تعریف کنید که چگونه سرویسها اجرا شوند و از چه طریقی با یکدیگر و دنیای بیرون ارتباط برقرار کنند.
سیستم Kubernetes رابط مدیریتیای را ارائه میدهد که کاربر بتواند سرویسها و اپلیکیشنها را با درجهی بالایی از اطمینانپذیری ایجاد کند.
بررسی معماری Kubernetes
Kubernetes ارتباط خود را با ماشینهای مجازی یا ماشینهای فیزیکی از یک شبکهی اشتراکی مانند “Flannel ” که در هر ماشین وجود دارد برقرار میکند. در شبکهی کلاستری Kubernetes، تمامی اجزا، قابلیتها و Workloadها پیکربندی میشوند. هر ماشین در اکو سیستم Kubernetes یک وظیفه و نقش را بر عهده دارد.
Master
یک ماشین (سرور) در کلاستر به انتخاب ما باید به عنوان Master در نظر گرفته شود. این سرور با ایجاد یک IP برای مدیر سیستم، راه ورود به کلاستر و مدیریت آن را باز میکند. علاوه بر این، تست سلامت و پایداری دیگر سرورها، تعیین نقش و همچنین ارکستراسیون بین اجزای مختلف Kubernetes را برعهده دارد.
در واقع سرور Master نقطه اصلی ارتباط با کلاستر است و مدیریت و نظارت متمرکز در سراسر سیستم Kubernetes را فراهم میکند.
Node
دیگر ماشینهایی که در کلاستر Kubernetes ایجاد میشوند سرور Node نام دارند. این سرورها وظیفهی اجرا کردن بارِ کاری را با استفاده از منابع داخلی یا خارجی برعهده دارند. Node برای کمک به ایزوله سازی، مدیریت و انعطاف پذیری Kubernetes برای اجرای اپلیکیشنها و سرویسها از Container استفاده میکند، بدین ترتیب هر ماشین Node در کلاستر نیاز به دارا بودن به یک سیستم و نرم افزار کانتینری مانندDocker یا rkt Node است. در کلاستر دستور العملها را از سرور Master دریافت میکند و بر اساس تنظیمات، کانتینرها را ایجاد یا آنها را حذف میکند و همچنین تنظیمات مناسب شبکهی کلاستر و مسیریابی ترافیک را انجام میدهد.
Container
همانطور که اشاره شد، اپلیکیشنها و سرویسهای ما در کلاستر Kubernetes با کاینتر اجرا میشوند. کاربر جهت تعامل با کلاستر از IP سرور اصلی، کلاینت و یا کتابخانه استفاده میکند. برای اجرای اپلیکیشنها یا سرویسها، یک برنامه اعلامیه در فایلهای JSON یا Yaml ارائه میشود که مشخصکننده این است که چه چیزی باید ایجاد شود و چگونه باید آن را مدیریت کرد. سرور Master، فایل برنامه را میگیرد (JSON یا Yaml) و چگونگی اجرای آن در زیرساخت را با بررسی شرایط و وضعیت فعلی سیستم مشخص میکند. این گروه از برنامههای تعریف شده توسط کاربر که بر اساس یک نقشه خاص اجرا میشوند، نتیجهی نهایی Kubernetes را نشان میدهند.
اجزای سرور Master
همانطور که در بالا اشاره شد سرور Master به عنوان کنترلکننده اولیه برای کلاستر است. این سرویس به عنوان راه ارتباطی اصلی جهت مدیریت توسط کاربر است، با این حال اجزای سرور Master برای دریافت و قبول درخواست کاربر با هم تعامل دارند و همچنین تعیین بهترین راه برای برنامهریزی Container و احراز هویت کلاینتها، تنظیم شبکهی کلاستری و مدیریت و توسعه و پایداری کلاستر است. این اجزاء میتوانند در یک ماشین یا در کلیهی ماشینها نصب شوند. ما در مورد هر جزء که در سرور Master وجود دارد به صورت جداگانه صحبت خواهیم کرد.
جایگاه etcd در Kubernetes
etdc یک جزء مهم Kubernetes جهت ذخیرهسازی و نگهداری فایلهای پیکربندی کلاستر است. پروژهی etcd توسط تیم Core Os توسعه داده شده است که بسیار سبک بوده و یک مکانی جهت نگهداری Key-Valueها است که میتواند در سراسر کلاستر و Nodeها توزیع شود. Kubernetes از etcd برای نگهداری فایلها و دادههای پیکربندی کلاستر استفاده میکند که قابل دسترسی توسط هر Node در کلاستر است. این سرویس میتواند جهت جستجوی سرویسها، پیکربندی یا پیکربندی مجدد خودشان جهت بروز نگهداشتن اطلاعات استفاده شود.
Kube apiserver، مدیریت Kubernetes
یکی دیگر از سرویسهای مهم در سرور Api-server ،Master است. این نقطهی اصلی مدیریت و ورود به Kubernetes است که به کاربر اجازه میدهد Kubernetes را پیکربندی کند. در واقع kube-apiserver پلی بین اجزای مختلف با هدف نگهداری و حفظ سلامت کلاستر و انتشار اطلاعات و اجرای دستور عملها است.
api server یک رابط RESTfull ایجاد میکند که به این معنی است که بسیاری از ابزارها و کتابخانهها به راحتی میتوانند با آن ارتباط برقرار کنند.
راه ارتباطی کاربر نیز از طریق ابزار Kubectl مهیا میشود که به صورت پیش فرض در سیستم وجود دارد.
وظایف سرویس Kube Controller Manager
Kube Control Manager سرویسی است که وظایف زیادی دارد از جمله:
- کنترل کنندههای وضعیت کلاستر
- چرخهی حیات کلاستر
- و …
به عنوان مثال یک Replication-Controller تضمین میکند که تعداد کپیها (نسخه های یکسان) درست تعریف شده یا تعداد مورد نظر Podها در کلاستر یکی باشند و به درستی در کلاستر قرار بگیرند. جزئیات این عملیات در etcd نوشته میشود، جایی که Controller Manager برای تغییرات به آن نگاه میکند. زمانی که تغییرات در کلاستر ایجاد میشوند، Controller اطلاعات جدید را میخواند و دستوری را اجرا میکند.
وظیفه فرآیند Kube Scheduler چیست؟
Kube-Scheduler فرایندی است که در واقع مسئولیت و وظیفه را به Nodeهای خاص در کلاستر اختصاص میدهد. این سرویس شرایط عملیاتی را میخواند. همچنین تجزیه و تحلیل محیط زیرساخت فعلی و جایگزین را انجام داده و وظایف را به Node قابل قبول واگذار میکند. Scheduler مسئول بررسی ظرفیت موجود در هر Node است تا مطمئن شود که حجم کاری اختصاص داده شده بیش از منابع موجود نباشد. Schedular باید ظرفیت کل و همچنین منابعی که قبلا در هر سرور اختصاص داده شده است را بشناسد.
اجزای سرور Node
در Kubernetes سرورهایی که Container روی آن ها کار می کنند به عنوان Node شناخته می شوند. سرورهای Node دارای چندین الزام هستند که برای ارتباط با اجزای اصلی کلاستر و پیکربندی شبکه و اجرای Workload اختصاص یافته به آنها ضروری است.
نقش Container در سرورهای Node
اولین جزء در هر Node باید یک Container همیشه در حال اجرا باشد. به طور معمول این نیاز با نصب و راه اندازی Docker برطرف میشو. همچنین گزینههای دیگری نظیر rkt و runc وجود دارند.
Kubelet، راه ارتباطی میان Node و Master
نقطه تماس اصلی برای هر Node با کلاستر سرویس Kubelet است. این سرویس مسئول انتقال اطلاعات (دستور) به سرویسهای کنترل کلاستر است و از طریق آن در ارتباط با etcd Data Base برای خواندن جزئیات پیکربندی یا نوشتن مقادیر جدید استفاده میکند. سرویس Kubelet در هر Node با اجزای اصلی کلاستر سرور Master ارتباط برقرار میکند تا در کلاستر احراز هویت شود و دستورات و وظایف را از سرور Master دریافت کند.
فرایند Kubelet مسئول نگهداری و دریافت وظایف است. در این زمان Containerها توسط فرمانهای رسیده از سرور Master ایجاد یا حذف میشوند.
Kube proxy چه نقشی را ایفا میکند؟
برای مدیریت شبکه و زیرشبکه (subnet) هر سرور در کلاستر و فعالسازی سرویسهای دیگر، یک سرویس کوچک به نام Kube-Proxy در هر Node ایجاد میشود. این فرایند، درخواست ارتباطی را به Container مورد نظر داده و میتواند Load Balance اولیه را انجام داده و و مطمئن شود که شبکهی کلاستر در دسترس و قابل پیشبینی و همچنین ایزوله است.