Kubernetesi kasvava populaarsuse kohta

Tere, Habr!

Suve lÔpus tahame me meelde tuletada, et jÀtkame teema uurimist Kubernetes ja otsustasime avaldada Stackoverflowist artikli, mis demonstreerib projekti seisukorda juuni alguses.

Kubernetesi kasvava populaarsuse kohta

Head lugemist!

KÀesoleva artikli kirjutamise ajal on Kubernetes umbes kuus aastat vana, ja viimase kahe aasta jooksul on selle populaarsus kasvanud sedavÔrd, et see on alaliselt kolm kÔige armastatumat platvormi hulgas. Sel aastal on Kubernetes kolmandal kohal. Tuletame meelde: Kubernetes on platvorm, mis on mÔeldud konteinerite töökoormuste kÀitamiseks ja orkestreerimiseks. Konteinerid tekkisid nagu eriline konstruktsioon protsesside isoleerimiseks Linuxis; konteinerite koosseisu kuuluvad alates 2007.

, ja alates 2002. aastast - nimelised ruumid. Konteinerid said veelgi paremini vĂ€lja kujunenud 2008. aastaks, kui sai kergesti kĂ€tte cgroups, ja Google'is arendati vĂ€lja oma sisemine mehhanism nimega LXCBorg , kus "kĂ”ik töö toimub konteinerites". Kutsume nĂŒĂŒd ajas edasi 2013. aastasse, kui toimus Docker'i esimene vĂ€ljaanne, ja konteinerid said lĂ”puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine tööriist konteinerite orkestreerimiseksMesos , kuigi see ei olnud ĂŒlemÀÀraselt populaarne. Kubernetes'e esimene vĂ€ljaanne toimus 2015. aastal, pĂ€rast mida sai sellest de facto standard konteinerite orkestreerimise valdkonnas.Et proovida mĂ”ista, miks Kubernetes nii populaarne on, katsume vastata mĂ”nele kĂŒsimusele. Millal viimati suudeti arendajatel kokku leppida, kuidas rakendusi tootmiselt vĂ€lja lasta? Kui palju te teate arendajatest, kes kasutavad tööriistu just sellisel kujul, nagu need "karbist vĂ€lja" antakse? Kui palju on tĂ€na selliseid pilve administraatoreid, kes ei mĂ”ista, kuidas rakendused töötavad? Nendele kĂŒsimustele anname vastuseid kĂ€esolevas artiklis.

Infrastruktuur kui YAML

Maailmas, mis on Puppet'ist ja Chef'ist liikunud Kubernetes'e juurde, on ĂŒks suurimaid muudatusi olnud ĂŒleminek "infrastruktuurist kui koodist" "infrastruktuuriks nagu andmed" — konkreetselt, nagu YAML. KĂ”iki Kubernetes'e ressursse, sealhulgas pod'e, konfiguratsioone, paigaldatud eksemplare, mahtusid jne, saab hĂ”lpsasti kirjeldada YAML-failis. NĂ€iteks:

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

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

Sellise lÀhenemise puhul on DevOps vÔi SRE spetsialistidel lihtsam tÀielikult vÀljendada oma töökoormusi, ilma et peaks kirjutama programmeerimiskeelt nagu Python vÔi Javascript.

Teised infrastruktuuri korraldamise eelised andmete osas on jÀrgmised:

  • GitOps vĂ”i Git Operations versioonihaldus. See lĂ€henemine vĂ”imaldab hoida kĂ”ik Kubernetes YAML-failid git-repositooriumites, tĂ€nu millele saate tĂ€pselt jĂ€lgida, millal muudatus tehti, kes selle tegi ja mis tĂ€pselt muutus. See tĂ”stab organisatsiooni tegevuste lĂ€bipaistvust ja parandab töö efektiivsust, vĂ€hendades ebaselgust seoses sellega, kus töötajad peavad otsima vajalikke ressursse. Samas muutub ka automaatne muutuste tegemine Kubernetesi ressurssides lihtsamaks, lĂ€bi tavalise pull-pĂ€ringu sulandumise.
  • Skaleeritavus. Kui ressursid on mÀÀratletud YAML-vormingus, on klastrite operaatoritel ÀÀrmiselt lihtne muuta ĂŒhte vĂ”i kahte numbrit Kubernetesi ressursis, muutes sellega selle skaleerimise pĂ”himĂ”tteid. Kuberneteses on mehhanism horisontaalse automaatse skaleerimise jaoks, mille abil on mugav mÀÀrata, kui palju minimaalset ja maksimaalset podi on konkreetses juurutatud konfiguratsioonis vajalik madala ja kĂ”rge liikluse taseme haldamiseks. NĂ€iteks kui olete juurinud konfiguratsiooni, mis vajab tĂ€iendavaid ressursse liikluse jĂ€rsu tĂ”usu tĂ”ttu, saate maxReplicas nĂ€itajat muuta 10-lt 20-le:

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

  • Turvalisus ja haldamine. YAML sobib suurepĂ€raselt hindamiseks, kuidas teatud asju Kuberneteses juurutatakse. NĂ€iteks tĂ”sine turvalisusprobleem seisneb selles, kas teie töökoormused kĂ€ivitatakse kasutaja poolt, kellel ei ole administreerimisĂ”igusi. Sellisel juhul vĂ”ivad meid aidata sellised tööriistad nagu conftest, YAML/JSON valideerija, pluss Open Policy Agent, poliitika valideerija, mis aitab veenduda, et kontekst SecurityContext teie töökoormused ei luba konteineril töötada administraatori Ă”igustega. Kui see on vajalik, saavad kasutajad rakendada lihtsat poliitikat rego, nii:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Konteinerid ei tohi töötada root Ôigustega"
}

  • IntegreerimisvĂ”imalused pilveteenuse pakkujaga. Üks silmapaistvamaid suundi kaasaegses tehnoloogias on töökoormuste kĂ€itamine avalikes pilveteenuse pakkujate infrastruktuuris. Spetsiaalse komponente abil cloud-provider Kubernetes vĂ”imaldab igal klastril integreeruda selle pilveteenuse pakkujaga, millel see töötab. NĂ€iteks kui kasutaja kĂ€ivitab rakenduse Kubernetes AWS-is ja soovib sellele rakendusele avada juurdepÀÀsu teenuse kaudu, siis pilveteenuse pakkuja aitab automaatselt luua teenuse LoadBalancer, mis automaatset genereerib koormuse tasakaalustaja Amazon Elastic Load Balancer, et suunata liiklus rakenduste podidesse.

Laaditavus

Kubernetes on vÀga hÀsti laienev, mis meeldib arendajatele. On olemas loetelu olemasolevatest ressurssidest, nagu podid, juurutused, StatefulSets, salajased andmed, ConfigMaps, jne. TÔsi, kasutajad ja arendajad saavad lisada ka teisi ressursse kujul kasutaja mÀÀratletud ressurssidest.

NÀiteks kui soovime mÀÀratleda ressursi CronTab, vÔiksime teha midagi sellist:

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

Hiljem saame luua CronTab ressursi umbkaudu selliselt:

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

Teine Kubernetes'i laiendamise vĂ”imalus on see, et arendaja saab kirjutada oma operaatorid. Operaator on eriline protsess Kubernetes'i klastris, mis töötab „haldusvoolu“ mudeli jĂ€rgi. TĂ€nu operaatorile saab kasutaja automatiseerida CRD (kasutaja mÀÀratletud ressursside) haldamise, vahetades teavet Kubernetes API-ga.

Kogukonnas on mitu tööriista, mille abil saavad arendajad mugavalt luua oma operaatorid. Nende hulgas on Operator Framework ja selle Operator SDK. See SDK pakub aluse, mille pÔhjal saavad arendajad vÀga kiiresti operaatori loomisega alustada. NÀiteks vÔib alustada kÀsurealt ligikaudu jÀrgmiselt:

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

Nii luuakse kogu teie operaatori tĂŒĂŒpiline kood, sealhulgas YAML-failid ja Golangi kood:

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

SeejÀrel saab lisada vajalikke API-sid ja kontrollerit nii:

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

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

PÀrast seda, lÔpuks, saab operaatori kokku panna ja saata selle oma konteineriregistrisse:

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

Kui arendaja vajab veelgi suuremat kontrolli, siis saab muudatusi teha Go-failides tĂŒĂŒbikoodis. NĂ€iteks, et kohandada kontrolleri spetsiifikat, saab muudatusi teha failis controller.go.

Teine projekt, KUDO, vÔimaldab luua operaatorid, kasutades ainult deklaratiivseid YAML-faile. NÀiteks Apache Kafka operaator mÀÀratletakse ligikaudu nii. Selle abil saab lihtsalt paarist kÀsust luua Kafka klastrit Kubernetesel:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ja siis saab selle konfigureerida veel ĂŒhe kĂ€su abil:

$ 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

Uuendused

Viimase paar aasta jooksul on Kubernetes'i suured vÀljaanded toimunud iga paari kuu tagant - see tÀhendab, et kolm kuni neli suurt vÀljaannet aastas. Uute funktsioonide arv, mis igas neist rakendatakse, ei vÀhene. Veelgi enam, isegi meie keerulistel aegadel ei paista aeglustumise mÀrke - vaadake, kui aktiivne on praegu Kubernetes'i projekt Githubis.

Uued vÔimalused vÔimaldavad paindlikumalt klasterdada operatsioone mitmekesiste töökoormuste korral. Lisaks meeldib arendajatele parem kontroll rakenduste juurutamisel otse tootmisvÔttes.

Ühendus

Kubernetes'i populaarsuse veel ĂŒks oluline aspekt on tema kogukonna tugevus. 2015. aastal, kui saavutati versioon 1.0, sponsoreeris Kubernetes Cloud Native Computing Foundation.

Eksisteerivad ka mitmesugused kogukonnad SIG (erihuvigruppide) koosolekud, mis on suunatud erinevate Kubernetes'i valdkondade arendamisele, kuna see projekt areneb. Need grupid lisavad pidevalt uusi funktsioone, muutes Kubernetes'ega töötamise mugavamaks ja lihtsamaks.

Cloud Native Foundation korraldab samuti CloudNativeCon/KubeCon'i, mis on hetkel, mil seda teksti kirjutatakse, suurim avatud lĂ€htekoodiga konverents maailmas. TĂŒĂŒpiliselt korraldatakse seda kolm korda aastas ja see toob kokku tuhandeid professionaale, kes soovivad parendada Kubernetes'i ja selle ökosĂŒsteemi ning Ă”ppida tundma uusi vĂ”imalusi, mis ilmnevad iga kolme kuu jĂ€rel.

Lisaks on Cloud Native Foundation'il Tehnilise JĂ€relevalve Komitee, mis koos SIG-dega vaatab ĂŒle uusi ja olemasolevaid projektid fondi projekte, millel on suunatud pilveökosĂŒsteemile. Enamik neist projektidest aitab parandada Kubernetes'i tugevusi.

LĂ”puks usun, et Kubernetes ei oleks saavutanud sellist edu ilma kogu kogukonna teadlike pingutusteta, kus inimesed toetavad ĂŒksteist, kuid samas aktsepteerivad rÔÔmuga ka uusi tulijaid.

Tulevik

Üks peamisi vĂ€ljakutseid, millega arendajad tulevikus silmitsi seisavad, on oskus keskenduda koodi detailidele, mitte sellele infrastruktuurile, milles see töötab. Just sellele suundumusele vastab serverita arhitektuuriparadiig, mis on tĂ€na ĂŒks juhtivaid. Juba on olemas edasijĂ”udnud raamistikud, nagu Knative ja OpenFaas, mis kasutavad Kubernetes'i arendaja infrastruktuuri abistamiseks.

Selles artiklis oleme vaid ĂŒldiselt vaatlenud Kubernetes'e hetkeolekut – tegelikult on see vaid jÀÀmĂ€e tipp. Kubernetes'e kasutajatel on palju muid ressursse, vĂ”imalusi ja konfiguratsioone.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster