Kubernetes 101 (1-р хэсэг)

Kubernetes гэж юу вэ?

Kubernetes нь өнөө цагийн хамгийн их хэрэглэгдэж буй container orchestration system юм. Чингэлэгүүд хөвж буй хил хязгааргүй том далайн ахмад kubernetes.

Бидний бүтээж буй системүүд ганцхан сервер дээр аз жаргалтай амьдардаг байсан цаг үе аль хэдийн ард хоцорч олон тооны биет болон хийсвэр серверүүдийг нийлүүлэн нэгэн цогц мэт ажиллуулах шаардлага тулгарснаар энэхүү түүх эхэлсэн болов уу. 10 хүрэхгүй жилийн өмнө docker container хэрэглээнд өргөн нэвтрээгүй, сураг ч үгүй байхад бид серверүүдээ хэрхэн малладаг байсан бэ гэвэл одоо бодоход уйлмаар. Өмнөх нийтлэлүүд дээр container гэж юу болох яагаад од болон гялалзаж бидний амьдралын ямар асуудлуудыг шийдээд байгааг дурдсан тул энэ удаад шууд үндсэн сэдэврүүгээ оръё.

Docker нь нэг дор зөвхөн нэг л container-той харьцах боломж олгодог бол энэ нь цаашид маш олон тооны container-уудтай ажиллахад асуудалтай болохыг ажигласан хүмүүс docker-compose гэсэн нэгэн багаж бүтээжээ. Энэ нь docker run .. docker build.. г.м янзан бүрийн гараар бичдэг командуудыг файлруу урьдчилан бичээд тэрийгээ ажиллуулах, мөн нэг л файл дотор docker-оор хийж болох бүх зүйлийг багтааж чадсан тул энэхүү багаж нь яваандаа docker-н албан ёсны хөгжүүлэлтрүү нийлсэн байдаг. Адаглаад 2 container-ыг хооронд нь яриулахын тулд дан ганц docker-оор бол олон команд цувуулан бичих хэрэг гардаг. Тэгвэл тэр бүхнээ урьдчилаад файл болгоод бэлтгэчих юм бол дараа нь нөгөө файлаа өөр хүнд өгөөд шууд ажиллуулахад бэлэн тул маш том боломжийг өгч байгаа юм. Жишээлбэл erxes.io програмыг ажиллуулахын тулд нэг л файл байхад хангалттай. Файлаа хуулаад docker-compose up -d ганц л командаар бүх зүйл ажиллана. 2 3н database, олон жижиг сервисүүдийг нийлүүлээд минутын дотор асааж болох болсон нь надад маш их таалагддаг. Гэхдээ асуудал үүгээр дууссангүй. Бид энд зөвхөн 1 л серверийн талаар яриад байдаг, гэтэл 10 20 байтугай хэдэн мянган сервер хөдөлгөдөг газруудад энэ нь үнэндээ шийдэл биш юм. Тэгвэл тэр улсуудын асуудлыг яаж шийдэх вэ гэсэн асуултанд Google компани аль хэдийн хариулт олсон байж. Тэр нь kubernetes юм. Kubernetes-г 2014 онд Google-с open source болгоод CNCF буюу Cloud Native Computing Foundation гэж санг байгуулан хамгийн ууган програм нь Kubernetes болж хандивлагдсан юм. Гэхдээ Google-н сайн эрс аль 2000-д оноос container-г өргөн хэрэглэж байсан бөгөөд 2003 онд анх Borg нэртэй container orchestration system бүтээж эхэлсэн нь одоогийн kubernetes юм. Google одоо ч өөрсдийн дотоод хэрэгцээндээ энэхүү системээ ашигладаг. K8s-н шийдэж буй гол асуудал нь олон тооны container-уудыг олон тооны серверүүдэд хуваарьлан ажиллуулж, container-уудын хоорондох холбоог аюулгүй үүсгэж, тогтвортой ажиллагааг нь хангах зэргээр container-той холбоотой төсөөлөл юу байна тэр бүгдийг боломжтой болгож байгаа юм. K8s шиг олон ийм төрлийн технологиуд гарч ирсэн ч ихэнх нь k8s-д бууж өгсөн. Бүхэл бүтэн 10 гаруй жилийн хөгжүүлэлт явцан системийг яаж гүйцэхэвдээ. Цагтаа үнэлгээ нь 1.2$ тэрбум хүрч байсан Docker Inc хүртэл энэ өрсөлдөөнд хүч үзээд бараагүй одоо бараг дампуурах дээрээ тулаад буй. Container гэж ийм юм байдаг юм, ингэж ашигла гээд гоё гаргаад ирчихсэн мөртлөө яг хүнд хэрэгтэй хэсгийг нь хийгээгүй болохоор арга ч үгүй биз. Мянган container-г гараараа docker run гээд сууж байлтай биш.


Kubernetes бүтэц, архитектур.

k8s-н бүтцийг тайлбарлахын тулд яг гоё харуулсан зураг олоогүй тул хэд хэдэн зураг хавсаргалаа. Эхний зурагт харуулснаар kubernetes нь master node болон worker node гэсэн 2 хэсэгт хуваагддаг. Master node дээр зөвхөн k8s-н дотоод сервисүүд ажиллах бөгөөд worker node дээр хэрэглэгчийн container-ууд ажиллана.

kube1
kube2

2 дах зурагт Master-н бүтцийг илүү дэлгэрэнгүй харуулсан байна. Master node-г мөн control plane node гэж нэрлэдэг. Master дээр Api сервер, etcd database-тэй ажиллах бөгөөд api сервертэй controller manager, scheduler 2 харьцаж cluster-г удирдана.

3 дах зурагт worker node дээр Kubelet, kube-proxy болон Pod-ууд ажиллаж байгаа болохыг харуулсан байна. Kubelet нь Api сервертэй харьцаж мэдээллээ авах бөгөөд Pod буюу хэрэглэгчийн container-уудыг worker node-үүд дээр хуваарьлан ажиллуулах үүрэгтэй. kube-proxy нь node-үүд дээр ажиллаж буй pod-уудын хоорондын холболт, сүлжээг ажиллуулах үүрэгтэй.