Vasaras beigÄs vÄlamies atgÄdinÄt, ka turpinÄm darbu pie tÄmas Kubernetes 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. seÅ”us gadus vecs, un pÄdÄjo divu gadu laikÄ tÄ popularitÄte ir tik ļoti augusi, ka tÄ pastÄvÄ«gi tiek ierindota starp vismīļÄkÄ 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 sÄkÄs kÄ Ä«paÅ”s dizains procesu izolÄÅ”anai operÄtÄjsistÄmÄ Linux; konteineri ir iekļauti kopÅ” 2007. gada grupas, 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 LXC, un Google izstrÄdÄja savu iekÅ”Äjo korporatÄ«vo mehÄnismu, ko sauc Borg, 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 Mesos, 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:
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Ä konkurss, YAML/JSON validators, plus AtvÄrts politikas aÄ£ents, politikas apstiprinÄtÄjs, lai nodroÅ”inÄtu kontekstu DroŔības konteksts 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 ES lÅ«dzos, 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 mÄkoÅa pakalpojumu sniedzÄjs 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 Amazon elastÄ«gais slodzes balansÄtÄjslai 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 pielÄgotas resursu definÄ«cijas.
PiemÄram, ja mÄs vÄlamies definÄt resursu CronTab, tad jÅ«s varÄtu rÄ«koties Å”Ädi:
VÄl viena Kubernetes paplaÅ”inÄÅ”anas iespÄja ir tÄda, ka izstrÄdÄtÄjs var rakstÄ«t savus paziÅojumus. Operators ir Ä«paÅ”s process Kubernetes klasterÄ«, kas darbojas saskaÅÄ ar āvadÄ«bas Ä·Äde" 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 - Operatora sistÄma un Operatora SDK. Å 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-operator
TÄdÄjÄdi tiek izveidots viss jÅ«su operatora standarta kods, tostarp YAML faili un Golang kods:
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 visur, ļauj izveidot paziÅojumus, izmantojot tikai deklaratÄ«vos YAML failus. PiemÄram, operators Apache Kafka bÅ«tu definÄts aptuveni tÄ. Ar to jÅ«s varat instalÄt Kafka klasteru Kubernetes virspusÄ, veicot tikai dažas komandas:
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 Kubernetes projekta darbÄ«ba vietnÄ Github.
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 MÄkoÅu vietÄjÄs skaitļoÅ”anas fonds.
Ir arÄ« dažÄdas kopienas SIG (ÄŖ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 TehniskÄs uzraudzÄ«bas komiteja, kas kopÄ ar SIG apskata jaunos un esoÅ”os Projekti 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 arhitektÅ«ras paradigma bez serveriem, kas Å”odien ir viens no vadoÅ”ajiem. Uzlaboti ietvari jau pastÄv, piem. IzveicÄ«gs Šø OpenFaas, 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.