Skip to content
Dokumentatsiya
Kubernetesga Kirish

Kubernetesga Kirish

k8s

Kubernetes konteynerlashtirilgan workloadlari va servicelarni boshqarish uchun portativ, kengaytiriladigan, open source platforma bo'lib, deklarativ konfiguratsiya va avtomatlashtirishni osonlashtiradi. U katta, tez rivojlanayotgan ekotizimga ega. Kubernetes servicelari, supporti va tollari keng tarqalgan.

Kubernetes nomi yunon tilidan kelib chiqqan bo'lib, boshqaruvchi(helmsman) yoki uchuvchi(pilot) degan ma'noni anglatadi. K8s qisqartma sifatida K va s o'rtasidagi sakkizta harfni hisoblash natijasida paydo bo'ladi. Google Kubernetes loyihasini 2014-yilda ochiq manbalar asosida yaratdi. Kubernetes Googlening 15 yildan ortiq ishlab chiqarish workloadlarini boshqarish tajribasini hamjamiyatning eng ilg‘or g‘oyalari va amaliyotlari bilan birlashtiradi.

Ortga qaytish

Keling, o'tmishga qaytish orqali Kubernetes nima uchun juda foydali ekanligini ko'rib chiqaylik.

k8s

Traditional deployment(An'anaviy deployment) davri: Dastlabki paytlarda tashkilotlar jismoniy serverlarda applicationlarni ishga tushirgan. Jismoniy serverdagi applicationlar uchun resurs chegaralarini aniqlashning hech qanday usuli yo'q edi va bu resurslarni taqsimlash bilan bog'liq muammolarni keltirib chiqardi. Misol uchun, agar jismoniy serverda bir nechta applicationlar ishlayotgan bo'lsa, bitta dastur resurslarning ko'p qismini egallashi va natijada boshqa applicationlarning ishlamay qolishi holatlari bo'lishi mumkin. Buning yechimi har bir dasturni boshqa jismoniy serverda ishga tushirish bo'ladi. Ammo bu ko'lamli emas edi, chunki resurslar to'liq foydalanilmagan va tashkilotlarga ko'plab jismoniy serverlarni saqlash qimmatga tushdi.

Virtuallashtirilgan deployment davri: Yechim sifatida virtualizatsiya joriy etildi. Bu sizga bitta jismoniy server protsessorida bir nechta Virtual Mashinalarni (VM) ishlatish imkonini beradi. Virtualizatsiya applicationlarni VMlar o'rtasida izolyatsiya qilish imkonini beradi va xavfsizlik darajasini ta'minlaydi, chunki bitta applicationning ma'lumotlariga boshqa dastur tomonidan erkin kirish mumkin emas.

Virtualizatsiya jismoniy serverdagi resurslardan yaxshiroq foydalanishga imkon beradi va yaxshi miqyoslash imkonini beradi, chunki dastur osongina qo'shilishi yoki yangilanishi, qurilma xarajatlarini kamaytiradi va boshqalar. Virtualizatsiya yordamida siz jismoniy resurslar to'plamini bir martalik virtual mashinalar klasteri sifatida taqdim etishingiz mumkin.

Har bir VM virtuallashtirilgan hardware ustidagi barcha komponentlarni, shu jumladan o'z operatsion tizimini boshqaradigan to'liq mashinadir.

Container deployment davri: Konteynerlar VM-larga o'xshaydi, ammo ular operatsion tizimni (OS) applicationlar orasida baham ko'rish uchun qulay izolyatsiya xususiyatlariga ega. Shuning uchun konteynerlar yengil deb hisoblanadi. VM ga o'xshab, konteyner o'zining fayl tizimiga, protsessor ulushiga, xotiraga, process spacega va boshqalarga ega. Ular asosiy infratuzilmadan ajratilganligi sababli, ular cloudlar va OS distribution orqali ko'chma hisoblanadi.

Konteynerlar mashhur bo'ldi, chunki ular qo'shimcha imtiyozlar beradi, masalan:

  • Izolyatsiya: Konteynerlar applicationlarning izolyatsiya qilingan muhitda ishlashini ta'minlaydi. Bu ularning o'z fayl tizimi, tarmoq va izolyatsiya qilingan process spacega ega ekanligini anglatadi. Ushbu izolyatsiya, konteyner qayerda ishlayotganidan qat'i nazar, environmentning izchil bo'lishini ta'minlaydi.

  • Environmentlardagi izchillik: Konteynerlar yordamida ishlab chiquvchilar dasturni ishlab chiqish, sinovdan o'tkazish va ishlab chiqarishda bir xil tarzda ishlashini ta'minlashi mumkin. Klassik "bu mening mashinamda ishlaydi" muammosi deyarli yo'q qilinadi.

  • Yengillik(Lightweight): Konteynerlar o'z operatsion tizimiga muhtoj emas, balki host tizimining OS kernelini baham(share qiladi) ko'radi. Bu ularni an'anaviy virtual mashinalarga qaraganda yengilroq va tezroq yuklash imkonini beradi.

  • Resurslardan samarali foydalanish: Konteynerlar tizim resurslaridan yaxshiroq foydalanish imkonini beradi, chunki ular VM larga qaraganda kichikroq maydonga ega. Bir vaqtning o'zida bir nechta konteynerlar og'ir yuksiz ishlashi mumkin.

  • Mikroservislar: Konteynerlar mikroservislar arxitekturasi uchun juda mos keladi. Har bir mikroservis konteynerga joylashtirilishi mumkin, bu esa uni mustaqil ravishda ishga tushirish va kengaytirish imkonini beradi.

  • Portativlik: Docker yoki containerd kabi konteyner runtimeni qo'llab-quvvatlaydigan har qanday muhitda konteynerlarni ishga tushirishingiz mumkin. Bu ishlab chiquvchining local mashinasida, data centerdagi jismoniy mashinada yoki public cloudda boʻlishi mumkin.

  • Masshtablilik va Orkestratsiya(Scalability and Orchestration): Kubernetes kabi orkestrlash vositalari yordamida konteynerlar talabga qarab avtomatik ravishda kattalashishi yoki kichraytirilishi mumkin. Ular, shuningdek, osongina boshqarilishi, yangilanishi yoki orqaga qaytarilishi mumkin.

  • DevOps va Continuous Integration/Continuous Deployment (CI/CD): Konteynerlar continuous integration va continuous deploymentni rag'batlantirish orqali DevOps tashabbuslarini qo'llab-quvvatlaydi. Buning sababi shundaki, konteynerlar barqaror muhitni ta'minlash va tez, takrorlanadigan tuzilmalarni qo'llab-quvvatlaydi.

  • Qatlamli fayl tizimi(Layered File System): Masalan, Docker layerlarga ruxsat beruvchi union file systemdan foydalanadi. Bu shuni anglatadiki, konteynerlar bo'ylab umumiy fayllar almashish mumkin, bu saqlash maydonini(storage footprint) kamaytiradi va imageni tezroq yuklab oladi.

  • Ekotizim va toollar: Konteyner texnologiyasining yuksalishi konteynerlarni boshqarish, monitoring, xavfsizlik va orkestratsiya atrofida aylanadigan toollar, platformalar va xizmatlarning boy ekotizimiga olib keldi.

  • Rapid Deployment: Konteynerlarni tezda ishga tushirish, to'xtatish yoki ko'paytirish mumkin, chunki ularda to'liq virtual mashinalar yuki yo'q.

  • Xarajatlarni tejash: Konteynerlar resurslardan samarali foydalanish tufayli xarajatlarni tejashga olib kelishi mumkin, bu an'anaviy virtualizatsiyaga qaraganda ko'proq applicationlarning bir xil mashinada ishlashiga imkon beradi.

Nima uchun sizga Kubernetes kerak va u nima qila oladi

Konteynerlar applicationlaringizni birlashtirish va ishga tushirishning yaxshi usuli hisoblanadi. Ishlab chiqarish muhitida siz applicationlarni ishga tushiradigan konteynerlarni boshqarishingiz va uzilishlar bo'lmasligiga ishonch hosil qilishingiz kerak. Misol uchun, agar konteyner ishdan chiqsa, boshqa konteyner ishga tushishi kerak. Agar bu xatti-harakat tizim tomonidan boshqarilsa, osonroq bo'lmaydimi?

Shunday qilib, Kubernetes yordamga keladi! Kubernetes sizga taqsimlangan tizimlarni(distributed system) barqaror ishlash uchun asos yaratadi. U applicationgiz uchun masshtabni o'zgartirish va uzulishlar haqida g'amxo'rlik qiladi, deployment patternlarini taqdim etadi va boshqalar. Masalan: Kubernetes tizimingiz uchun konteynerlarni deploy qilishni osongina boshqarishi mumkin.

Kubernetes sizga quyidagilarni taqdim etadi:

  • Service discovery va load balancing Kubernetes DNS nomi yoki o'z IP manzilidan foydalangan holda konteynerni expose qilishi mumkin. Agar konteynerga trafik yuqori bo'lsa, Kubernetes load balance va distribute barqaror bo'lishi uchun tarmoq trafigini taqsimlashi mumkin.
  • Storage orchestration Kubernetes sizga o'zingiz tanlagan storage systemini, masalan, local storagelar, public cloud provayderlari va boshqalarni avtomatik ravishda o'rnatish imkonini beradi.
  • Automated rollouts va rollbacks(Avtomatlashtirilgan ishga tushirish va orqaga qaytarish) Kubernetes yordamida deploy qilingan konteynerlaringiz uchun kerakli holatni tasvirlashingiz mumkin va u actual stateni boshqariladigan tezlikda kerakli statega o'zgartirishi mumkin. Masalan, siz Kubernetes-ni deploy qilishingiz uchun yangi konteynerlar yaratish, mavjud konteynerlarni olib tashlash va ularning barcha resurslarini yangi konteynerga qabul qilish uchun avtomatlashtirishingiz mumkin.
  • Automatic bin packing Siz Kubernetes-ga konteynerlashtirilgan vazifalarni bajarish uchun foydalanishi mumkin bo'lgan nodelar klasterini taqdim etasiz. Siz Kubernetesga har bir konteynerga qancha protsessor va xotira (RAM) kerakligini aytasiz. Kubernetes resurslaringizdan unumli foydalanish uchun konteynerlarni nodelaringizga deploy qilishi mumkin.
  • Self-healing(o'z o'zini davolash) Kubernetes self-healing xususiyatiga ega bo'lib, u fail(no so'glom) konteynerlarni avtomatik ravishda aniqlaydi va almashtiradi, ishlamay qolgan konteynerlarni qayta ishga tushiradi va belgilangan probelar asosida ularning sog'lig'ini doimiy ravishda tekshirib, faqat sog'lom konteynerlar trafikni olishini ta'minlaydi. Bu qo'l aralashuvisiz dastur ishonchliligi va mavjudligini ta'minlaydi.
  • Secretlar va configuration management Kubernetes parollar, OAuth tokenlari va SSH kalitlari kabi nozik maʼlumotlarni saqlash va boshqarish imkonini beradi. Konteyner imagelarini qayta tiklamasdan va stek konfiguratsiyasidagi secretlarni oshkor qilmasdan secretlarni va dastur konfiguratsiyasini deploy qilishingiz va yangilashingiz mumkin.

Kubernetes nima uchun kerak emas

Kubernetes an'anaviy, har tomonlama qamrab oluvchi PaaS (Platform as a Service) tizimi emas. Kubernetes hardware darajasida emas, balki konteyner darajasida ishlaganligi sababli, u PaaS takliflari uchun umumiy bo'lgan ba'zi umumiy qo'llaniladigan xususiyatlarni, masalan, deployment, masshtablash(scaling), load balancing(og'irlikni muvozanatlash) va foydalanuvchilarga logga yozish, monitoring qilish va ogohlantirish yechimlarini(alerting solution) birlashtirish imkonini beradi. Biroq, Kubernetes monolit emas va bu standart yechimlar ixtiyoriy va ulanishi mumkin. Kubernetes ishlab chiquvchilar platformalarini yaratish uchun qurilish bloklarini(building block) taqdim etadi, ammo muhim bo'lgan joylarda foydalanuvchi tanlovi va moslashuvchanligini saqlaydi.

Kubernetes:

  • Traditional PaaS (Platform as a Service): Kubernetes hardware yoki virtual mashina darajasida emas, balki konteyner darajasida ishlaydi, lekin u PaaSga xos bo'lgan ba'zi amaliy darajadagi xizmatlarni taqdim etmaydi, masalan, middleware (masalan, application serverlari), ma'lumotlar bazalari(database), keshlash tizimlari(caching systems) yoki ishlab developer frameworklar.

  • Qo'llab-quvvatlanadigan application turlarini cheklamaydi. Kubernetes juda xilma-xil workloadlarini, jumladan, stateless, stateful ma'lumotlari va data-processing(ma'lumotlarni qayta ishlash) workloadlarini qo'llab-quvvatlashga qaratilgan. Agar dastur konteynerda ishlashi mumkin bo'lsa, u Kubernetesda ajoyib ishlashi kerak.

  • Manba kodini(source code) ishlatmaydi va applicationgizni build qilmaydi. Continuous Integration, Delivery, va Deployment (CI/CD) workflowlari tashkilot madaniyati va afzalliklari hamda texnik talablar bilan belgilanadi.

  • Middleware (masalan, message buses) kabi application-leveldagi servicelarni taqdim etmaydi. Built-in servicelar sifatida data-processing frameworklari (masalan, Spark), ma'lumotlar bazalari (masalan, MySQL), keshlar va cluster storage systemlari (masalan, Ceph). Bunday komponentlar Kubernetes-da ishlashi mumkin va/yoki Open Service Broker kabi portativ mexanizmlar orqali Kubernetes-da ishlaydigan ilovalar orqali kirish mumkin.