Izvietojiet lietojumprogrammas vairÄkos Kubernetes klasteros, izmantojot Helm
KÄ Dailymotion izmanto Kubernetes: lietojumprogrammu izvietoÅ”ana
MÄs, Dailymotion, sÄkÄm izmantot Kubernetes ražoÅ”anÄ pirms 3 gadiem. TaÄu lietojumprogrammu izvietoÅ”ana vairÄkos klasteros ir jautra, tÄpÄc dažu pÄdÄjo gadu laikÄ mÄs esam mÄÄ£inÄjuÅ”i uzlabot savus rÄ«kus un darbplÅ«smas.
Kur tas sÄkÄs
Å eit mÄs apskatÄ«sim, kÄ mÄs izvietojam savas lietojumprogrammas vairÄkos Kubernetes klasteros visÄ pasaulÄ.
Lai vienlaikus izvietotu vairÄkus Kubernetes objektus, mÄs izmantojam StÅ«re, un visas mÅ«su diagrammas tiek glabÄtas vienÄ git repozitorijÄ. Lai izvietotu pilnu lietojumprogrammu kopu no vairÄkiem pakalpojumiem, mÄs izmantojam tÄ saukto kopsavilkuma diagrammu. BÅ«tÄ«bÄ Å”Ä« ir diagramma, kas deklarÄ atkarÄ«bas un ļauj inicializÄt API un tÄs pakalpojumus ar vienu komandu.
MÄs arÄ« uzrakstÄ«jÄm nelielu Python skriptu uz Helm, lai veiktu pÄrbaudes, izveidotu diagrammas, pievienotu noslÄpumus un izvietotu lietojumprogrammas. Visi Å”ie uzdevumi tiek veikti uz centrÄlÄs CI platformas, izmantojot docker attÄlu.
Ķeramies pie lietas.
PiezÄ«me. Lasot Å”o, pirmais Helm 3 izlaiduma kandidÄts jau ir paziÅots. GalvenÄ versija ietver virkni uzlabojumu, lai risinÄtu dažas problÄmas, ar kurÄm esam saskÄruÅ”ies iepriekÅ”.
Diagrammu izstrÄdes darbplÅ«sma
LietojumprogrammÄm mÄs izmantojam sazaroÅ”anu, un mÄs nolÄmÄm piemÄrot to paÅ”u pieeju diagrammÄm.
FiliÄle dev izmanto, lai izveidotu diagrammas, kas tiks pÄrbaudÄ«tas izstrÄdes klasteros.
Kad tiek iesniegts izvilkÅ”anas pieprasÄ«jums meistars, tie tiek pÄrbaudÄ«ti iestudÄjumÄ.
Visbeidzot, mÄs izveidojam izvilkÅ”anas pieprasÄ«jumu, lai veiktu izmaiÅas filiÄlÄ prod un pielietot tos ražoÅ”anÄ.
Katrai videi ir sava privÄtÄ repozitorija, kurÄ tiek glabÄtas mÅ«su diagrammas, un mÄs to izmantojam Chartmuseum ar ļoti noderÄ«gÄm API. TÄdÄ veidÄ mÄs nodroÅ”inÄm stingru izolÄciju starp vidÄm un diagrammu testÄÅ”anu reÄlajÄ pasaulÄ pirms to izmantoÅ”anas ražoÅ”anÄ.
Diagrammu krÄtuves dažÄdÄs vidÄs
Ir vÄrts atzÄ«mÄt, ka tad, kad izstrÄdÄtÄji nospiež filiÄli izstrÄdÄtÄjam, viÅu diagrammas versija tiek automÄtiski nosÅ«tÄ«ta uz izstrÄdÄtÄju Chartmuseum. TÄdÄjÄdi visi izstrÄdÄtÄji izmanto vienu un to paÅ”u izstrÄdÄtÄju repozitoriju, un jums rÅ«pÄ«gi jÄnorÄda diagrammas versija, lai nejauÅ”i neizmantotu kÄda cita veiktÄs izmaiÅas.
TurklÄt mÅ«su mazais Python skripts apstiprina Kubernetes objektus saskaÅÄ ar Kubernetes OpenAPI specifikÄcijÄm, izmantojot Kubeval, pirms tos publicÄjat Chartmusem.
Docker attÄla nosÅ«tÄ«Å”ana, izmantojot Python rÄ«kus, kas izvieto mÅ«su lietojumprogrammas.
Vides iestatÄ«Å”ana pÄc filiÄles nosaukuma.
Kubernetes yaml failu validÄcija, izmantojot Kubeval.
AutomÄtiski palielinÄt diagrammas versiju un tÄs vecÄkdiagrammas (diagrammas, kas ir atkarÄ«gas no mainÄ«tÄs diagrammas).
Diagrammas iesniegÅ”ana Chartmuseum, kas atbilst tÄ videi
AtŔķirÄ«bu pÄrvaldÄ«ba starp klasteriem
Klasteru federÄcija
Bija laiks, kad izmantojÄm Kubernetes klasteru federÄcija, kur Kubernetes objektus var deklarÄt no viena API galapunkta. Bet radÄs problÄmas. PiemÄram, dažus Kubernetes objektus nevarÄja izveidot federÄcijas galapunktÄ, tÄpÄc ir grÅ«ti uzturÄt apvienotos objektus un citus objektus atseviŔķÄm kopÄm.
Lai atrisinÄtu problÄmu, mÄs sÄkÄm pÄrvaldÄ«t klasterus neatkarÄ«gi, kas ievÄrojami vienkÄrÅ”oja procesu (mÄs izmantojÄm pirmo federÄcijas versiju; otrajÄ, iespÄjams, kaut kas ir mainÄ«jies).
Ä¢eogrÄfiski izplatÄ«ta platforma
MÅ«su platforma paÅ”laik ir izplatÄ«ta 6 reÄ£ionos ā 3 lokÄli un 3 mÄkonÄ«.
IzkliedÄtÄ izvietoÅ”ana
GlobÄlÄs Helm vÄrtÄ«bas
4 globÄlÄs Helm vÄrtÄ«bas ļauj noteikt atŔķirÄ«bas starp klasteriem. VisÄm mÅ«su diagrammÄm ir noklusÄjuma minimÄlÄs vÄrtÄ«bas.
Å Ä«s vÄrtÄ«bas palÄ«dz noteikt kontekstu mÅ«su lietojumprogrammÄm un tiek izmantotas dažÄdiem mÄrÄ·iem: uzraudzÄ«bai, izsekoÅ”ana, reÄ£istrÄÅ”ana, ÄrÄjo zvanu veikÅ”ana, mÄrogoÅ”ana utt.
"mÄkonis": mums ir hibrÄ«da Kubernetes platforma. PiemÄram, mÅ«su API ir izvietota GCP zonÄs un mÅ«su datu centros.
"env": dažas vÄrtÄ«bas var mainÄ«ties vidÄs, kas nav ražotas. PiemÄram, resursu definÄ«cijas un automÄtiskÄs mÄrogoÅ”anas konfigurÄcijas.
"reÄ£ions": Ŕī informÄcija palÄ«dz noteikt klastera atraÅ”anÄs vietu, un to var izmantot, lai noteiktu tuvumÄ esoÅ”os ÄrÄjo pakalpojumu galapunktus.
"clusterName": ja un kad mÄs vÄlamies definÄt vÄrtÄ«bu atseviŔķam klasterim.
Å eit ir konkrÄts piemÄrs:
{{/* Returns Horizontal Pod Autoscaler replicas for GraphQL*/}}
{{- define "graphql.hpaReplicas" -}}
{{- if eq .Values.global.env "prod" }}
{{- if eq .Values.global.region "europe-west1" }}
minReplicas: 40
{{- else }}
minReplicas: 150
{{- end }}
maxReplicas: 1400
{{- else }}
minReplicas: 4
maxReplicas: 20
{{- end }}
{{- end -}}
StÅ«res veidnes piemÄrs
Å Ä« loÄ£ika ir definÄta palÄ«ga veidnÄ, lai izvairÄ«tos no Kubernetes YAML pÄrblÄ«vÄÅ”anas.
PaziÅojums par pieteikÅ”anos
MÅ«su izvietoÅ”anas rÄ«ki ir balstÄ«ti uz vairÄkiem YAML failiem. TÄlÄk ir sniegts piemÄrs tam, kÄ mÄs klasterÄ« deklarÄjam pakalpojumu un tÄ mÄrogoÅ”anas topoloÄ£iju (reprodukciju skaitu).
Å is ir visu darbÄ«bu izklÄsts, kas nosaka mÅ«su izvietoÅ”anas darbplÅ«smu. PÄdÄjÄ darbÄ«ba izvieto lietojumprogrammu vairÄkÄs darbinieku kopÄs vienlaikus.
Dženkinsa izvietoŔanas soļi
KÄ ar noslÄpumiem?
AttiecÄ«bÄ uz droŔību mÄs izsekojam visus noslÄpumus no dažÄdÄm vietÄm un glabÄjam tos unikÄlÄ glabÄtuvÄ VelvÄt ParÄ«zÄ.
MÅ«su izvietoÅ”anas rÄ«ki iegÅ«st slepenÄs vÄrtÄ«bas no Vault un, kad pienÄks izvietoÅ”anas laiks, ievieto tÄs Helm.
Lai to izdarÄ«tu, mÄs definÄjÄm kartÄÅ”anu starp Vault noslÄpumiem un noslÄpumiem, kas nepiecieÅ”ami mÅ«su lietojumprogrammÄm.
Esam definÄjuÅ”i vispÄrÄ«gus noteikumus, kas jÄievÄro, ierakstot noslÄpumus pakalpojumÄ Vault.
Ja noslÄpums attiecas uz konkrÄtu kontekstu vai kopu, jums jÄpievieno konkrÄts ieraksts. (Å eit konteksta klasterim1 ir sava vÄrtÄ«ba slepenajai steka-app1-parolei).
PretÄjÄ gadÄ«jumÄ tiek izmantota vÄrtÄ«ba pÄc noklusÄjuma.
Katram Ŕī saraksta vienumam Kubernetes noslÄpums tiek ievietots atslÄgas-vÄrtÄ«bas pÄris. TÄpÄc mÅ«su diagrammu slepenÄ veidne ir ļoti vienkÄrÅ”a.
Tagad mÄs atdalÄm diagrammu un lietojumprogrammu izstrÄdi. Tas nozÄ«mÄ, ka izstrÄdÄtÄjiem ir jÄstrÄdÄ divÄs git krÄtuvÄs: viena lietojumprogrammai un otra, lai noteiktu tÄs izvietoÅ”anu Kubernetes. 2 git krÄtuves nozÄ«mÄ 2 darbplÅ«smas, un iesÄcÄjs var viegli apjukt.
VispÄrinÄto diagrammu pÄrvaldÄ«ba ir apgrÅ«tinÄjums
KÄ jau teicÄm, vispÄrÄ«gÄs diagrammas ir ļoti noderÄ«gas, lai identificÄtu atkarÄ«bas un Ätri izvietotu vairÄkas lietojumprogrammas. Bet lietojam --reuse-valueslai izvairÄ«tos no visu vÄrtÄ«bu nodoÅ”anas ikreiz, kad izvietojam lietojumprogrammu, kas ir daļa no Ŕīs vispÄrÄ«gÄs diagrammas.
NepÄrtrauktÄ piegÄdes darbplÅ«smÄ mums ir tikai divas vÄrtÄ«bas, kas regulÄri mainÄs: kopiju skaits un attÄla tags (versija). Citas, stabilÄkas vÄrtÄ«bas tiek mainÄ«tas manuÄli, un tas ir diezgan grÅ«ti. TurklÄt viena kļūda, izvietojot vispÄrinÄtu diagrammu, var izraisÄ«t nopietnas kļūmes, kÄ mÄs esam redzÄjuÅ”i no mÅ«su paÅ”u pieredzes.
VairÄku konfigurÄcijas failu atjauninÄÅ”ana
Kad izstrÄdÄtÄjs pievieno jaunu lietojumprogrammu, viÅam ir jÄmaina vairÄki faili: lietojumprogrammas deklarÄcija, noslÄpumu saraksts, pievienojot lietojumprogrammu kÄ atkarÄ«bu, ja tÄ ir iekļauta vispÄrinÄtajÄ diagrammÄ.
Dženkinsa atļaujas pakalpojumÄ Vault ir pÄrÄk paplaÅ”inÄtas
Tagad mums ir viens AppRole, kas nolasa visus noslÄpumus no Vault.
AtcelÅ”anas process nav automatizÄts
Lai atsauktu, jums ir jÄpalaiž komanda vairÄkos klasteros, un tas ir pilns ar kļūdÄm. MÄs veicam Å”o darbÄ«bu manuÄli, lai nodroÅ”inÄtu, ka ir norÄdÄ«ts pareizais versijas ID.
DarbplÅ«sma bÅ«s tÄda pati kÄ izstrÄdei. PiemÄram, kad filiÄle tiek virzÄ«ta uz galveno, izvietoÅ”ana tiks aktivizÄta automÄtiski. GalvenÄ atŔķirÄ«ba starp Å”o pieeju un paÅ”reizÄjo darbplÅ«smu ir tÄda viss tiks pÄrvaldÄ«ts gitÄ (pati lietojumprogramma un veids, kÄ tÄ tiek izvietota Kubernetes).
Ir vairÄkas priekÅ”rocÄ«bas:
Daudz skaidrÄks izstrÄdÄtÄjam. Ir vieglÄk iemÄcÄ«ties piemÄrot izmaiÅas vietÄjÄ diagrammÄ.
Pakalpojuma izvietoÅ”anas definÄ«ciju var norÄdÄ«t tajÄ paÅ”Ä vietÄ, kur kods apkalpoÅ”ana.
VispÄrÄjo diagrammu noÅemÅ”anas pÄrvaldÄ«ba. Pakalpojumam bÅ«s savs Helm izlaidums. Tas ļaus pÄrvaldÄ«t lietojumprogrammas dzÄ«ves ciklu (atcelÅ”anu, jauninÄÅ”anu) mazÄkajÄ lÄ«menÄ«, lai neietekmÄtu citus pakalpojumus.
Git priekÅ”rocÄ«bas diagrammas pÄrvaldÄ«bai: atsaukt izmaiÅas, audita žurnÄls utt. Ja jums ir jÄatsauc izmaiÅas diagrammÄ, varat to izdarÄ«t, izmantojot git. IzvietoÅ”ana sÄkas automÄtiski.
Varat apsvÄrt iespÄju uzlabot izstrÄdes darbplÅ«smu, izmantojot tÄdus rÄ«kus kÄ Skaffold, ar kuru izstrÄdÄtÄji var pÄrbaudÄ«t izmaiÅas kontekstÄ, kas ir tuvu ražoÅ”anai.
DivpakÄpju migrÄcija
MÅ«su izstrÄdÄtÄji Å”o darbplÅ«smu izmanto jau 2 gadus, tÄpÄc vÄlamies, lai migrÄÅ”ana bÅ«tu pÄc iespÄjas nesÄpÄ«gÄka. TÄpÄc mÄs nolÄmÄm pievienot starpposmu ceÄ¼Ä uz mÄrÄ·i.
Pirmais posms ir vienkÄrÅ”s:
MÄs saglabÄjam lÄ«dzÄ«gu struktÅ«ru lietojumprogrammu izvietoÅ”anas iestatÄ«Å”anai, taÄu vienÄ objektÄ ar nosaukumu DailymotionRelease.
1 izlaidums katrai lietojumprogrammai (bez vispÄrÄ«gÄm diagrammÄm).
Diagrammas lietojumprogrammas git repozitorijÄ.
MÄs esam runÄjuÅ”i ar visiem izstrÄdÄtÄjiem, tÄpÄc migrÄcijas process jau ir sÄcies. Pirmais posms joprojÄm tiek kontrolÄts, izmantojot CI platformu. DrÄ«zumÄ uzrakstÄ«Å”u vÄl vienu ziÅu par otro posmu: kÄ mÄs pÄrgÄjÄm uz GitOps darbplÅ«smu PlÅ«dums. Es jums pastÄstÄ«Å”u, kÄ mÄs visu iestatÄ«jÄm un ar kÄdÄm grÅ«tÄ«bÄm saskÄrÄmies (vairÄkas krÄtuves, noslÄpumi utt.). Sekojiet jaunumiem.
Å eit mÄs esam mÄÄ£inÄjuÅ”i aprakstÄ«t mÅ«su progresu lietojumprogrammu izvietoÅ”anas darbplÅ«smÄ pÄdÄjos gados, kas radÄ«ja domas par GitOps pieeju. MÄs vÄl neesam sasnieguÅ”i mÄrÄ·i un ziÅosim par rezultÄtiem, taÄu tagad esam pÄrliecinÄti, ka rÄ«kojÄmies pareizi, kad nolÄmÄm visu vienkÄrÅ”ot un tuvinÄt izstrÄdÄtÄju paradumiem.