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

Head lugemist!
KÀesoleva artikli kirjutamise ajal on Kubernetes umbes , ja viimase kahe aasta jooksul on selle populaarsus kasvanud sedavÔrd, et see on alaliselt kolm kÔige armastatumat 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 , ja Google'is arendati vĂ€lja oma sisemine mehhanism nimega Borg Mesos 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: 80Sellise 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 , YAML/JSON valideerija, pluss , poliitika valideerija, mis aitab veenduda, et kontekst teie töökoormused ei luba konteineril töötada administraatori Ôigustega. Kui see on vajalik, saavad kasutajad rakendada lihtsat poliitikat , 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 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 , 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 .
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. on eriline protsess Kubernetes'i klastris, mis töötab ââ 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 ja selle . 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-operatorNii 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.goSeejÀ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=MyAppServicePÀ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, , vÔimaldab luua operaatorid, kasutades ainult deklaratiivseid YAML-faile. NÀiteks Apache Kafka operaator mÀÀratletakse ligikaudu . Selle abil saab lihtsalt paarist kÀsust luua Kafka klastrit Kubernetesel:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaJa 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 .
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 .
Eksisteerivad ka mitmesugused kogukonnad (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 , mis koos SIG-dega vaatab ĂŒle uusi ja olemasolevaid 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 , mis on tĂ€na ĂŒks juhtivaid. Juba on olemas edasijĂ”udnud raamistikud, nagu ja , 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
