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 من رو داشته باشید و ویدیو که با این موضوع گذاشتم رو مشاهده کنید : کوبرنتیز به زبان ساده
مطلبی دیگر از این انتشارات
روش های پاک کردن مقدار از آرایه در جاوا اسکریپت
مطلبی دیگر از این انتشارات
حباب های آوازه خوان!!
مطلبی دیگر از این انتشارات
گزارش تحلیل احساسات کامنتهای آمازون برای محصولات الکسا با ۹۳درصد دقت