Oer de groeiende populariteit fan Kubernetes

Hoi Habr!

Oan 'e ein fan 'e simmer wolle wy jo deroan herinnerje dat wy fierder wurkje oan it ûnderwerp Kubernetes en besleat om begjin juny in artikel fan Stackoverflow te publisearjen dat de stân fan saken yn dit projekt oantoand.

Oer de groeiende populariteit fan Kubernetes

Genietsje lêze!

Op it momint fan it skriuwen fan dit artikel is de leeftyd fan Kubernetes sawat. seis jier âld, en yn 'e ôfrûne twa jier is syn populariteit sa groeid dat it konsekwint wurdt rangearre ûnder meast favorite platfoarms. Kubernetes stiet dit jier tredde. Om opnij te meitsjen: Kubernetes is in platfoarm ûntworpen foar it útfieren en orkestrearjen fan kontenerisearre wurkloads.

Containers begûnen as in spesjaal ûntwerp foar isolearjen fan prosessen yn Linux; konteners binne sûnt 2007 opnommen cgroups, en sûnt 2002 - nammeromten. Containers waarden ûntwurpen noch better troch 2008, doe't it waard beskikber LXC, en Google ûntwikkele har eigen ynterne bedriuwsmeganisme neamd Borg, wêr't "alle wurk wurdt dien yn konteners." Fanôf hjir rap wy foarút nei 2013, doe't de earste release fan Docker plakfûn, en konteners einlings in populêre massa-oplossing waarden. Yn dy tiid wie it wichtichste ark foar kontenerorkestraasje Mesos, hoewol't er net wyld populêr wie. Kubernetes waard foar it earst útbrocht yn 2015, wêrnei't dit ark de de facto standert waard op it mêd fan kontenerorkestraasje.

Om te besykjen te begripen wêrom Kubernetes sa populêr is, litte wy besykje in pear fragen te beantwurdzjen. Wannear wie de lêste kear dat ûntwikkelders it iens koenen oer hoe't se applikaasjes yn produksje kinne ynsette? Hoefolle ûntwikkelders witte jo dy't de ark brûke as se út 'e doaze wurde levere? Hoefolle wolkbehearders binne d'r hjoed dy't net begripe hoe't applikaasjes wurkje? Wy sille sjen nei de antwurden op dizze fragen yn dit artikel.

Ynfrastruktuer as YAML

Yn 'e wrâld dy't gie fan Puppet en Chef nei Kubernetes, wie ien fan' e grutste feroaringen de ferhuzing fan "ynfrastruktuer as koade" nei "ynfrastruktuer as gegevens" - spesifyk, lykas YAML. Alle boarnen yn Kubernetes, dy't pods, konfiguraasjes, ynset eksimplaren, folumes, ensfh., kinne maklik beskreaun wurde yn in YAML-bestân. Bygelyks:

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

Dizze werjefte makket it makliker foar DevOps- as SRE-professionals om har wurkdruk folslein út te drukken sûnder koade te skriuwen yn talen lykas Python of Javascript.

Oare foardielen fan it organisearjen fan ynfrastruktuer as gegevens omfetsje:

  • GitOps of Git Operations Ferzjekontrôle. Dizze oanpak lit jo alle Kubernetes YAML-bestannen yn git-repositories hâlde, sadat jo krekt kinne folgje wannear't in wiziging makke is, wa't it makke hat en wat krekt feroare is. Dit fergruttet de transparânsje fan operaasjes yn 'e hiele organisaasje en ferbetteret operasjonele effisjinsje troch it eliminearjen fan dûbelsinnigens, benammen yn wêr't meiwurkers moatte sykje nei de middels dy't se nedich binne. Tagelyk wurdt it makliker om automatysk wizigingen oan Kubernetes-boarnen te meitsjen troch gewoan in pull-fersyk te fusearjen.
  • Scalability. As boarnen wurde definieare as YAML, wurdt it ekstreem maklik foar klusteroperators om ien of twa nûmers yn in Kubernetes-boarne te feroarjen, en dêrmei te feroarjen hoe't it skalen. Kubernetes biedt in meganisme foar horizontale autoskalearring fan pods, dat kin brûkt wurde om maklik te bepalen wat it minimale en maksimum oantal pods nedich binne yn in bepaalde ynsetkonfiguraasje om lege en hege nivo's fan ferkear te behanneljen. As jo ​​​​bygelyks in konfiguraasje hawwe ynset dy't ekstra kapasiteit fereasket fanwege in hommelse pyk yn ferkear, dan kinne maxReplicas wurde feroare fan 10 nei 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

  • Feiligens en behear. YAML is geweldig foar it evaluearjen fan hoe't dingen wurde ynset yn Kubernetes. Bygelyks, in grutte befeiligingssoarch giet oer oft jo workloads rinne as in net-admin brûker. Yn dit gefal kinne wy ​​ark nedich wêze lykas wedstryd, YAML/JSON validator, plus Iepenje Policy Agent, in beliedsvalidator om te soargjen dat de kontekst SecurityContext jo wurkloads lit de kontener net rinne mei behearderrjochten. As dit nedich is, kinne brûkers in ienfâldich belied tapasse ik bid, lykas dit:

package main

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

  • Opsjes foar yntegraasje mei in wolkprovider. Ien fan 'e meast opmerklike trends yn' e hjoeddeistige hege technology is it útfieren fan wurkdruk op providers fan iepenbiere wolken. It brûken fan de komponint wolk-oanbieder Kubernetes позволяет любому кластеру интегрироваться с тем облачным провайдером, на котором он работает. Например, если пользователь запустил приложение в Kubernetes на AWS и хочет открыть доступ к этому приложению через сервис, облачный провайдер помогает автоматически создать сервис LoadBalancerdy't automatysk de load balancer sil leverje Amazon Elastic Load Balancerom ferkear troch te lieden nei applikaasjepods.

Útwreidzjen

Kubernetes is heul útbreidber en ûntwikkelders hâlde derfan. D'r is in set beskikbere boarnen lykas pods, ynset, StatefulSets, geheimen, ConfigMaps, ensfh. Wier, brûkers en ûntwikkelders kinne oare boarnen tafoegje yn 'e foarm oanpaste boarne definysjes.

Bygelyks, as wy wolle definiearje in boarne CronTab, dan kinne jo sa'n ding dwaan:

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

Letter kinne wy ​​in CronTab-boarne sa as dit oanmeitsje:

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

In oare opsje foar útwreidzjen yn Kubernetes is dat de ûntwikkelder syn eigen útspraken skriuwe kin. Operator is in spesjaal proses yn it Kubernetes-kluster dat wurket neffens de "kontrôle circuit" Mei help fan in operator kin de brûker it behear fan CRD's (oanpaste boarne definysjes) automatisearje troch ynformaasje te wikseljen mei de Kubernetes API.

D'r binne ferskate ark yn 'e mienskip dy't it maklik meitsje foar ûntwikkelders om har eigen operators te meitsjen. Under harren - Operator Framework en syn Operator SDK. Dizze SDK biedt in stifting wêrfan in ûntwikkelder fluch kin begjinne mei it meitsjen fan in operator. Litte wy sizze dat jo kinne begjinne fan 'e kommandorigel sa as dit:

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

Dit makket alle boilerplate-koade foar jo operator, ynklusyf YAML-bestannen en Golang-koade:

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

Dan kinne jo de fereaske API's en controller tafoegje, lykas dit:

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

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

Dan, as lêste, sammelje de operator en stjoer it nei it register fan jo kontener:

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

As de ûntwikkelder noch mear kontrôle wol, kin de boilerplatekoade yn Go-bestannen feroare wurde. Bygelyks, om de spesifikaasjes fan 'e controller te feroarjen, kinne jo wizigingen oanmeitsje oan it bestân controller.go.

In oar projekt OERAL, kinne jo útspraken meitsje mei allinich deklarative YAML-bestannen. Bygelyks, in operator foar Apache Kafka soe likernôch wurde definiearre so. Dêrmei kinne jo in Kafka-kluster boppe op Kubernetes ynstallearje mei mar in pear kommando's:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

En dan konfigurearje it mei in oar kommando:

$ 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

Ynnovaasje

Yn 'e ôfrûne jierren binne grutte Kubernetes-releases elke pear moannen útkommen - dat is trije oant fjouwer grutte releases per jier. It oantal nije funksjes yntrodusearre yn elk fan harren nimt net ôf. Boppedat binne d'r gjin tekens fan fertraging, sels yn dizze drege tiden - sjoch nei wat de situaasje no is Kubernetes projektaktiviteit op Github.

Nije mooglikheden kinne jo operaasjes fleksibeler clusterje oer ferskate wurkloads. Derneist genietsje programmeurs fan gruttere kontrôle by it ynsetten fan applikaasjes direkt nei produksje.

Mienskip

In oar wichtich aspekt fan 'e populariteit fan Kubernetes is de sterkte fan har mienskip. Yn 2015, by it berikken fan ferzje 1.0, waard Kubernetes sponsore troch Stichting Cloud Native Computing.

Der binne ek ferskate mienskippen SIG (Special Interest Groups) rjochte har op it wurkjen oan ferskate gebieten fan Kubernetes as it projekt evoluearret. Dizze groepen foegje konstant nije funksjes ta, wêrtroch it wurkjen mei Kubernetes handiger en handiger wurdt.

De Cloud Native Foundation host ek CloudNativeCon/KubeCon, dy't, op it stuit fan dit skriuwen, de grutste iepen boarne konferinsje yn 'e wrâld is. Typysk hâlden trije kear yn 't jier, bringt it tûzenen professionals byinoar dy't Kubernetes en har ekosysteem wolle ferbetterje, en ek nije funksjes leare dy't elke trije moannen ferskine.

Boppedat hat Cloud Native Foundation Komitee foar technyske tafersjoch, dy't tegearre mei SIG's nije en besteande beoardielje projekten fûnsen rjochte op it wolkekosysteem. De measte fan dizze projekten helpe de sterkte fan Kubernetes te ferbetterjen.

Uteinlik leau ik dat Kubernetes net sa suksesfol wêze soe as it is sûnder de bewuste ynspanningen fan 'e hiele mienskip, wêr't minsken byinoar bliuwe, mar tagelyk nijkommers yn' e fold wolkom.

Takomst

Ien fan 'e wichtichste útdagings dy't ûntwikkelders yn' e takomst sille moatte omgean is de mooglikheid om te fokusjen op 'e details fan' e koade sels, en net op 'e ynfrastruktuer wêryn't it rint. It foldocht oan dizze trends serverless arsjitektoanysk paradigma, dat is ien fan de liedende hjoed. Avansearre kaders besteane al, û.o. Knatyf и OpenFaas, dy't Kubernetes brûke om de ynfrastruktuer fan 'e ûntwikkelder te abstraheren.

Yn dit artikel hawwe wy allinich it oerflak fan 'e hjoeddeistige steat fan Kubernetes bekrast - yn feite is it gewoan it punt fan' e iisberch. Kubernetes-brûkers hawwe in protte oare boarnen, mooglikheden en konfiguraasjes ta har beskikking.

Boarne: www.habr.com

Add a comment