O rastúcej popularite Kubernetes

Ahoj, Habr!

Na konci leta chceme pripomenúť, že naďalej pracujeme na téme Kubernetes a rozhodli sme sa publikovať článok zo Stackoverflow, ktorý demonštruje aktuálny stav tohto projektu na začiatku júna.

O rastúcej popularite Kubernetes

Príjemné čítanie!

V čase písania tohto článku má Kubernetes približne šesť rokov, a za posledné dva roky jeho popularita tak vzrástla, že stabilne patrí medzi najobľúbenejšie platformy. Tento rok je Kubernetes na treťom mieste. Pripomíname: Kubernetes je platforma určená na spúšťanie a orchestráciu kontajnerových pracovných zaťažení.

Kontajnery sa zrodili ako špeciálna konštrukcia na izoláciu procesov v Linuxe; od roku 2007 obsahujú cgroups, a od roku 2002 – menné priestory. Kontajnery sa ešte lepšie utvorili do roku 2008, keď sa sprístupnila LXC, a v Google vyvinuli svoj vnútrofiremný mechanizmus nazvaný Borg, kde „celá práca prebieha v kontajneroch“. Presuňme sa do roku 2013, keď bol vydaný prvý Docker, a kontajnery sa definitívne dostali do kategórie populárnych hromadných riešení. V tej dobe bol hlavným nástrojom na orchestráciu kontajnerov Mesos, hoci nemal veľkú popularitu. Prvý release Kubernetes sa uskutočnil v roku 2015, po čom sa tento nástroj de facto stal štandardom v oblasti orchestrácie kontajnerov.

Aby sme sa pokúsili pochopiť, prečo je Kubernetes tak populárny, poďme si odpovedať na niekoľko otázok. Kedy sa naposledy vývojárom podarilo dosiahnuť dohodu o tom, ako nasadzovať aplikácie do produkcie? Koľko poznáte vývojárov, ktorí používajú nástroje v takej podobe, ako sú poskytované „z krabice“? Koľko dnes existuje cloudových administrátorov, ktorí nerozumejú, ako aplikácie fungujú? Odpovede na tieto otázky si prejdeme v tomto článku.

Infrastruktúra ako YAML

Vo svete, ktorý prešiel od Puppet a Chef k Kubernetes, jednou z najväčších zmien bolo prechod od „infrastruktúry ako kód“ k „infrastruktúre ako dáta“ — konkrétne, ako YAML. Všetky zdroje v Kubernetes, medzi ktoré patrí pod, konfigurácie, nasadené inštancie, objemy a pod., sa dajú ľahko opísať v súbore YAML. Napríklad:

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

S takýmto prístupom majú odborníci na DevOps alebo SRE možnosť plne zohľadniť svoje pracovné zaťaženia, bez potreby písania programového kódu v jazykoch ako Python alebo Javascript.

Ďalšie výhody organizácie infraštruktúry ako dát sú nasledujúce:

  • GitOps alebo verzionovanie Git Operations Version. Tento prístup umožňuje uchovávať všetky YAML súbory Kubernetes v git repozitároch, vďaka čomu môžete presne sledovať, kedy bola vykonaná zmena, kto ju vykonal a čo presne sa zmenilo. Týmto sa zvyšuje transparentnosť operácií v celej organizácii a zefektívňuje sa práca, čím sa eliminuje nejednoznačnosť, najmä pokiaľ ide o to, kde by mali zamestnanci hľadať požadované zdroje. Zároveň sa zjednodušuje automatizované spravovanie zmien v zdrojoch Kubernetes prostredníctvom jednoduchého zlúčenia pull-requestu.
  • Škálovateľnosť. Keď sú zdroje definované pomocou YAML, operátorom klastra je mimoriadne jednoduché zmeniť jedno alebo dve čísla v zdroji Kubernetes, čím sa menia pravidlá škálovania. V Kubernetes je implementovaný mechanizmus pre horizontálne automatické škálovanie podov, ktorý umožňuje pohodlne definovať minimálny a maximálny počet podov potrebných v konkrétnej nasadenej konfigurácii, aby sa zvládla nízka a vysoká úroveň prevádzky. Napríklad, ak ste nasadili konfiguráciu, ktorá vyžaduje dodatočný výkon kvôli náhlemu nárastu prevádzky, môžete zmeniť hodnotu maxReplicas z 10 na 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

  • Bezpečnosť a správa. YAML je ideálny na posúdenie toho, ako sú jednotlivé prvky nasadené v Kubernetes. Napríklad, závažný problém, ktorý sa týka zabezpečenia, sa týka toho, či sa vaše pracovné zaťaženia spúšťajú pod používateľom, ktorý nemá administrátorské práva. V tomto prípade nám môžu pomôcť nástroje ako conftest, validator YAML/JSON, plus Open Policy Agent, validator politík, ktorý umožňuje overiť, či kontext SecurityContext Pracovné záťaže vašich systémov neumožňujú kontajneru fungovať s administrátorskými právami. Ak je to potrebné, používatelia môžu aplikovať jednoduchú politiku rego, takto:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Kontajnery nesmú bežať ako root"
}

  • Možnosti integrácie s poskytovateľom cloudu. Jedným z najvýraznejších trendov v moderne technológiách je prevádzkovanie pracovných záťaží na zdrojoch verejných poskytovateľov cloudu. Pomocou komponentu cloud-provider Kubernetes umožňuje akémukoľvek klastru integrovať sa s tým poskytovateľom cloudu, na ktorom beží. Napríklad, ak používateľ spustí aplikáciu v Kubernetes na AWS a chce sprístupniť túto aplikáciu cez službu, poskytovateľ cloudu automaticky pomáha vytvoriť službu LoadBalancer, ktorá automaticky poskytne vyrovnávač zaťaženia Amazon Elastic Load Balancer, aby presmeroval prenos do podov aplikácií.

Rozšíriteľnosť

Kubernetes sa veľmi dobre škáluje, čo sa páči vývojárom. Existuje súbor dostupných zdrojov, ako sú pady, nasadenia, StatefulSets, tajomstvá, ConfigMaps, atď. Je pravda, že používatelia a vývojári môžu pridávať aj ďalšie zdroje vo forme vlastných definícií zdrojov.

Napríklad, ak chceme definovať zdroj CronTab, mohli by sme urobiť niečo podobné:

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

Neskôr môžeme vytvoriť zdroj CronTab približne takto:

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

Ďalšou možnosťou rozšíriteľnosti v Kubernetes je, že vývojár môže písať vlastné operátory. Operátor je osobitný proces v klastri Kubernetes, ktorý funguje podľa vzoru „kontúra správy“. Pomocou operátora môže používateľ automatizovať správu CRD (vlastných definícií zdrojov), výmenou informácií s Kubernetes API.

V komunite existuje niekoľko nástrojov, pomocou ktorých môžu vývojári jednoducho vytvárať vlastné operátory. Medzi nimi je Operator Framework a jeho Operator SDK. Tento SDK poskytuje základ, od ktorého sa môže vývojár veľmi rýchlo pustiť do vytvárania operátora. Povedzme, že môžete začať z príkazového riadka asi takto:

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

Takto sa vytvára celý stereotypný kód pre vášho operátora, vrátane YAML súborov a kódu v Golangu:

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

Potom môžete pridať požadované API a kontrolér, takto:

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

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

Následne môžete konečne zostaviť operátora a poslať ho do vášho kontajnerového registru:

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

Ak vývojárovi treba ešte väčšiu kontrolu, môže zmeniť stereotypný kód v súboroch Go. Napríklad, ak chcete prispôsobiť špecifiku kontroléra, môžete vykonať zmeny v súbore controller.go.

Iný projekt, KUDO, umožňuje vytvárať operátory len pomocou deklaratívnych YAML súborov. Napríklad, operátor pre Apache Kafka sa bude definovať asi takto: tak. S jeho pomocou môžete len pár príkazmi nainštalovať klaster Kafka nad Kubernetes:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

A potom ho nakonfigurovať pomocou ešte jedného príkazu:

$ 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

Inovácie

V priebehu posledných niekoľkých rokov sa veľké vydania Kubernetes objavujú každé niekoľko mesiacov – to znamená, tri až štyri veľké vydania za rok. Počet nových funkcií zavádzaných v každom z nich sa nezmenšuje. Ba čo viac, nepozorujú sa žiadne znaky spomalenia ani v našich ťažkých časoch – pozrite sa, aká je teraz aktívnosť projektu Kubernetes na Github.

Nové možnosti umožňujú flexibilnejšie klastrovanie operácií pri rôznych pracovných záťažiach. Okrem toho programátorom vyhovuje väčšia kontrola pri nasadzovaní aplikácií priamo do produkcie.

Komunita

Ďalším vážnym aspektom popularity Kubernetes je sila jeho komunity. V roku 2015, po dosiahnutí verzie 1.0, bol Kubernetes sponzorovaný Cloud Native Computing Foundation.

Existujú aj rôzne komunity SIG (špeciálne záujmové skupiny), zamerané na rozpracovanie rôznych oblastí Kubernetes, keďže tento projekt sa vyvíja. Tieto skupiny neustále pridávajú nové funkcie, vďaka čomu je práca s Kubernetes čoraz pohodlnejšia.

Fond Cloud Native Foundation tiež organizuje CloudNativeCon/KubeCon, ktorá je, k času písania tohto textu, najväčšou open-source konferenciou na svete. Zvyčajne sa koná trikrát ročne a zhromažďuje tisíce odborníkov, ktorí sa snažia vylepšiť Kubernetes a jeho ekosystém, ako aj osvojiť si nové funkcie, ktoré sa objavujú každé tri mesiace.

Navyše, v Cloud Native Foundation existuje Technický dozorčí výbor, ktorý spoločne so SIGs zvažuje nové a existujúce projekty projekty zamerané na cloudovú ekosystému. Väčšina z týchto projektov pomáha zlepšiť silné stránky Kubernetes.

Nakoniec verím, že Kubernetes by nemal taký úspech bez vedomého úsilia celej komunity, kde sa ľudia navzájom podporujú, ale zároveň s radosťou prijímajú nováčikov.

Budúcnosť

Jednou z hlavných výziev, ktorým budú musieť vývojári čeliť v budúcnosti, je schopnosť zamerať sa na detaily samotného kódu, a nie na infraštruktúru, v ktorej funguje. Týmto trendom zodpovedá serverless architektonická paradigma, ktorá je dnes jednou z vedúcich. Už existujú pokročilé frameworky, ako napríklad Knative a OpenFaas, ktoré využívajú Kubernetes na abstrahovanie infraštruktúry od vývojára.

V tomto článku sme iba v stručnosti prešli súčasným stavom Kubernetes – v skutočnosti je to len špička ľadovca. Používateľom Kubernetes je k dispozícii mnoho ďalších zdrojov, príležitostí a konfigurácií.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster