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 من رو داشته باشید و ویدیو که با این موضوع گذاشتم رو مشاهده کنید : کوبرنتیز به زبان ساده
مطلبی دیگر از این انتشارات
پایتونستان-مینی پروژه یک برنامه GUI-قسمت یکم
مطلبی دیگر از این انتشارات
استفاده از MinIO در پروژههای Django
مطلبی دیگر از این انتشارات
معرفی پلتفرم جاوا اسکریپت Node.js