О растућој популарности Кубернетеса

Хеј Хабр!

Крајем лета желимо да вас подсетимо да настављамо да радимо на овој теми Кубернетес и одлучио да почетком јуна објави чланак са Стацковерфлов-а који показује стање у овом пројекту.

О растућој популарности Кубернетеса

Уживајте у читању!

У време писања овог чланка, Кубернетес је стар приближно. шест година, а током протекле две године његова популарност је толико порасла да се доследно рангира међу најомиљеније платформе. Кубернетес је ове године на трећем месту. Да резимирамо: Кубернетес је платформа дизајнирана за покретање и оркестрирање контејнерских радних оптерећења.

Контејнери су почели као посебан дизајн за изоловање процеса у Линуку; контејнери су укључени од 2007 цгроупс, а од 2002. – именски простори. Контејнери су још боље дизајнирани до 2008. године, када су постали доступни ЛКСЦ, а Гоогле је развио сопствени интерни корпоративни механизам тзв Борг, где се „сав посао обавља у контејнерима.“ Одавде идемо унапред до 2013. године, када је дошло до првог издања Доцкер-а, а контејнери су коначно постали популарно масовно решење. У то време главни алат за оркестрацију контејнера био је Месос, иако није био баш популаран. Кубернетес је први пут објављен 2015. године, након чега је овај алат постао де факто стандард у области оркестрације контејнера.

Да бисмо покушали да разумемо зашто је Кубернетес толико популаран, покушајмо да одговоримо на неколико питања. Када су програмери последњи пут могли да се договоре о томе како да примене апликације у производњу? Колико програмера знате који користе алате онако како су испоручени из кутије? Колико данас има администратора облака који не разумеју како апликације раде? Одговоре на ова питања ћемо погледати у овом чланку.

Инфраструктура као ИАМЛ

У свету који је од Пуппет анд Цхеф-а прешао на Кубернетес, једна од највећих промена је била прелазак са „инфраструктуре као кода“ на „инфраструктуру као податке“ – конкретно, као што је ИАМЛ. Сви ресурси у Кубернетес-у, који укључују подове, конфигурације, распоређене инстанце, волумене, итд., могу се лако описати у ИАМЛ датотеци. На пример:

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

Овај поглед олакшава ДевОпс или СРЕ професионалцима да у потпуности изразе своје радно оптерећење без потребе да пишу код на језицима као што су Питхон или Јавасцрипт.

Остале предности организовања инфраструктуре као података укључују:

  • ГитОпс или Гит Оператионс контрола верзија. Овај приступ вам омогућава да задржите све Кубернетес ИАМЛ датотеке у гит репозиторијумима, тако да можете тачно да пратите када је промена направљена, ко ју је направио и шта се тачно променило. Ово повећава транспарентност операција у целој организацији и побољшава оперативну ефикасност елиминисањем двосмислености, посебно тамо где запослени треба да траже ресурсе који су им потребни. У исто време, постаје лакше аутоматски извршити измене у ресурсима Кубернетес једноставним спајањем захтева за повлачење.
  • Прилагодљивост. Када су ресурси дефинисани као ИАМЛ, оператерима кластера постаје изузетно лако да промене један или два броја у Кубернетес ресурсу, мењајући на тај начин начин његовог скалирања. Кубернетес обезбеђује механизам за хоризонтално аутоматско скалирање модула, који се може користити за практично одређивање минималног и максималног броја модула који су потребни у одређеној конфигурацији примене за руковање ниским и високим нивоима саобраћаја. На пример, ако сте применили конфигурацију која захтева додатни капацитет због изненадног пораста саобраћаја, онда се макРеплицас може променити са 10 на 20:

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

  • Безбедност и управљање. ИАМЛ је одличан за процену начина на који су ствари распоређене у Кубернетес-у. На пример, главни безбедносни проблем је да ли се ваша радна оптерећења покрећу као корисник који није администратор. У овом случају ће нам можда требати алати као што су цонтест, ИАМЛ/ЈСОН валидатор, плус Опен Полици Агент, валидатор политике који обезбеђује да контекст СецуритиЦонтект ваша радна оптерећења не дозвољавају да се контејнер покреће са администраторским привилегијама. Ако је то потребно, корисници могу применити једноставну политику ров, овако:

package main

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

  • Опције за интеграцију са добављачем облака. Један од најистакнутијих трендова у данашњој високој технологији је покретање посла на јавним провајдерима у облаку. Коришћење компоненте цлоуд-провајдер Кубернетес омогућава било ком кластеру да се интегрише са добављачем облака на коме ради. На пример, ако корисник покрене апликацију у Кубернетес-у на АВС-у и жели да открије ту апликацију преко услуге, добављач облака помаже да се аутоматски креира услуга LoadBalancerкоји ће аутоматски обезбедити балансер оптерећења Амазон Еластиц Лоад Баланцерда преусмерите саобраћај на подове апликација.

Проширивост

Кубернетес је веома проширив и програмери га воле. Постоји скуп доступних ресурса као што су подови, имплементације, StatefulSets, тајне, ConfigMaps, итд. Истина, корисници и програмери могу додати друге ресурсе у образац прилагођене дефиниције ресурса.

На пример, ако желимо да дефинишемо ресурс CronTab, онда бисте могли да урадите нешто овако:

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

Касније можемо креирати ЦронТаб ресурс отприлике овако:

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

Друга опција за проширивост у Кубернетес-у је да програмер може писати сопствене изјаве. Оператор је посебан процес у Кубернетес кластеру који ради према „контролно коло" Уз помоћ оператера, корисник може аутоматизовати управљање ЦРД-овима (прилагођеним дефиницијама ресурса) разменом информација са Кубернетес АПИ-јем.

Постоји неколико алата у заједници који програмерима олакшавају креирање сопствених оператера. Међу њима - Оператор Фрамеворк и Оператор СДК. Овај СДК пружа основу из које програмер може брзо да почне са креирањем оператера. Рецимо да можете почети од командне линије нешто овако:

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

Ово креира сав основни код за вашег оператера, укључујући ИАМЛ датотеке и Голанг код:

.
|____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

Затим можете додати потребне АПИ-је и контролер, овако:

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

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

Затим, коначно, саставите оператера и пошаљите га у регистар вашег контејнера:

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

Ако програмер жели још већу контролу, шаблонски код у Го датотекама може да се промени. На пример, да бисте изменили специфичности контролера, можете да унесете измене у датотеку controller.go.

Још један пројекат СВУДА, омогућава вам да креирате изјаве користећи само декларативне ИАМЛ датотеке. На пример, оператор за Апацхе Кафка би био дефинисан приближно тако. Помоћу њега можете инсталирати Кафка кластер на Кубернетес са само неколико команди:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

А затим га конфигуришите другом командом:

$ 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

Иновације

Током протеклих неколико година, главна издања Кубернетеса су излазила сваких неколико месеци - то јест, три до четири главна издања годишње. Број нових функција уведених у свакој од њих се не смањује. Штавише, нема знакова успоравања ни у овим тешким временима – погледајте каква је ситуација сада Кубернетес пројектна активност на Гитхуб-у.

Нове могућности вам омогућавају да флексибилније групишете операције у различитим радним оптерећењима. Поред тога, програмери уживају већу контролу када постављају апликације директно у производњу.

Заједница

Још један важан аспект Кубернетесове популарности је снага његове заједнице. У 2015, након достизања верзије 1.0, Кубернетес је био спонзорисан од Цлоуд Нативе Цомпутинг Фоундатион.

Постоје и разне заједнице СИГ (Групе за посебне интересе) фокусирале су се на рад на различитим областима Кубернетеса како се пројекат развија. Ове групе стално додају нове функције, чинећи рад са Кубернетес-ом практичнијим и практичнијим.

Цлоуд Нативе Фоундатион такође је домаћин ЦлоудНативеЦон/КубеЦон-а, који је, у време писања овог текста, највећа конференција отвореног кода на свету. Обично се одржава три пута годишње, окупља хиљаде професионалаца који желе да побољшају Кубернетес и његов екосистем, као и да науче нове функције које се појављују свака три месеца.

Штавише, Цлоуд Нативе Фоундатион има Комисија за технички надзор, који заједно са СИГ-овима прегледа нове и постојеће Пројекти средства усмерена на екосистем облака. Већина ових пројеката помаже у побољшању предности Кубернетеса.

Коначно, верујем да Кубернетес не би био тако успешан као што јесте без свесних напора целе заједнице, где се људи држе заједно, али у исто време поздрављају придошлице у окриље.

Будућност

Један од главних изазова са којима ће програмери морати да се суоче у будућности је могућност да се фокусирају на детаље самог кода, а не на инфраструктуру у којој он ради. Она испуњава ове трендове архитектонска парадигма без сервера, који је данас један од водећих. Напредни оквири већ постоје, нпр. Кнативе и ОпенФаас, који користе Кубернетес да апстрахују инфраструктуру од програмера.

У овом чланку смо само загребали површину тренутног стања Кубернетеса — у ствари, то је само врх леденог брега. Корисници Кубернетес-а имају на располагању многе друге ресурсе, могућности и конфигурације.

Извор: ввв.хабр.цом

Додај коментар