Kubernetes'e kasvav populaarsus

Tere, Habr!

Suve lÔpus tahame meenutada, et jÀtkame teema kÀsitlemist Kubernetes ja otsustasime avaldada Stackoverflow artikli, mis demonstreerib projekti hetkeseisu juuni alguses.

Kubernetes'e kasvav populaarsus

Head lugemist!

KĂ€esoleva artikli kirjutamise ajal on Kubernetes umbes kuus aastat vana, ja viimase kahe aasta jooksul on tema populaarsus kasvanud nii, et ta on pidevalt olnud ĂŒheks kĂ”ige armastatumaks platvormiks. Sel aastal on Kubernetes kolmandal kohal. Meenutame: Kubernetes on platvorm, mis on mĂ”eldud konteinerite töökoormuste kĂ€ivitamiseks ja orkestreerimiseks.

Konteinerid tekkisid kui spetsiaalne konstruktsioon protsesside isoleerimiseks Linuxis; konteinerite koosseisus on alates 2007. aastast cgroups, ja alates 2002. aastast – nimitsoonid. Konteinerid hakkasid veelgi paremini vĂ€lja kujunema 2008. aastaks, kui said kĂ€tte LXC, ja Google töötas vĂ€lja oma sisemised mehhanismid nimega Borg, kus "kogu töö toimub konteinerites". Siit liigume 2013. aastasse, kui toimus esimene Docker'i vĂ€ljaanne, ja konteinerid muutusid tĂ”eliselt populaarseks massilahenduseks. Toona oli peamine tööriist konteinerite orkestreerimiseks Mesos, kuigi, ta ei olnud hullult populaarne. Kubernetes'i esimene vĂ€ljaanne toimus 2015. aastal, pĂ€rast mida sai see tööriist de facto konteinerite orkestreerimise standardiks.

Katsume mĂ”ista, miks Kubernetes on nii populaarne, vastates mĂ”nele kĂŒsimusele. Millal viimati suudeti arendajatel kokku leppida, kuidas rakendusi tootmises kĂ€ivitada? Kui palju te teate arendajatest, kes kasutavad tööriistu tĂ€pselt sellisena, nagu need „kastist vĂ€lja” pakutakse? Kui palju on tĂ€na selliseid pilvehaldurid, kes ei mĂ”ista, kuidas rakendused töötavad? Toome nendele kĂŒsimustele vastused vĂ€lja selles artiklis.

Infrastruktuur YAML-ina

Maailmas, mis tuli Puppet'ist ja Chef'ist Kubernetes'eni, oli ĂŒks suurimaid muudatusi ĂŒleminek "infrastruktuurist koodina" "infrastruktuuri andmetena" — nimelt YAML-ina. KĂ”iki ressursse Kubernetes’is, sealhulgas pod’id, konfiguratsioonid, juurutatud eksemplarid, mahud 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

Sellise esitluse korral on DevOpi vÔi SRE spetsialistidel mugavam oma töökoormusi tÀielikult vÀljendada, ilma vajaduseta kirjutada programmkoodi sellistes keeltes nagu Python vÔi Javascript.

Muud andmete infrastruktuuri korraldamise eelised on jÀrgmised:

  • GitOps ehk versioonihaldus Git Operations Version. 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 suurendab organisatsiooni tegevuste lĂ€bipaistvust ning tĂ”husust, vĂ€hendades ebamugavust, sealhulgas selles osas, kus töötajad peavad vajalikke ressursse otsima. Samuti muutub Kubernetes'i ressursside automaatsete muudatuste tegemine lihtsamaks - tavapĂ€rase pull-iga sulandumise teel.
  • Skaleeritavus. Kui ressursid on mÀÀratletud YAML-vormingus, on klastrite operaatoritele ÀÀrmiselt lihtne muuta ĂŒhte vĂ”i kahte numbrit Kubernetes'i ressursis, muutes sellega selle skaleerimise pĂ”himĂ”tteid. Kubernetes pakub mehaanikat podide horisontaalse automaatse skaleerimise jaoks, mille abil on mugav kindlaks mÀÀrata, kui palju on minimaalset ja maksimaalset podide arvu, mida antud rakenduse seadistuse jaoks on vaja, et toime tulla madala ja kĂ”rge liiklusastmega. NĂ€iteks kui olete juuranud seadistuse, mis vajab Ă€kilise liiklusetĂ”usu tĂ”ttu tĂ€iendavaid ressursse, vĂ”ite maxReplicase vÀÀrtust 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 haldus. YAML sobib suurepĂ€raselt hindama, kuidas teatud asjad Kuberneteses rakenduvad. NĂ€iteks on tĂ”sine probleem, mis puudutab turvalisust, see, kas teie töökoormused kĂ€ivituvad mitteadministraatori Ă”igustega kasutaja alt. Sel juhul vĂ”ivad osutuda kasulikeks sellised tööriistad nagu conftest, YAML/JSON valideerija, pluss Open Policy Agent, poliitikate valideerija, mis aitab veenduda, et kontekst SecurityContext teie töökoormuste jaoks ei vĂ”imalda konteineril töötada administraatori Ă”igustes. Kui see on vajalik tagada, 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 kÀivituda root'i alt"
}

  • IntegreerimisvĂ”imalused Pilveteenuse Pakkujaga. Üks silmatorkavamaid suundi tĂ€napĂ€eva kĂ”rge tehnoloogia valdkonnas on kĂ€ivitada töökoormused avalike pilveteenuse pakkujate infrastruktuuril. Selleks kasutatakse komponenti cloud-provider Kubernetes vĂ”imaldab igal klastril integreeruda selle pilvepakkujaga, kus ta töötab. NĂ€iteks kui kasutaja on kĂ€ivitanud rakenduse Kuberneteses AWS-is ja soovib sellele rakendusele ligipÀÀsu avada teenuse kaudu, aitab pilvepakkuja automaatselt luua teenuse LoadBalancer, mis pakub automaatselt koormuse tasakaalustajat Amazon Elastic Load Balancer, et suunata liiklust rakenduse podidesse.

Skaleeritavus

Kubernetes on vÀga hÀsti skaleeritav, mis meeldib arendajatele. On olemas komplekt olemasolevatest ressurssidest, nagu podid, vÀljatööd, StatefulSets, saladused, ConfigMaps, jne. Tegelikult saavad kasutajad ja arendajad lisada ka teisi ressursse kujul kohandatud ressurside mÀÀratlemisi.

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 umbes nii:

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

Kubernetesis on veel ĂŒks laiendatavuse vĂ”imalus, et arendaja saab kirjutada oma operaatorid. Operaator on eriline protsess Kubernetes klastris, mis töötab „kontrollvoona“. Operaatori abil saab kasutaja automatiseerida CRD (kohandatud ressursside definitsioonide) haldamist, vahetades teavet Kubernetes API-ga.

Kogukonnas on mitmeid tööriistu, millega arendajad saavad mugavalt luua oma operaatorid. Nende seas on — Operator Framework ja selle Operator SDK. See SDK annab aluse, millele tuginedes saab arendaja vĂ€ga kiiresti koos operaatori loomisega alustada. NĂ€iteks vĂ”ib alustada kĂ€surealt umbes jĂ€rgmiselt:

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

Nii luuakse kogu sĂŒstematiseeritud kood teie operaatori jaoks, 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 vajalikud API-d ja kontrolleri, nÀiteks:

$ 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 saab lÔpuks operaatori kokku panna ja selle teie konteineriregistrisse saata:

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

Kui arendaja vajab veelgi tĂ€ielikku kontrolli, saab ta muuta sĂŒstematiseeritud koodi Go-failides. NĂ€iteks, et muuta kontrolleri spetsiifikat, vĂ”ib teha muudatusi failis controller.go.

Teine projekt, KUDO, vÔimaldades luua operaattoreid, kasutades ainult deklaratiivseid YAML-faile. NÀiteks mÀÀratletakse Apache Kafka operaator umbes nii. Selle abil saab vaid paari kÀsuga instalarida Kafka kluster Kubernetes'i peale:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ja seejĂ€rel seadistada see veel ĂŒhe kĂ€suga:

$ 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

Innovatsioonid

Viimase paariaasta jooksul on suured Kubernetes'i vĂ€ljalasked toimunud iga paarikuud — see tĂ€hendab, kolm-neli suurt vĂ€ljalaset aastas. IgaĂŒhes neist tutvustatakse jĂ€rjest rohkem uusi funktsioone. Veelgi enam, signaale aeglustumisest ei ole isegi keerulistel aegadel — vaadake, kui suur on praegu Kubernetes'i projekti tegevus Githubis.

Uued vÔimalused vÔimaldavad operatsioonide klasterdamist paindlikumalt erinevate koormuste olemasoluga. Lisaks meeldib arendajatele suurem kontroll rakenduste otse tootmisesse juurutamisel.

Kogukond

Kubernetesi populaarsuse ĂŒks tĂ”sisemaid aspekte on selle kogukonna tugevus. 2015. aastal, kui versioon 1.0 tuli vĂ€lja, toetas Kubernetes Cloud Native Computing Foundation.

Eksisteerivad ka mitmed kogukonnad SIG (huvigruppide erirĂŒhmad), mille eesmĂ€rk on sĂŒveneda Kubernetes erinevatesse valdkondadesse vastavalt projekti arengule. Need grupid lisavad pidevalt uusi funktsioone, mistĂ”ttu on Kubernetesega töötamine jĂ€rjest lihtsam ja mugavam.

Cloud Native Foundation korraldab ka CloudNativeCon/KubeCon'i, mis on hetke seisuga maailman kĂ”ige suurem avatud lĂ€htekoodiga konverents. Tavaline on, et see toimub kolm korda aastas ja kogub kokku tuhandeid professionaale, kes soovivad Kuberneteset ja selle ökosĂŒsteemi parandada, samuti tutvuda uute vĂ”imalustega, mis ilmuvad iga kolme kuu tagant.

Lisaks on Cloud Native Foundationil Tehnilise JĂ€relevalve Komitee, mis koos SIGidega hindab uusi ja olemasolevaid projekte fondi, mis on suunatud pilveökosĂŒsteemile. Enamik neist projektidest aitab parandada Kubernetes'i tugevusi.

LĂ”finally, ma usun, et Kubernetes ei oleks saavutanud sellist edu ilma kogu kogukonna teadlike pingutusteta, kus inimesed toetavad ĂŒksteist, kuid samas vĂ”tavad rÔÔmuga vastu uusi liikmeid.

Tulevik

Üks peamisi vĂ€ljakutseid, millega arendajad tulevikus silmitsi seisavad, on oskus keskenduda koodi detailidele, mitte sellele infrastruktuurile, kus see töötab. Just sellele suunale vastab serveriteta arhitektuuri paradigma, mis on tĂ€na ĂŒks juhtivaid. Juba on olemas arenenud raamistikud, nĂ€iteks Knative ja OpenFaas, mis kasutavad Kubernetes'e, et abstraheerida infrastruktuur arendajast.

Selles artiklis kĂ€sitlesime me ainult ĂŒldiselt Kubernetes'e praegust olekut – tegelikult on see vaid jÀÀmĂ€e(tipp). Kubernetes'e kasutajatel on ka palju teisi ressursse, vĂ”imalusi ja konfiguratsioone.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster