Äau Habr!
Vasaras beigÄs vÄlamies atgÄdinÄt, ka turpinÄm darbu pie tÄmas un nolÄma jÅ«nija sÄkumÄ publicÄt Stackoverflow rakstu, kurÄ parÄdÄ«ta Ŕī projekta situÄcija.

Baudiet lasīŔanu!
Å Ä« raksta tapÅ”anas brÄ«dÄ« Kubernetes vecums ir apm. , un pÄdÄjo divu gadu laikÄ tÄ popularitÄte ir tik ļoti augusi, ka tÄ pastÄvÄ«gi tiek ierindota starp platformas. Kubernetes Å”ogad ieÅem treÅ”o vietu. RezumÄjot: Kubernetes ir platforma, kas paredzÄta konteinerizÄtu darba slodžu vadīŔanai un vadīŔanai.
Konteineri radÄs kÄ Ä«paÅ”s dizains procesu izolÄÅ”anai Linux; kopÅ” 2007. gada konteineros ir iekļauts , un kopÅ” 2002. gada ā vÄrdu telpas. Konteineri tika izstrÄdÄti vÄl labÄk lÄ«dz 2008. gadam, kad tie kļuva pieejami , un Google izstrÄdÄja savu iekÅ”Äjo korporatÄ«vo mehÄnismu, ko sauc , kur āviss darbs tiek veikts konteinerosā. No Å”ejienes mÄs Ätri virzÄmies uz 2013. gadu, kad notika pirmÄ Docker izlaiÅ”ana, un konteineri beidzot kļuva par populÄru masu risinÄjumu. Tolaik galvenais konteineru orÄ·estrÄÅ”anas instruments bija , lai gan viÅÅ” nebija mežonÄ«gi populÄrs. Kubernetes pirmo reizi tika izlaists 2015. gadÄ, pÄc tam Å”is rÄ«ks kļuva par de facto standartu konteineru orÄ·estrÄÅ”anas jomÄ.
Lai mÄÄ£inÄtu saprast, kÄpÄc Kubernetes ir tik populÄrs, mÄÄ£inÄsim atbildÄt uz dažiem jautÄjumiem. Kad pÄdÄjo reizi izstrÄdÄtÄji varÄja vienoties par lietojumprogrammu izvietoÅ”anu ražoÅ”anÄ? Cik daudz izstrÄdÄtÄju jÅ«s zinÄt, kuri izmanto rÄ«kus, kas tiek nodroÅ”inÄti jau sÄkotnÄji? Cik Å”odien ir mÄkoÅu administratoru, kuri nesaprot, kÄ darbojas lietojumprogrammas? Atbildes uz Å”iem jautÄjumiem aplÅ«kosim Å”ajÄ rakstÄ.
InfrastruktÅ«ra kÄ YAML
PasaulÄ, kas no Leļļu un Å”efpavÄra pÄrgÄja uz Kubernetes, viena no lielÄkajÄm izmaiÅÄm bija pÄreja no āinfrastruktÅ«ras kÄ kodaā uz āinfrastruktÅ«ru kÄ datiemā ā konkrÄti, piemÄram, YAML. Visus Kubernetes resursus, tostarp aplikumus, konfigurÄcijas, izvietotos gadÄ«jumus, sÄjumus utt., var viegli aprakstÄ«t YAML failÄ. PiemÄram:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80Å is skats atvieglo DevOps vai SRE profesionÄļiem, lai pilnÄ«bÄ izteiktu savu darba slodzi, nerakstot kodu tÄdÄs valodÄs kÄ Python vai Javascript.
Citas priekÅ”rocÄ«bas, organizÄjot infrastruktÅ«ru kÄ datus, ir Å”Ädas:
- GitOps vai Git Operations versiju kontrole. Å Ä« pieeja ļauj saglabÄt visus Kubernetes YAML failus git krÄtuvÄs, lai jÅ«s varÄtu precÄ«zi izsekot, kad tika veiktas izmaiÅas, kas tÄs veica un kas tieÅ”i mainÄ«jÄs. Tas palielina darbÄ«bu caurspÄ«dÄ«gumu visÄ organizÄcijÄ un uzlabo darbÄ«bas efektivitÄti, novÄrÅ”ot neskaidrÄ«bas, jo Ä«paÅ”i gadÄ«jumos, kad darbiniekiem jÄmeklÄ nepiecieÅ”amie resursi. TajÄ paÅ”Ä laikÄ kļūst vieglÄk automÄtiski veikt izmaiÅas Kubernetes resursos, vienkÄrÅ”i apvienojot izvilkÅ”anas pieprasÄ«jumu.
- MÄrogojamÄ«ba. Ja resursi ir definÄti kÄ YAML, klasteru operatoriem kļūst ÄrkÄrtÄ«gi viegli mainÄ«t vienu vai divus skaitļus Kubernetes resursÄ, tÄdÄjÄdi mainot tÄ mÄrogoÅ”anu. Kubernetes nodroÅ”ina mehÄnismu horizontÄlai podziÅu automÄtiskai mÄrogoÅ”anai, ko var izmantot, lai Ärti noteiktu minimÄlo un maksimÄlo aplikumu skaitu, kas ir nepiecieÅ”ams konkrÄtÄ izvietoÅ”anas konfigurÄcijÄ, lai apstrÄdÄtu zemu un augstu trafika lÄ«meni. PiemÄram, ja esat izvietojis konfigurÄciju, kurai nepiecieÅ”ama papildu jauda pÄkÅ”Åa trafika pieauguma dÄļ, tad maxReplicas var mainÄ«t no 10 uz 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- DroŔība un vadÄ«ba. YAML ir lieliski piemÄrots, lai novÄrtÄtu, kÄ lietas tiek izvietotas Kubernetes. PiemÄram, lielas droŔības problÄmas ir saistÄ«tas ar to, vai jÅ«su darba slodzes darbojas kÄ lietotÄjs, kas nav administrators. Å ajÄ gadÄ«jumÄ mums var bÅ«t nepiecieÅ”ami tÄdi rÄ«ki kÄ , YAML/JSON validators, plus , politikas apstiprinÄtÄjs, lai nodroÅ”inÄtu kontekstu jÅ«su darba slodze neļauj konteineram darboties ar administratora privilÄÄ£ijÄm. Ja tas ir nepiecieÅ”ams, lietotÄji var piemÄrot vienkÄrÅ”u politiku , kÄ Å”is:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}- IespÄjas integrÄcijai ar mÄkoÅa pakalpojumu sniedzÄju. Viena no ievÄrojamÄkajÄm tendencÄm mÅ«sdienu augsto tehnoloÄ£iju jomÄ ir slodzes izpilde publiskajos mÄkoÅpakalpojumos. Komponenta izmantoÅ”ana Kubernetes ļauj jebkuram klasterim integrÄties ar mÄkoÅa nodroÅ”inÄtÄju, kurÄ tas darbojas. PiemÄram, ja lietotÄjs palaiž lietojumprogrammu Kubernetes pakalpojumÄ AWS un vÄlas atklÄt Å”o lietojumprogrammu, izmantojot pakalpojumu, mÄkoÅa pakalpojumu sniedzÄjs palÄ«dz automÄtiski izveidot pakalpojumu.
LoadBalancerkas automÄtiski nodroÅ”inÄs slodzes balansÄtÄju lai novirzÄ«tu trafiku uz lietojumprogrammu blokiem.
PaplaÅ”inÄmÄ«ba
Kubernetes ir ļoti paplaÅ”inÄma, un izstrÄdÄtÄjiem tas patÄ«k. Ir pieejami vairÄki resursi, piemÄram, podi, izvietojumi, StatefulSets, noslÄpumi, ConfigMapsutt. Tiesa, lietotÄji un izstrÄdÄtÄji veidlapÄ var pievienot citus resursus .
PiemÄram, ja mÄs vÄlamies definÄt resursu CronTab, tad jÅ«s varÄtu rÄ«koties Å”Ädi:
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
VÄlÄk mÄs varam izveidot CronTab resursu, kas lÄ«dzÄ«gs Å”im:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
VÄl viena Kubernetes paplaÅ”inÄÅ”anas iespÄja ir tÄda, ka izstrÄdÄtÄjs var rakstÄ«t savus paziÅojumus. ir Ä«paÅ”s process Kubernetes klasterÄ«, kas darbojas saskaÅÄ ar ā" Ar operatora palÄ«dzÄ«bu lietotÄjs var automatizÄt CRD (pielÄgotu resursu definÄ«ciju) pÄrvaldÄ«bu, apmainoties ar informÄciju ar Kubernetes API.
KopienÄ ir vairÄki rÄ«ki, kas ļauj izstrÄdÄtÄjiem viegli izveidot savus operatorus. Starp viÅiem - un . Å is SDK nodroÅ”ina pamatu, no kura izstrÄdÄtÄjs var Ätri sÄkt operatora izveidi. PieÅemsim, ka varat sÄkt no komandrindas, piemÄram:
$ operator-sdk new my-operator --repo github.com/myuser/my-operatorTÄdÄjÄdi tiek izveidots viss jÅ«su operatora standarta kods, tostarp YAML faili un Golang kods:
.
|____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.goPÄc tam varat pievienot nepiecieÅ”amos API un kontrolieri, piemÄram:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppServicePÄc tam, visbeidzot, salieciet operatoru un nosÅ«tiet to uz sava konteinera reÄ£istru:
$ operator-sdk build your.container.registry/youruser/myapp-operator Ja izstrÄdÄtÄjs vÄlas vÄl lielÄku kontroli, Go failos esoÅ”o pamatkodu var mainÄ«t. PiemÄram, lai mainÄ«tu kontroliera specifiku, failÄ varat veikt izmaiÅas controller.go.
VÄl viens projekts , ļauj izveidot paziÅojumus, izmantojot tikai deklaratÄ«vos YAML failus. PiemÄram, operators Apache Kafka bÅ«tu definÄts aptuveni . Ar to jÅ«s varat instalÄt Kafka klasteru Kubernetes virspusÄ, veicot tikai dažas komandas:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaUn pÄc tam konfigurÄjiet to, izmantojot citu komandu:
$ 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Äcijas
Dažu pÄdÄjo gadu laikÄ galvenie Kubernetes izlaidumi ir iznÄkuÅ”i ik pÄc dažiem mÄneÅ”iem ā tas ir, trÄ«s lÄ«dz Äetri galvenie laidieni gadÄ. KatrÄ no tÄm ieviesto jauno funkciju skaits nesamazinÄs. TurklÄt pat Å”ajos grÅ«tajos laikos nekas neliecina par bremzÄÅ”anu ā paskatieties, kÄda ir situÄcija Å”obrÄ«d .
JaunÄs iespÄjas ļauj elastÄ«gÄk grupÄt darbÄ«bas dažÄdÄs darba slodzÄs. TurklÄt programmÄtÄjiem ir lielÄka kontrole, izvietojot lietojumprogrammas tieÅ”i ražoÅ”anÄ.
Kopiena
VÄl viens svarÄ«gs Kubernetes popularitÄtes aspekts ir tÄs kopienas spÄks. 2015. gadÄ, sasniedzot versiju 1.0, Kubernetes sponsorÄja .
Ir arÄ« dažÄdas kopienas (ÄŖpaÅ”u intereÅ”u grupas) koncentrÄjÄs uz darbu pie dažÄdÄm Kubernetes jomÄm, projektam attÄ«stoties. Å Ä«s grupas pastÄvÄ«gi pievieno jaunas funkcijas, padarot darbu ar Kubernetes ÄrtÄku un ÄrtÄku.
Cloud Native Foundation rÄ«ko arÄ« CloudNativeCon/KubeCon, kas rakstīŔanas laikÄ ir lielÄkÄ atvÄrtÄ koda konference pasaulÄ. Parasti tas notiek trÄ«s reizes gadÄ, un tajÄ pulcÄjas tÅ«kstoÅ”iem profesionÄļu, kuri vÄlas uzlabot Kubernetes un tÄs ekosistÄmu, kÄ arÄ« apgÅ«t jaunas funkcijas, kas parÄdÄs ik pÄc trim mÄneÅ”iem.
TurklÄt Cloud Native Foundation ir , kas kopÄ ar SIG apskata jaunos un esoÅ”os fondi, kas vÄrsti uz mÄkoÅu ekosistÄmu. LielÄkÄ daļa Å”o projektu palÄ«dz uzlabot Kubernetes stiprÄs puses.
Visbeidzot, es uzskatu, ka Kubernetes nebÅ«tu tik veiksmÄ«gs, kÄ tas ir bez visas kopienas apzinÄtiem centieniem, kur cilvÄki turas kopÄ, bet tajÄ paÅ”Ä laikÄ uzÅem jaunpienÄcÄjus.
NÄkotne
Viens no galvenajiem izaicinÄjumiem, kas izstrÄdÄtÄjiem bÅ«s jÄrisina nÄkotnÄ, ir spÄja koncentrÄties uz paÅ”a koda detaļÄm, nevis uz infrastruktÅ«ru, kurÄ tas darbojas. Tas atbilst Ŕīm tendencÄm , kas Å”odien ir viens no vadoÅ”ajiem. Uzlaboti ietvari jau pastÄv, piem. Šø , kas izmanto Kubernetes, lai abstrahÄtu infrastruktÅ«ru no izstrÄdÄtÄja.
Å ajÄ rakstÄ mÄs esam tikai saskrÄpÄjuÅ”i paÅ”reizÄjo Kubernetes stÄvokli ā patiesÄ«bÄ tÄ ir tikai aisberga redzamÄ daļa. Kubernetes lietotÄju rÄ«cÄ«bÄ ir daudz citu resursu, iespÄju un konfigurÄciju.
Avots: www.habr.com
