Kubernetes-н ажиллагааны зарчмыг ойлгох нь

Tumenzul Batjargal
5 min readMay 18, 2020

--

Kubernetes-н үйл ажиллагааны зарчмыг судлаж байх явцад уншиж байсан хамгийн энгийн, ойлгомжтой тайлбарлсан эх сурвалжуудаас орчуулан хүргэж байгаа болно.

Өмнөх нийтлэлээр Kubernetes /K8s гэж товч нэрээр нь дурдаад явъя/ платформын яг юу хийдэг талаар товч тайлбарласан ба энэ удаад K8s-н бүрдэл хэсгүүд, ажиллагааны зарчмын талаар дэлгэрэнгүй тайлбарлая. K8s нь ерөнхийдөө виртуал болон физик серверүүдийн нөөцийг API ашиглан удирдах боломжтой болгож байгаа. Жишээ нь хөгжүүлэгч нар containerized аппликэйшнүүдийг ажиллуулах, өргөтгөхдөө K8s-н API-г ашиглаад хялбархан үүсгэж болно.

K8s-н архитектур болон бүрдэл хэсгүүд

K8s дээр нэг аппликэйшн байрлуулах хэрэгтэй боллоо гэхэд дараах алхмын дагуу ажлууд хийж гүйцэтгэгддэг.

  1. Админ нь өөрийн ажиллуулахыг хүсэж буй аппликэйшн-н ерөнхий мэдээлэл, шинж чанар, төлөвийг агуулсан manifest файлыг үүсгэнэ. Тухайн файлын агуулга нь YAML дээр бичигдсэн байх ёстой.
  2. Урьдчилан бэлтгэсэн YAML файлыг CLI (command line interface) эсхүл UI (user interface) ашиглан Kubernetes API серверт хүргэж өгнө.
  3. Kubernetes нь тухайн файлыг Key-Value Store (etcd) гэх өгөгдлийн санд хадгалдаг.
  4. Manifest файл дээр тодорхойлогдсон аппликэйшнүүдийг кластерт үүсгэн ажиллуулна.
  5. Kubernetes нь уг үүсгэсэн аппликэйшнүүдийг анх тодорхойлж өгсөн төлөвтөө байгаа эсэхийг тасралтгүй хянадаг.
Kubernetes architecture

Kubernetes кластер байгуулахад 2 төрлийн node үүсгэж тохируулах ба master болон worker гэж ангилдаг. Master node нь кластерт байгаа node-ууд болон түүн дээр ажиллаж буй Pod-уудыг удирдах зориулалттай бол worker дээр хэрэглэгчийн pod-ууд ажилладаг. Цаашид аппликэйшн гэхээсээ илүү Pod гэсэн нэршлийг ашиглаж явах болно.

Master node дотор юу юу ажилладаг вэ?

API Server

API Server нь Kubernetes-н хамгийн чухал хэсгийн нэг бөгөөд кластер дотор байрлах бүх бүрдэл хэсгүүд хоорондоо API Server-р дамжуулж харилцдаг. K8s-н хэлмэрч гэж ойлгож болно.

Key-Value store (etcd)

Key-Value store нь кластерын тохиргоо, төлөв байдал гэх мэт бүхий л мэдээллийг хадгалж байдаг өгөгдлийн сан юм. Master node нь etcd баазаас node болон pod, container-уудын төлөв байдлын мэдээллийг авч шалгаж байдаг.

Components of Master node

Controller

Controller нь node болон pod-уудын төлөвийг API серверээс авч шалган зааж өгсөн төлөвийн дагуу ажиллуулахыг зорьдог. Хэрэв ямар нэгэн node болон pod нь анх зааж өгсөн төлөвөөс өөрчлөгдсөн байвал (node болон pod унтрах, зааж өгсөн тооноос цөөн эсхүл олон хуулбар ажиллах .гм) үүнийг засаж заасан төлөвт нь оруулдаг.

Scheduler

Scheduler нь API Server-с шинэ Pod үүсгэх хүсэлт орж ирэхийг хүлээж байдаг ба ирвэл хүсэлтийг хамгийн зөв node-руу хуваарилдаг. Хэрэв тухайн Pod-г ажиллуулах тохиромжтой node байхгүй бол Pending буюу хүлээлгийн төлөвт оруулдаг.

Worker node дотор юу юу ажилладаг вэ?

Worker node нь API Server-с шинэ даалгавар орж ирэхийг хүлээж байдаг ба ирвэл даалгаврыг гүйцэтгээд буцаан Master node руугаа мэдээллийг нь илгээж байдаг. Master node нь дараах бүрэлдэхүүн хэсгүүдийг агуулдаг.

Components of Worker node

Kubelet

Kubelet нь кластерт холбогдсон бүх node-ууд дээр ажиллаж байдаг ба Kubernetes нь agent гэж ойлгож болно. Хэрэв node дээр kubelet суусан бол тухайн node-н CPU, RAM болон storage нь кластерийн нэг хэсэг болж ажилладаг. Kubelet нь API Server-с шинэ даалгавар орж ирэхийг хүлээж байдаг бөгөөд ирсэн даалгаврыг гүйцэтгээд буцаан Master node руугаа мэдэгддэг. Мөн node дээр ажиллаж байгаа Pod-уудын төлөвийг хянах үүргийг давхар гүйцэтгэдэг ба ямар нэгэн pod нь бүрэн ажиллахгүй байвал master node-руу мэдэгддэг.

Container Runtime

Image registry-с image татаж аван container-г асаах унтраах зориулалттай 3 дагч software юм. Бидний сайн мэдэхээр Docker. Гэхдээ зөвхөн docker ч биш бас өөр төрлийн runtime-г /CIO-O, Containerd, frakti/ дэмжиж ажиллах боломжтой байдаг.

Kube-Proxy

Kube-Proxy нь node болгон дээр ажиллах ба node-уудын IP хаягжилт, iptables, routing болон loadbalancing гэх мэт зүйлсийг хэрэгжүүлдэг.

Pod

Pod бол таны containerized аппликейшн юм. Энэ нь Kubernetes дээрх хамгийн жижиг нэгж ба pod нь дотроо 1 болон хэд хэдэн container агуулж болдог. Хэрэв та өөрийн аппликэйшнаа өргөтгөх шаардлага гарвал Pod-нхоо тоог нэмэхэд л хангалттай. Таны үүсгэсэн pod-д ямар нэг асуудал гарч бүрэн ажиллаж чадахгүй байвал k8s нь үүнийг зүгээр л устгаад шинээр дахин үүсгэдэг. Алдаа гарсан Pod-г засах гэж оролддоггүй гэсэн үг.

Kubernetes Services

Хэрэв таны Pod дээр асуудал гараад Kubernetes нь үүнийг устгаад шинээр үүсгэлээ гэж бодъё. Гэтэл та программаа зөвхөн хуучин ажиллаж байсан Pod-тойгоо хатуу холбож өгсөн бол яах вэ? Энэ асуудлыг шийдэхийн тулд Service гэх ойлголт гарч ирсэн ба энэ нь дээрх Pod-н тогтворгүй байдлаас үүдэх асуудлуудыг бүрэн шийдсэн юм.

Service нь кластер дээр ажиллаж байгаа Pod-руу хандахад ашиглагдах бөгөөд тухайн service рүү хандахад ямар Pod дуудагдахыг selector гэх зүйлсээр тодорхойлдог. Service нь дотроо мөн төрлүүдтэй /ClusterIP, NodePort, LoadBalancer/ бөгөөд ашиглах гэж буй шаардлагаас хамаарч сонгож болно.

Service нь хэрхэн ажилладаг вэ?

Гаднаас А гэсэн сервис рүү хандлаа гэж бодъё. Тухайн А сервисийн selector дээр nginx гэж бичигдсэн гэж байвал кластер дотор байгаа pod-уудаас nginx гэсэн selector-той pod-уудыг хайж олоод хүсэлтээ дамжуулна гэсэн үг.

Service workflow

Kubernetes cluster-т өөр юу хэрэгтэй вэ?

Kubernetes нь Storage /CSI/ болон Pod хоорондын сүлжээний /CNI/ үйл ажиллагааг бүрэн удирдаж болохуйц interface-г хөгжүүлсэн байдаг бөгөөд гуравдагч хөгжүүлэлтийн компаниуд уг interface-г ашиглаад өөр өөрийн онцлогийг агуулсан бүтээгдэхүүнүүдийг гаргасан байдаг бөгөөд та хэрэв storage болон networking шийдэл хэрэгжүүлэх байгаа бол илүү дэлгэрэнгүй судлаад үзэх боломжтой. Storage-н хувьд тусдаа нэг сэдэв болж явах учир дараагийн цувралаар уншаарай.

Эх сурвалжууд:

--

--