Kubernetes به زبان ساده


کوبرنتیز چیست ؟

در ابتدا باید راجب orchestrator و Containerization صحبت کنیم :

Containerization به معنی این هست که ما یک image داشته باشیم و از روی اون یک containerبالا بیاریم و اون رو sandboxکنیم (stack tcp ip به لطف namespaceدر container ها از هم دیگر جدا هست و در sandbox تویه container ها endpoint ها قرار میگیرد که دارای mac/ipهستن )

Orchestrator به این معانست که اگر ما چندین Node داشته باشیم و با هم cluster اشون کنیم و container روی آن ها بالا بیاریم ، k8s میاد به اونها task ها رو scheduleمیکنه و زمانی بندی میکند و علاوه بر اون load balance هم صورت میگیرد ولی خودش container ای run نمیکند .

CRI چیست ؟

Container runtime interface ، با توجه به صحبت بالا گفتیم که k8s خودش container بالا نمیاره و از طریقCRI این امر انجام میشه که ما CRI های مختلفی داریم از جمله CRI-O , CntainerD,Docker Engine که میتوان از انها استفاده کرد .

Runtime class چیست ؟

امکان این هست که ما روی هر node مون بیایم و CRI مختلف بیارم بالا که میتونیم بگیم برای این که container مد نظر رو بیاریم بالا از کدام cri استفاده کنه

SWARM & K8S

ما برای مقایسه ، باید به این موضوع بپردازیم که فرق Docker Swarm با K8S چیست ؟

یکی از مواردی که مورد بحث است این هست که k8s cluster از ابزار 3 RD party استفاده میکند که این امر دسته واحد DevOps یا Operation رو باز تر میکنه چرا که swarm محدود به یک سری storage / network بود اما در k8s به لطف ابزار 3 RD party ما دستری بیشتری به عنوان network / storage ها داریم که مانند CRI این دو قسمت هم با CNI/CSI هندل میشود یعنی container network interface & container storage provider(interface)

مثالی از network های 3 rd party میتوان به weave /flannel /calico و .. اشاره کرد و در کنار آن برای storage هم میتوان به ceph , nfs و ... اشاره کرد

Control plane and compute machine در کوبرنتیز :


ما تویه Kubernetes cluster مون Node master ( control plane ) و node worker ( compute machine )

داریم که راجبشون با توجه به عکس بالا صحبت میکنیم :

داخل Node master ما 4 بخش مهم داریم :

API serv

Kube Scheduler

Kube Control Manager

Etcd DB

و در Node worker هم 3 بخش مهم داریم :

Kubelet

Kube Proxy

CRI

نحوه کار master با worker به این شکل هست که زمانی که RQ میاد سمت master ابتدا API Server اون رو میگیره و پردازش میکنه سپس به Scheduler ارسال میشه و از اون سمت scheduler اون رو برای worker task میکنه و به kubelet ارسالش میکنه و زمانی که worker اون task رو به اتمام برسونه به kubelet یک response بر میگردونه و در این حین همزمان kube controller هم با kubelet روی worker در ارتباط هست که از stateپاد های روی workerمطلع بشه و اونا رو داخل endpoint برای سرویس دهی قرار بده

Kuber proxy هم Packet های شبکه ای که میخواد بره سمت container ها رو دریافت میکنه و به container ها میدهد

علاوه بر اون ما روی master یک db key value داریم که موارد مهمی از جمله object ها داخل اون ذخیره میشه .

نحوه دریافت Image و راه اندازی container در کوبرنتیز :


در گذشته این امکان وجود نداشت که kubelet مستقیم به API های Docker INC متصل بشه چرا که Docker INC از Solution Cloud Native Foundation پشتیبانی نمیکرد و برای اتصال در این میان از یک wrapper استفاده میشد به اسم docker shim که یک RestAPI بود و درخواست درست Kubernetes رو به درخواست اشتباه تغییر میداد و به Container D ارسال و اون container بالا میومد ولی با گذر زمان این امکان فراهم شد که ارتباط مستقیم بین kubelet و container D با نصب مستفیم خوده container D رخ دهد .

دوستان برای درک بهتر و مفهومی تر مطالب بالا پیشنهاد میکنم حتما youtube من رو داشته باشید و ویدیو که با این موضوع گذاشتم رو مشاهده کنید : کوبرنتیز به زبان ساده