Kubernetesning tobora ommalashib borayotgani haqida

Hey Xabr!

Yozning oxirida biz mavzu ustida ishlashni davom ettirishimizni eslatmoqchimiz Kubernetes va iyun oyi boshida Stackoverflow-dan ushbu loyihadagi ishlarning holatini ko'rsatadigan maqolani nashr etishga qaror qildi.

Kubernetesning tobora ommalashib borayotgani haqida

O'qishdan rohatlaning!

Ushbu maqolani yozish paytida Kubernetesning yoshi taxminan. olti yoshda, va so'nggi ikki yil ichida uning mashhurligi shunchalik oshdiki, u doimiy ravishda o'rinni egalladi eng sevimli platformalar. Kubernetes bu yil uchinchi o'rinni egalladi. Xulosa qilish uchun: Kubernetes - bu konteynerlashtirilgan ish yuklarini ishlatish va tartibga solish uchun mo'ljallangan platforma.

Konteynerlar Linuxda jarayonlarni izolyatsiya qilish uchun maxsus dizayn sifatida boshlangan; konteynerlar 2007 yildan beri kiritilgan guruhlar, va 2002 yildan beri - nomlar maydoni. Konteynerlar mavjud bo'lgan 2008 yilga kelib yanada yaxshi ishlab chiqilgan LXC, va Google o'zining ichki korporativ mexanizmini ishlab chiqdi Borg, bu erda "barcha ishlar konteynerlarda amalga oshiriladi". Bu yerdan biz Docker-ning birinchi chiqarilishi bo'lib o'tgan 2013 yilga yaqinlashamiz va konteynerlar nihoyat ommabop ommaviy yechimga aylandi. O'sha paytda konteyner orkestrining asosiy vositasi edi Mesos, garchi u juda mashhur bo'lmasa ham. Kubernetes birinchi marta 2015 yilda chiqarilgan, shundan so'ng ushbu vosita konteyner orkestratsiyasi sohasida de-fakto standartga aylandi.

Kubernetes nima uchun bu qadar mashhurligini tushunish uchun keling, bir nechta savollarga javob berishga harakat qilaylik. Qachon ishlab chiquvchilar ilovalarni ishlab chiqarishga qanday joylashtirish haqida oxirgi marta kelishib olishgan? Qancha ishlab chiquvchilarni bilasiz, ular qutidan tashqarida taqdim etilgan vositalardan foydalanadilar? Bugungi kunda ilovalar qanday ishlashini tushunmaydigan qancha bulutli ma'murlar bor? Ushbu savollarga javoblarni ushbu maqolada ko'rib chiqamiz.

YAML sifatida infratuzilma

Qo'g'irchoq va oshpazdan Kubernetesga o'tgan dunyoda eng katta o'zgarishlardan biri bu "infratuzilma kod sifatida" dan "infratuzilma ma'lumotlar sifatida" ga, xususan, YAML kabi o'tish edi. Kubernetesdagi barcha manbalar, jumladan podkastlar, konfiguratsiyalar, joylashtirilgan misollar, hajmlar va hokazolarni YAML faylida osongina tasvirlash mumkin. Masalan:

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

Ushbu ko'rinish DevOps yoki SRE mutaxassislariga Python yoki Javascript kabi tillarda kod yozmasdan ish yuklarini to'liq ifodalashni osonlashtiradi.

Infratuzilmani ma'lumotlar sifatida tashkil etishning boshqa afzalliklari quyidagilardan iborat:

  • GitOps yoki Git Operations Version Control. Ushbu yondashuv barcha Kubernetes YAML fayllarini git omborlarida saqlashga imkon beradi, shuning uchun siz o'zgartirish qachon amalga oshirilganligi, uni kim amalga oshirganligi va aniq nima o'zgarganligini kuzatishingiz mumkin. Bu butun tashkilot bo'ylab operatsiyalarning shaffofligini oshiradi va noaniqlikni bartaraf etish orqali operatsion samaradorlikni oshiradi, ayniqsa xodimlar o'zlariga kerakli resurslarni qidirishlari kerak bo'lgan joylarda. Shu bilan birga, tortishish so'rovini birlashtirish orqali Kubernetes resurslariga avtomatik ravishda o'zgartirish kiritish osonroq bo'ladi.
  • Masshtablilik. Resurslar YAML sifatida aniqlanganda, klaster operatorlari uchun Kubernetes resursidagi bir yoki ikkita raqamni o'zgartirish juda oson bo'ladi va shu bilan uning masshtabini o'zgartiradi. Kubernetes podkastlarni gorizontal avtomatik masshtablash mexanizmini taqdim etadi, undan past va yuqori darajadagi trafikni boshqarish uchun ma'lum bir joylashtirish konfiguratsiyasida qancha bo'laklarning minimal va maksimal soni talab qilinishini qulay aniqlash uchun foydalanish mumkin. Misol uchun, agar siz tirbandlikning keskin o'sishi tufayli qo'shimcha sig'im talab qiladigan konfiguratsiyani o'rnatgan bo'lsangiz, u holda maxReplicas 10 dan 20 gacha o'zgartirilishi mumkin:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

  • Xavfsizlik va boshqaruv. YAML narsalar Kubernetesda qanday joylashtirilganligini baholash uchun juda yaxshi. Masalan, asosiy xavfsizlik muammosi sizning ish yuklaringiz administrator bo'lmagan foydalanuvchi sifatida ishlayotganligi bilan bog'liq. Bunday holda, bizga kabi vositalar kerak bo'lishi mumkin bellashuv, YAML/JSON validatori, plyus Ochiq siyosat agenti, kontekstni ta'minlash uchun siyosatni tasdiqlovchi Xavfsizlik konteksti sizning ish yuklaringiz konteynerni administrator imtiyozlari bilan ishlashga ruxsat bermaydi. Agar bu talab qilinsa, foydalanuvchilar oddiy siyosatni qo'llashlari mumkin Ibodat qilaman, mana bunday:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • Bulutli provayder bilan integratsiya qilish imkoniyatlari. Bugungi yuqori texnologiyalarning eng diqqatga sazovor tendentsiyalaridan biri bu ommaviy bulut provayderlarida ish yuklarini ishlatishdir. Komponentdan foydalanish bulut provayderi Kubernetes har qanday klasterga u ishlaydigan bulut provayderi bilan integratsiyalashish imkonini beradi. Misol uchun, agar foydalanuvchi AWS da Kubernetes ilovasini ishga tushirsa va ushbu ilovani xizmat orqali ochishni xohlasa, bulut provayderi xizmatni avtomatik ravishda yaratishga yordam beradi. LoadBalancerbu avtomatik ravishda yuk balansini ta'minlaydi Amazon elastik yuk balansitrafikni dastur podslariga yo'naltirish uchun.

Kengaytirish qobiliyati

Kubernetes juda kengaytiriladigan va ishlab chiquvchilar uni yaxshi ko'radilar. Podlar, joylashtirishlar, StatefulSets, sirlari, ConfigMaps, va boshqalar. To'g'ri, foydalanuvchilar va ishlab chiquvchilar shaklda boshqa resurslarni qo'shishlari mumkin maxsus manba ta'riflari.

Misol uchun, agar biz resursni aniqlamoqchi bo'lsak CronTab, unda siz shunday qilishingiz mumkin:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

Keyinchalik biz CronTab resursini shunday yaratishimiz mumkin:

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

Kubernetes-da kengaytirilishning yana bir varianti shundaki, ishlab chiquvchi o'z bayonotlarini yozishi mumkin. Operator Kubernetes klasteridagi maxsus jarayon bo'lib, u "nazorat qilish sxemasi" Operator yordamida foydalanuvchi Kubernetes API bilan ma'lumot almashish orqali CRD (maxsus manba ta'riflari) boshqaruvini avtomatlashtirishi mumkin.

Jamiyatda ishlab chiquvchilarga o'z operatorlarini yaratishni osonlashtiradigan bir nechta vositalar mavjud. Ular orasida - Operator ramkasi va uning Operator SDK. Ushbu SDK dasturchi tezda operator yaratishni boshlashi mumkin bo'lgan asosni ta'minlaydi. Aytaylik, siz buyruq satridan shunday boshlashingiz mumkin:

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

Bu sizning operatoringiz uchun YAML fayllari va Golang kodini o'z ichiga olgan barcha qozon kodini yaratadi:

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

Keyin kerakli API va boshqaruvchini qo'shishingiz mumkin, masalan:

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

Keyin, nihoyat, operatorni yig'ing va uni konteyneringiz reestriga yuboring:

$ operator-sdk build your.container.registry/youruser/myapp-operator

Agar ishlab chiquvchi yanada ko'proq nazorat qilishni xohlasa, Go fayllaridagi qozon kodini o'zgartirish mumkin. Masalan, tekshirgichning xususiyatlarini o'zgartirish uchun siz faylga o'zgartirishlar kiritishingiz mumkin controller.go.

Yana bir loyiha HAMMA YERDA, faqat deklarativ YAML fayllari yordamida bayonotlar yaratish imkonini beradi. Masalan, Apache Kafka uchun operator taxminan aniqlanadi shunday. Uning yordamida siz bir nechta buyruqlar bilan Kubernetes tepasiga Kafka klasterini o'rnatishingiz mumkin:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Va keyin uni boshqa buyruq bilan sozlang:

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

Innovatsiyalar

So'nggi bir necha yil ichida Kubernetes-ning asosiy relizlari har bir necha oyda chiqariladi - ya'ni yiliga uch-to'rtta asosiy relizlar. Ularning har birida kiritilgan yangi xususiyatlar soni kamaymaydi. Qolaversa, mana shu og‘ir damlarda ham sekinlashish belgilari yo‘q – hozir vaziyat qandayligini qarang Github-da Kubernetes loyihasi faoliyati.

Yangi imkoniyatlar sizga turli xil ish yuklarida operatsiyalarni yanada moslashuvchan tarzda klasterlash imkonini beradi. Bundan tashqari, dasturchilar ilovalarni to'g'ridan-to'g'ri ishlab chiqarishga joylashtirishda ko'proq nazoratdan foydalanadilar.

Jamiyat

Kubernetes mashhurligining yana bir muhim jihati uning hamjamiyatining kuchidir. 2015-yilda, 1.0 versiyasiga erishgandan so'ng, Kubernetes homiylik qildi Bulutli mahalliy hisoblash jamg'armasi.

Turli xil jamoalar ham mavjud GIS (Maxsus qiziqish guruhlari) loyiha rivojlanishi davomida Kubernetesning turli sohalarida ishlashga e'tibor qaratdi. Ushbu guruhlar doimiy ravishda yangi xususiyatlarni qo'shib, Kubernetes bilan ishlashni yanada qulay va qulay qiladi.

Cloud Native Foundation shuningdek, CloudNativeCon/KubeCon-ga mezbonlik qiladi, u yozish paytida dunyodagi eng katta ochiq manba konferentsiyasi hisoblanadi. Odatda yiliga uch marta o'tkaziladi, u Kubernetes va uning ekotizimini yaxshilashni, shuningdek, har uch oyda paydo bo'ladigan yangi xususiyatlarni o'rganishni xohlaydigan minglab mutaxassislarni birlashtiradi.

Bundan tashqari, Cloud Native Foundation mavjud Texnik nazorat qo'mitasi, ular SIGlar bilan birgalikda yangi va mavjudlarni ko'rib chiqadi loyihalar bulutli ekotizimga yo'naltirilgan mablag'lar. Ushbu loyihalarning aksariyati Kubernetesning kuchli tomonlarini yaxshilashga yordam beradi.

Va nihoyat, men ishonamanki, Kubernetes butun jamiyatning ongli sa'y-harakatlarisiz muvaffaqiyatli bo'lmaydi, bu erda odamlar bir-biriga yopishib oladilar, lekin ayni paytda yangi kelganlarni qabul qilishadi.

Kelajak

Ishlab chiquvchilar kelajakda hal qilishlari kerak bo'lgan asosiy muammolardan biri bu kod ishlaydigan infratuzilmaga emas, balki uning tafsilotlariga e'tibor qaratish qobiliyatidir. Bu tendentsiyalarga javob beradi serversiz arxitektura paradigmasi, bugungi kunda yetakchilardan biri hisoblanadi. Murakkab ramkalar allaqachon mavjud, masalan. Tug'ilgan и OpenFaas, ular ishlab chiquvchidan infratuzilmani mavhum qilish uchun Kubernetes-dan foydalanadilar.

Ushbu maqolada biz faqat Kubernetesning hozirgi holatini ko'rib chiqdik - aslida bu aysbergning faqat uchi. Kubernetes foydalanuvchilari ko'plab boshqa resurslar, imkoniyatlar va konfiguratsiyalarga ega.

Manba: www.habr.com

a Izoh qo'shish