Kubernetes چیست؟ - بخش اول

تکنولوژی
Kubernetes چیست؟ - بخش اول
تکنولوژی 1399/12/18

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 در کلاستر است. این سرویس می‎تواند جهت جستجوی سرویس‎ها، پیکربندی یا پیکربندی مجدد خودشان جهت بروز نگه‌داشتن اطلاعات استفاده شود.

Kubernetes

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 باید ظرفیت کل و همچنین منابعی که قبلا در هر سرور اختصاص داده شده است را بشناسد.

Kubernetes

اجزای سرور Node

در Kubernetes سرورهایی که Container روی آن ها کار می کنند به عنوان Node شناخته می شوند. سرورهای Node دارای چندین الزام هستند که برای ارتباط با اجزای اصلی کلاستر و پیکربندی شبکه و اجرای Workload اختصاص یافته به آنها ضروری است.

نقش Container در سرورهای Node

اولین جزء در هر Node باید یک Container همیشه در حال اجرا باشد. به طور معمول این نیاز با نصب و راه اندازی Docker برطرف می‎شو. همچنین گزینه‎های دیگری نظیر rkt و runc وجود دارند.

Kubelet، راه ارتباطی میان Node و Master

Kubernetes

نقطه تماس اصلی برای هر Node با کلاستر سرویس Kubelet است. این سرویس مسئول انتقال اطلاعات (دستور) به سرویس‎های کنترل کلاستر است و از طریق آن در ارتباط با etcd Data Base برای خواندن جزئیات پیکربندی یا نوشتن مقادیر جدید استفاده می‎کند. سرویس Kubelet در هر Node با اجزای اصلی کلاستر سرور Master ارتباط برقرار می‎کند تا در کلاستر احراز هویت شود و دستورات و وظایف را از سرور Master دریافت کند.

فرایند Kubelet مسئول نگهداری و دریافت وظایف است. در این زمان Containerها توسط فرمان‎های رسیده از سرور Master ایجاد یا حذف می‎شوند.

Kube proxy چه نقشی را ایفا می‎کند؟

برای مدیریت شبکه و زیرشبکه (subnet) هر سرور در کلاستر و فعال‌سازی سرویس‎های دیگر، یک سرویس کوچک به نام Kube-Proxy در هر Node ایجاد می‎شود. این فرایند، درخواست ارتباطی را به Container مورد نظر داده و می‎تواند Load Balance اولیه را انجام داده و و مطمئن شود که شبکه‎ی کلاستر در دسترس و قابل پیش‌بینی و همچنین ایزوله است.

Kubernetes

با تشکر از همراهی شما

تیم بلاگ زس

 

 

...
...