کوبرنتیز(Kubernetes) یک سامانه مدیریت کانتینرها (Container Orchestration) است که برای مدیریت، اجرا و راهاندازی برنامهها در محیطهای کانتینری مورد استفاده قرار میگیرد. در کل کوبرنتیز به ترتیب، کنترل منابع و خدمات درون کانتینرها را سامان دهی می کند تا برنامههای توزیع شده راحتتر مدیریت شوند.
اجزای اصلی کوبرنتیز عبارتند از:
Node (گره): هر سیستمی که توانایی اجرای کانتینرها را داشته باشد و به کوبرنتیز متصل باشد، به عنوان گره شناخته میشود. این گرهها ممکن است یک سرور فیزیکی یا ماشین مجازی باشند.
Cluster (خوشه): یک مجموعه از گرهها که توسط کوبرنتیز مدیریت میشود. خوشه میتواند شامل تعداد زیادی از گرهها باشد که با هم همکاری میکنند.
Pod (پاد): یک یا چند کانتینر که با هم در یک گره اجرا میشوند. این کانتینرها ممکن است به صورت مرتبط با یکدیگر باشند و اطلاعاتی را به اشتراک بگذارند.
Service (سرویس): یک مفهوم برای دسترسی به برنامهها درون کانتینرها است. سرویسها به گونهای هستند که از تغییرات در برنامهها مستقل هستند و بهطور پویا با تغییرات در گرهها مدیریت میشوند.
Controller (کنترلکننده): مواردی که وظیفه مدیریت و تنظیم تعداد پادها و دیگر عناصر در یک خوشه را برعهده دارند. به عنوان مثال، ReplicaSet به کنترل تعداد پادها میپردازد.
Kubelet (کیوبلت): یک مؤلفه نرمافزاری در هر گره که مسئولیت اجرای کانتینرها و ارتباط با کوبرنتیز را بر عهده دارد.
Kube-Proxy (کیوب-پروکسی): یک کامپوننت برای فراهم کردن ارتباط شبکه درون یک خوشه می باشد. این به سرویسها امکان دسترسی به پادها و مرتب سازی ترافیک شبکه را انجام می دهد.
کوبرنتیز با استفاده از این اجزا،انعطافپذیری و توانمندی مدیریتی بسیار بالایی را برای محیطهای کانتینری فراهم میکند.
Node
در ساختار نودها در Kubernetes موارد مختلفی وجود دارد.
Kubelet: یک سرویس در هر گره است که با کوبرنتیز ارتباط برقرار میکند. مسئولیت Kubelet اجرای کانتینرها در گره است و از طریق ارتباط با Docker به اجرای کانتینرها پرداخته و گزارشهایی به کوبرنتیز ارسال میکند.
Kube-Proxy: این مؤلفه مسئولیت مدیریت ترافیک شبکه درون خوشه را بر عهده دارد. Kube-Proxy برای ایجاد قاعدههای شبکه (مانند ایجاد سرویسها و ارتباطات درونخوشه) و ترتیب ترافیک بین پادها و گرهها استفاده میشود.
Container Runtime (محیط اجرای کانتینر): این مؤلفه مسئول اجرای واحدهای کانتینری است که توسط Kubelet درخواست شدهاند. اکثراً در این مؤلفه از Docker استفاده میشود، اما ممکن است از محیطهای اجرای کانتینری دیگر نیز استفاده شود.
Kubernetes Service Proxy (Kube-Proxy): این مؤلفه مسئول ایجاد و مدیریت قوانین ترافیک شبکه درون گره است و اطمینان حاصل میشود که ترافیک به درستی به پادها و سرویس ها میرسد.
Cadvisor (Container Advisor): این ابزار مسئولیت مانیتورینگ و گزارشدهی درباره منابع مصرفی کانتینرها را دارا است. اطلاعاتی مانند میزان استفاده از CPU و حافظه توسط هر کانتینر را جمعآوری کرده و به کوبرنتیز ارائه میدهد.
(Control Plane)
محلی است در کلاستر کوبرنتیز که همه برنامه ریزی ها صورت می گیرد.
API Server (سرور API): این مؤلفه واسط برنامه نویسی است که به سایر اجزا امکان ارتباط با Control Plane را میدهد. API Server به عنوان یک درگاه ورودی برای دسترسی و تعامل با Kubernetes عمل میکند. این اجزا و برنامهها از طریق API Server با Control Plane ارتباط برقرار میکنند.
etcd (اطمینان از توزیع): این مؤلفه به عنوان یک ذخیره داده عمل میکند که اطلاعات تنظیمات کلی خوشه (Cluster) و وضعیت آن را ذخیره میکند. etcd تضمین میکند که اطلاعات به صورت قابل اعتماد و در تمام اعضای Control Plane موجود باشد.
Controller Manager (مدیر کنترل): این مؤلفه مسئول بررسی وضعیت سیستم و اعمال تغییرات بر اساس وضعیت مورد نظر است. مدیر کنترل برخی از کنترلکنندههای (Controllers) اصلی کوبرنتیز را اجرا میکند که وظیفه تأیید (reconciliation) وضعیت مطلوب خوشه را دارند. به عبارت دیگر، این مؤلفه مسئول مدیریت وضعیت مطلوب خوشه است.
pod
Pod در Kubernetes یک مفهوم مهم است و به عنوان کوچکترین واحد قابل اجرا قابل مدیریت توسط Kubernetes در نظر گرفته میشود. یک Pod میتواند شامل یک یا چند کانتینر باشد و این کانتینرها به صورت مشترک منابع و فضای ذخیرهسازی را به اشتراک میگذارند. اصطلاح "Pod" به یک لایه متناسب با مفهوم "کپسول" یا "کاهو" اشاره دارد که شامل یک یا چند میوه (کانتینر) میشود. معمولا در هر پاد فقط یک اپلیکیشن اجرا می شود اما می توان در یک پاد چندین کانتینر اجرا کرد.
خدمات (Services)
در Kubernetes، سرویس (Service) به عنوان یک واسط بین کانتینرها و دیگر اجزا موجود در خوشه (Cluster) عمل میکند. هدف اصلی ایجاد سرویس در Kubernetes ایجاد یک لایهٔ ارتباطی با ip است که از منابع شبکه و ایجاد یک نقطه دسترسی ثابت به برنامهها می باشد، بهطوریکه تغییرات در اجزای زیرساختی (Infrastructure) و یا تعداد و مکان کانتینرها تاثیری بر دسترسی به برنامهها نداشته باشد.
مهمترین نکات درباره سرویس در Kubernetes:
تعریف منابع شبکه: سرویسها یک لایه برای منابع شبکه ایجاد میکنند. به جای اشاره به IP یا نام DNS دقیق کانتینرها، میتوانید با یک نام سرویس به آنها دسترسی داشته باشید. این لایه اجازه میدهد تا کانتینرها بدون نگرانی از تغییرات در IP یا مکان دقیق یکدیگر با یکدیگر ارتباط برقرار کنند.
انواع سرویس: در Kubernetes، چندین نوع سرویس وجود دارد، از جمله:
- ClusterIP: یک آدرس IP داخلی به عنوان نقطه دسترسی داخلی برای سرویس.
- NodePort: یک آدرس IP و پورت داخلی و خارجی به عنوان نقطه دسترسی.
- LoadBalancer: یک سرویس خارجی با استفاده از یک لودبالانسر خارجی.
- ExternalName: متناظر برای یک نام دامنه خارجی.
انجام مسیریابی (Routing): سرویسها مسئول مسیریابی درخواستها به کانتینرهای مربوطه در خوشه هستند. این مسیریابی به صورت داخلی انجام میشود و به کانتینرها این امکان را میدهد که بدون نگرانی از تغییرات در موقعیت فیزیکی یا تعدادشان، با یکدیگر ارتباط برقرار کنند.
نامگذاری مدلهای DNS: هر سرویس به یک DNS معین شده میپردازد. به عنوان مثال، اگر یک سرویس با نام "my-service" وجود داشته باشد، کانتینرها میتوانند به این سرویس با نام "my-service" دسترسی داشته باشند.
تعادل بار (Load Balancing): در صورتی که چندین کپی از یک برنامه درون خوشه اجرا شود، سرویس به صورت خودکار ترافیک را بین کانتینرها توزیع میکند. این امکان بهبود توزیع بار و افزایش انعطافپذیری برنامه را فراهم میکند.
Kubelet
kubelet
یک سرویس درون هر گره (Node) Kubernetes است و به عنوان وظیفه اصلی مدیریت و اجرای کانتینرها در گره مورد نظر مشغول است. وظایف kubelet
شامل:
تعامل با API Server: به معماری و ساختار آن توجه کنید که
kubelet
با API Server در Control Plane ارتباط دارد و از آن درخواستهایی را دریافت میکند، مانند درخواست برای اجرای یک پاد (Pod).مدیریت کانتینرها:
kubelet
مسئولیت اجرا و نظارت بر کانتینرها را دارد. این شامل دانلود تصاویر کانتینر، اجرای آنها و نظارت بر وضعیت آنها میشود.گزارش وضعیت به Control Plane: در
kubelet
به صورت مداوم وضعیت کانتینرها و پادهایی که در گره اجرا میشوند را به Control Plane گزارش میدهد تا وضعیت کلی خوشه اطلاعات بهروز داشته باشد.
Kube-Proxy
kube-proxy
یک سرویس دیگر در هر گره (Node) Kubernetes است و به تنظیم و مدیریت ارتباطات شبکه برای کانتینرها درون یک پاد (Pod) مشغول است. وظایف kube-proxy
شامل:
Forwarding ترافیک:
kube-proxy
مسئول ایجاد قوانین جلوگیری و ارسال ترافیک به کانتینرهای درون یک پاد است. این عمل به این صورت انجام میشود کهkube-proxy
مسئولیت شناسایی تغییرات در ساختارهای شبکه اجتماعی (Service) میپذیرد و قوانین جلوگیری و ارسال ترافیک را مطابق با این تغییرات بهروزرسانی میکند.سرویسها و توزیع ترافیک:
kube-proxy
به کمک iptables یا IPVS (IP Virtual Server) نقش لایه4 را در سرویسهای Kubernetes ایفا میکند. این به این معناست که هر سرویس درون Kubernetes با یک IP و پورت خاص شناسایی میشود وkube-proxy
مسئول توزیع ترافیک برای این سرویس ها به کانتینرهایی که زیر پشته (Pod) ترتیبشان قرار گرفتهاند میشود.
با کمک kubelet
و kube-proxy
، Worker Node در یک خوشه Kubernetes قابلیت اجرای و مدیریت کانتینرها را دارا میشود و ارتباطات شبکه برای سرویسها به بهترین شکل ممکن تضمین میشود.
امیدوارم از مقاله Kubernetes لذت برده باشید 🙂
(اگر بیشتر کنجکاو بودین میتونین مقاله کوبرنتیز رو از سایت خودش بخونین)