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

Head lugemist!
KÀesoleva artikli kirjutamise ajal on Kubernetes umbes , ja viimase kahe aasta jooksul on tema populaarsus kasvanud nii, et ta on pidevalt olnud 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 , ja alates 2002. aastast â nimitsoonid. Konteinerid hakkasid veelgi paremini vĂ€lja kujunema 2008. aastaks, kui said kĂ€tte , ja Google töötas vĂ€lja oma sisemised mehhanismid nimega , 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 , 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: 80Sellise 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 , YAML/JSON valideerija, pluss , poliitikate valideerija, mis aitab veenduda, et kontekst teie töökoormuste jaoks ei vÔimalda konteineril töötada administraatori Ôigustes. Kui see on vajalik tagada, 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 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 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 , 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 .
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. on eriline protsess Kubernetes klastris, mis töötab ââ. 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 â ja selle . 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-operatorNii 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.goSeejÀ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=MyAppServicePÀ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, , vÔimaldades luua operaattoreid, kasutades ainult deklaratiivseid YAML-faile. NÀiteks mÀÀratletakse Apache Kafka operaator umbes . Selle abil saab vaid paari kÀsuga instalarida Kafka kluster Kubernetes'i peale:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaJa 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 .
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 .
Eksisteerivad ka mitmed kogukonnad (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 , mis koos SIGidega hindab uusi ja olemasolevaid 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 , mis on tĂ€na ĂŒks juhtivaid. Juba on olemas arenenud raamistikud, nĂ€iteks ja , 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
