Posts

  • Home -
  • news -
  • Kubernetes гэж юу вэ?
research
  • 05/11
  • 2021

Kubernetes гэж юу вэ?

Kubernetes гэж юу вэ?

Kubernetes бол контейренүүдийн ажиллагаа болон автоматчлал ба декларатив тохигоог хөнгөвчилдөг үйлчилгээнүүдийг удирдахад зориулагдсан зөөрвийн , өргөтгөх боломжтой нээлттэй эхийн платформ юм. Мөн энэ нь асар том, хурдацтай хөгжиж буй экосистемтэй. Kubernetes –ийн үйлчилгээ, дэмжлэг, хэрэгсэлүүдийг бид өргөн ашиглах боломжтой.

Kubernetes гэдэг нэр нь жолоодогч болон нисгэгч гэсэн утгатай Грек үгнээс гаралтай. 2014 онд Google компаниас Kubernetes –ийг нээлттэй эх болгосон. Kubernetes нь Google – ийн шилдэг санаануудаар продакшины ажлын ачааллыг ажлуулдаг 15 жилийн туршлагыг олон нийтийн практиктэй нэгтгэдэг.

Цаг хугацааг буцаая

Уламжлалт байршуулалтын эрин үе (traditional deployment) – Байгууллагууд физик серверүүд дээр програмуудыг ажлуулдаг байсан. Физик сервер дээрх програмуудын ашиглаж буй нөөцийн хамгийн дээд  хэмжээ хязгаарыг тодорхойлох арга байдаггүй байсан бөгөөд энэ нь нөөц хуваарилалтын асуудал үүсгэдэг байсан. Жишээ нь:  Хэрэв олон програм нэг физик сервер дээр ажиллавал нэг програм ихэнхи нөөцийг авч үүнээс шалтгаалан бусад програмууд гүйцэтгэл муутай болох тохиолдол гардаг.  Гэвч энэ нь нөөцийг бүрэн ашигладаггүй тул цар хүрээгээ тэлээгүй. Мөн энэ нь олон физик серверүүдийг ажлуулах,арчлахад байгууллагууд хөрөнгө их зарцуулдаг, зардал өндөртэй байсан.

Виртуалчлагдсан байршуулалтын эрин үе (virtualized deployment) - Үүний шийдэл болгож виртуалчлалыг нэвтрүүлсэн. Энэ нь нэг физик серверийн CPU дээр олон виртуал машин ажлуулах боломжийг олгодог. Виртуалчлал нь програмуудыг виртуал машинуудын хооронд тусгаарлах боломж олгодог бөгөөд нэг програмын мэдээлэл рүү өөр програм чөлөөтэй нэвтрэх боломжгүй болгодог тул аюулгүй байдлын түвшинг хангадаг. Виртуалчлал нь физик сервер дэх нөөцийг илүү сайн ашиглах боломжийг олгодог бөгөөд програмыг хялбархан нэмж, шинэчлэх, тоног төхөөрөмжийн зардлыг бууруулах, өргөтгөх гэх мэт олон боломжуудтай. Виртуал машин бүр вируалчлагдсан техник хангамжийн дээр байрладаг өөрийн үйлдлийн системтэй бөгөөд бусад бүх бүрэлдэхүүн хэсэгүүдийг ажлуулдаг.

Контейнер байршуулалтын эрин үе (container deployment era):  Контейнерүүд виртуал машинтай төстэй боловч үйлдлийн системийн шинж чанаруудыг програмуудад хуваалцаж мөн өөр хооронд нь тусгаарладаг.  Тиймээ контейнерүүдийг lightweight гэж үздлэг. Виртул машинтай адил контейнер нь өөрийн файл систем, CPU, санах ой, процессийн зай зэргийг өөртөө багтаадаг. Контейнерүүд нь үндсэн дэд бүтэцээсээ салсал тул контейнерүүдийг слауд(cloud) болон бусад үйлдлийн системийн тархацууд руу зөөвөрлөх боломжтой.

Контейнерүүд нь дараах нэмэлт боломжуудыг өгдөг тул илүү түгээмэл болсон. Үүнд:

  • Agile аргачлалаар програм бүтээх, байршуулах: виртуал машины image-тэй харьцуулахад контейнерийн image илүү хялбар мөн үр ашигийг нэмэгдүүлсэн.
  •  Dev болон Ops –ийг салгах асуудал: контейнер image үүсгэх хугацаа нь байршуулах хугацаанаас илүү хурдан ба энэ нь дэд бүтэцээс програмыг салгадаг.
  • Ажиглалт нь зөвхөн үйлдлийн системийн түвшний мэдээлэл, хэмжүүрийг төдийгүй програмын эрүүл ажиллагаа болон бусад дохионуудыг хамардаг.
  • Хөгжүүлэлт, тест ба продакшин орчны тогтвортой байдал: Зөөврийн компьютер дээр клауд(cloud) дээр ажилладагтай адилхан ажилладаг.
  • Клауд(cloud) ба Үйлдлийн системийн тархацын зөөвөрлөх боломж: Ubuntu, RHEL, CoreOS, on-premises, томоохон public cloud гэх мэт бусад ямар ч орчинд ажиллах боломжтой.
  • Төвлөрсөн аппликейшний удирдлага: Виртуал техник хангамж дээр үйлдлийн систем ажиллуулахаас логик нөөцийг ашиглан үйлдлийн систем дээр програм ажиллуулах хүртэлх абстракт түвшинг өгсөдөг.
  • Тусгаарласан, тархсан, уян хатан микро үйлчилгээнүүд: Програмууп нь жижиг, бие даасан хэсгүүдэд хуваагддаг бөгөөд тэдгээрийг динамикаар байрлуулж, удирдах боломжтой байдаг. Харин нэг том зориулалтын машин дээр ажилладаг монолоток биш.
  • Нөөцийг тусгаарлах: програмын гүйцэтгэлийг урьдчилан таамаглах боломжтой.
  • Нөөцийн ашиглалт: өндөр үр ашиг, нягтрал

Kubernetes юу хийж чадах вэ? Яагаад танд хэрэгтэй вэ?

Контейнерууд бол програмуудаа багцлах, ажилууллах нэгэн сайн арга юм. Продакшин орчинд програмуудыг зогтолтгүйгээр ажиллуулдаг контейнеруудыг удирдах шаардлагатай. Жишээлбэл нэг контейнерийн ажиллагаа зогсвол өөр нэг контейнерийг асааж эхлүүлэх хэрэгтэй. Хэрэв энэ үйлдлийг нэг систем зохицуулдаг байсан бол хялбар биш гэж үү?

Kubernetes биднийг ийм байдлаас аврах гэж ирсэн билээ. Kubernetes нь тархсан системүүдийг уян хатан ажиллуулах боломжийг танд өгнө. Энэ нь таны програмыг өргөжүүлэх, алдаа гарахад анхаарах, байршуулалтын хэв маягийг хангаж өгдөг. Жишээ нь Kubernetes таны системийн байршуулалтыг амархан удирдах боломжтой.

Kubernetes таныг дараах зүйлсээр хангана:

Service discovery and load balancing /үйлчилгээг эхлүүлэх ба ачааллыг тэнцвэржүүлэх/ - Kubernetes нь DNS болон ip хаяг ашиглан контейнеруудийг илрүүлэх боломжтой. Хэрэв контейнер руу чиглэсэн урсгал их байвал Kubernetes нь ачааллыг тэнцвэржүүлж, сүлжээний урсгалыг хуваарилах боломжтой ба ингэсэнээр байршуулалт(deployment) тогтвортой байх болно.

Storage Orchestration /хадгалалтын удирдлага/ - Kubernetes нь дотоод storage, public cloud гэх мэт таны сонгосон хадгалах системийг автоматаар холбож боломжийг олгодог.

Automated rollouts and rollbacks /автоматаар нэвтрүүлэх, хойшлуулах/-  Та kubernetes ашиглан байршуулсан контейнеруудынхаа хүссэн төлөвийг тодорхойлж болох бөгөөд энэ нь бодит төлөвийг хүссэн төлөв рүү өөрчлөх боломжтой. Жишээлбэл та kubernetes – ийг автоматжуулж% байршуулахад зориулж шинэ контейнер үүсгэх, одоо байгаа контейнерүүдийг устгах, тэдгээрийн бүх нөөцийг шинэ контейнерт нэвтрүүлэх боломжтой.

Automatic bin packing – Kubernetes нь контейнержуулсан таскуудыг гүйцэтгэхэд ашиглаж болох төхөөрөмжүүдийн кластераар хангагдах боломжтой. Контейнер бүрд шаардлагатай CPU, RAM –ний хэмжээг Kubernetes-ээр тохируулж болно. Kubernetes нь нөөцийг хамгийн сайнаар ашиглахын тулд  төхөөрөмж(nodes) дээр контейнерийг хамгийн тохиромжтой байдлаар хангаж ажлуулдаг.

Self-healing /өөрийгөө засах/ -  Kubernetes нь алдааны асуудлаас болж ажиллах боломжгүй болсон контейнеруудыг дахин эхлүүлэх, контейнеруудыг солих, орлуулах, хэрэглэгчийн тодорхойлсон ажиллагааг шалгах үйлдэлд хариу өгөхгүй байгаа контейнеруудыг устгах мөн тэднийг алдаагүй бүрэн ажиллах хүртэл хэрэглэгчдэд зарлахгүй байх зэрэг үйлдлүүдийг гүйцэтгэдэг.

Secret and configuration management /нууц ба тохиргооны удирдлага /- Kubernetes нь нууц үг, OAuth токен, болон SSH түлхүүр зэрэг нууц мэдээллийг хадгалах, удирдах боломжийг танд олгоно. Та контейнер image – ийг дахин сэргээхгүйгээр мөн stack тохиргооны нууцуудыг задруулахгүйгээр програмын тохиргоо, нууцуудад шинэчлэлт хийж мөн байршуулах боломжтой.

Kubernetes – ийн талаарх зөв ойлголтууд

Kubernetes нь бүх зүйлийг багтаасан уламжлалт PaaS(Platform as a Service) систем биш юм. Kubernetes техник хангамжийн түвшинд биш контейнерийн түвшинд ажилладаг тул байршуулах, өргөжүүлэх, ачааллыг тэнцвэржүүлэх болон хэрэглэгчид өөрсдийн бүртгэл, хяналт, сэрэмжлүүлэгийн шийдлийг нэгтгэх гэх мэт PaaS (Platform as a Service) –д нийтлэг хэрэглэгддэг шинж чанаруудаар  мөн хангадаг. Гэвч Kubernetes нь монолитик биш бөгөөд эдгээр дефуалт шийдлүүд нь нэмэлт боломж юм. Kubernetes нь хөгжүүлэгчдийн платформыг бий болгоход шаардлагатай блокуудыг өгдөг боловч хэрэглэгчийн сонголт, уян хатан чанарыг хадгалдаг.

Kubernetes:

  • Програмын төрлийг хязгаарладаггүй. Kubernetes нь мэдээлэл боловсруулах, stateless, statefull зэргийг агуулсан маш олон төрлийн ажлын ачааллыг дэмжих зорилготой.  Хэрэв програм нь контейнер дээр ажиллах боломжтой бол Kubernetes дээр маш сайн ажиллах ёстой.
  • Эх кодыг ашигладаггүй бөгөөд програмын бүтээдэггүй. Тасралтгүй нэгтгэх, хүргэх, байршуулах (CI/CD)  ажлын урсгалыг байргууллагын техникийн шаардлагаар тодорхойлдог.
  • Дундын програм хангамж (message bus), өгөгдөл боловсруулах хүрээ (Spark), өгөгдлийн сан (MySQL), кейш, кластер систем (Ceph) зэрэг хэрэглээний түвшиний үйлчилгээ үзүүлдэггүй. Эдгээр бүрэлдэхүүн хэсгүүд нь Kubernetes дээр ажиллах боломжтой ба “Open Service Broker” гэх мэт зөөврийн механизмуудаар дамжуулан Kubernetes дээр ажилладаг програмуудар хандаж болно.
  • Бүртгэл хийх, хяналт тавих, анхааруулах шийдлүүдийг зөөж өгөхгүй. Энэ хэмжүүрийг экспортлох ба цуглуулах механизм зэрэг интергацаар хангадаг.
  • Тохиргооны хэл/систем(Jsonnet гэх мэт)-ээр хангахгүй. Декларативаар тодорхойлогдсон хэлбэрийн API-р хангадаг.
  • Тохиргоо, засвар үйлчилгээ, менежмент, өөрөө өөрийгөө засах цогц системийг хангаж өгдөггүй.
  • Нэмж дурдахад Kubernetes бол зүгээр нэг зохион байгуулалтын систем биш юм. Kubernetes нь Оркестрийн хэрэгцээг арилгадаг. Оркестрийн техникийн тодорхойлолт нь тодорхойлогдсон  ажлын урсгалын гүйцэтгэл юм. Жишээ нь эхлээд А, дараа нь В, дараа нь С гэх мэт. Үүний эсрэгээр, Кубернетес нь одоогийн төлөвийг хүссэн төлөв рүү тасралтгүй чиглүүлдэг бие даасан, нэгтгэх боломжтой хяналтын үйл явцын багцыг агуулдаг. А-аас С-т яаж хүрэх нь хамаагүй. Төвлөрсөн хяналт шаардлагагүй Үүний үр дүнд ашиглахад хялбар, илүү хүчирхэг, бат бөх, уян хатан, өргөтгөлтэй систем бий болно.

 

Сүүлийн үеийн хамгийн ирээдүйтэй технологиор нэрлэгдэж байгаа  Docker & Kubernetes талаар илүү ихийг 75759997 , info@ict-training.mn хаягаар авах боломжтой. 

                                                                                          Дэлхийд өрсөлдөх Монгол инженерийг бид бэлтгэнэ

                                                                                                          

                                                                                                                                      -o0o-