Uża applikazzjonijiet f'diversi clusters ta' Kubernetes ma' Helm
Kif Dailymotion juża Kubernetes: Applikazzjoni Skjerament
Aħna f'Dailymotion bdejna nużaw Kubernetes fil-produzzjoni 3 snin ilu. Iżda l-iskjerament ta' applikazzjonijiet f'diversi clusters huwa pjaċevoli, għalhekk matul l-aħħar ftit snin konna qed nippruvaw intejbu l-għodod u l-flussi tax-xogħol tagħna.
Fejn bdiet
Hawnhekk ser inkopru kif niskjeraw l-applikazzjonijiet tagħna f'diversi clusters ta' Kubernetes madwar id-dinja.
Biex nużaw diversi oġġetti Kubernetes f'daqqa, nużaw Helm, u ċ-ċarts kollha tagħna huma maħżuna f'repożitorju git wieħed. Biex niskjeraw munzell sħiħ ta 'applikazzjonijiet minn diversi servizzi, nużaw l-hekk imsejħa chart sommarju. Essenzjalment, din hija chart li tiddikjara dipendenzi u tippermettilek tibda l-API u s-servizzi tagħha bi kmand wieħed.
Aħna ktibna wkoll script Python żgħir fuq Helm biex nagħmlu kontrolli, noħolqu charts, inżidu sigrieti, u niskjeraw applikazzjonijiet. Dawn il-kompiti kollha huma mwettqa fuq pjattaforma CI ċentrali bl-użu ta 'immaġni docker.
Ejja mmorru sal-punt.
Nota. Hekk kif taqra dan, diġà tħabbar l-ewwel kandidat għar-rilaxx għal Helm 3. Il-verżjoni prinċipali fiha għadd sħiħ ta 'titjib biex jindirizzaw xi wħud mill-kwistjonijiet li ltqajna magħhom fil-passat.
Fluss tax-xogħol tal-iżvilupp taċ-ċart
Aħna nużaw fergħat għall-applikazzjonijiet, u ddeċidejna li napplikaw l-istess approċċ għaċ-ċarts.
Fergħa dev użati biex jinħolqu charts li se jiġu ttestjati fuq clusters ta 'żvilupp.
Meta tintbagħat talba tal-ġibda lil kaptan, huma kkontrollati fl-istadju.
Fl-aħħarnett, noħolqu talba ta 'ġibda biex tikkommetti l-bidliet fil-fergħa produzzjoni u japplikawhom fil-produzzjoni.
Kull ambjent għandu repożitorju privat tiegħu stess li jaħżen iċ-ċarts tagħna, u nużaw Chartmuseum b'APIs utli ħafna. B'dan il-mod aħna niżguraw iżolament strett bejn l-ambjenti u l-ittestjar fid-dinja reali ta 'charts qabel nużawhom fil-produzzjoni.
Repożitorji taċ-ċarts f'ambjenti differenti
Ta 'min jinnota li meta l-iżviluppaturi jimbuttaw fergħa ta' dev, verżjoni taċ-ċart tagħhom tiġi awtomatikament imbuttata lejn id-dev Chartmuseum. Għalhekk, l-iżviluppaturi kollha jużaw l-istess repożitorju dev, u għandek bżonn tispeċifika bir-reqqa l-verżjoni tiegħek tat-tabella sabiex ma tużax aċċidentalment il-bidliet ta 'xi ħadd ieħor.
Barra minn hekk, l-iskrittura żgħira tagħna ta' Python jivvalida l-oġġetti Kubernetes kontra l-ispeċifikazzjonijiet ta' Kubernetes OpenAPI billi tuża Kubeval, qabel ma tippubblikahom fuq Chartmusem.
Deskrizzjoni ġenerali tal-fluss tax-xogħol tal-iżvilupp taċ-ċart
Twaqqif ta 'kompiti tal-pipeline skont l-ispeċifikazzjoni gazr.io għall-kontroll tal-kwalità (lint, unit-test).
Imbuttar immaġni docker b'għodod Python li jużaw l-applikazzjonijiet tagħna.
It-twaqqif tal-ambjent bl-isem tal-fergħa.
Il-validazzjoni tal-fajls yaml ta' Kubernetes bl-użu ta' Kubeval.
Żid awtomatikament il-verżjoni ta 'ċart u ċ-ċarts prinċipali tagħha (ċarts li jiddependu fuq iċ-ċart li qed tinbidel).
Tissottometti chart lil Chartmuseum li taqbel mal-ambjent tiegħu
Il-ġestjoni tad-differenzi bejn il-clusters
Federazzjoni ta' Clusters
Kien hemm żmien meta użajna federazzjoni ta' raggruppamenti ta' Kubernetes, fejn l-oġġetti Kubernetes jistgħu jiġu ddikjarati minn endpoint API wieħed. Iżda qamu problemi. Pereżempju, xi oġġetti Kubernetes ma setgħux jinħolqu fl-endpoint tal-federazzjoni, li jagħmilha diffiċli biex jinżammu oġġetti federati u oġġetti oħra għal clusters individwali.
Biex insolvu l-problema, bdejna nimmaniġġjaw ir-raggruppamenti b'mod indipendenti, li ssimplifikat ħafna l-proċess (użajna l-ewwel verżjoni tal-federazzjoni; xi ħaġa setgħet inbidlet fit-tieni).
Pjattaforma ġeo distribwita
Il-pjattaforma tagħna bħalissa hija mqassma fuq 6 reġjuni - 3 lokalment u 3 fil-cloud.
Skjerament Mqassam
Valuri Globali ta' Helm
4 valuri globali ta’ Helm jippermettulek tidentifika d-differenzi bejn il-clusters. Il-mapep kollha tagħna għandhom valuri minimi default.
Dawn il-valuri jgħinu biex jiddefinixxu l-kuntest għall-applikazzjonijiet tagħna u jintużaw għal diversi skopijiet: monitoraġġ, traċċar, illoggjar, jagħmlu sejħiet esterni, skalar, eċċ.
"sħaba": Għandna pjattaforma Kubernetes ibrida. Pereżempju, l-API tagħna hija skjerata fiż-żoni tal-GCP u fiċ-ċentri tad-dejta tagħna.
"env": Xi valuri jistgħu jinbidlu għal ambjenti mhux tal-produzzjoni. Per eżempju, definizzjonijiet tar-riżorsi u konfigurazzjonijiet ta 'autoscaling.
"reġjun": Din l-informazzjoni tgħin tiddetermina l-post tal-cluster u tista 'tintuża biex tiddetermina endpoints fil-qrib għal servizzi esterni.
"clusterName": jekk u meta rridu niddefinixxu valur għal cluster individwali.
Hawn eżempju speċifiku:
{{/* 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 -}}
Eżempju tal-mudell tat-tmun
Din il-loġika hija definita f'mudell ta' għajnuna biex tevita l-imbarazz ta' Kubernetes YAML.
Avviż ta' Applikazzjoni
L-għodod tal-iskjerament tagħna huma bbażati fuq fajls YAML multipli. Hawn taħt hemm eżempju ta 'kif aħna niddikjaraw servizz u t-topoloġija tal-iskala tiegħu (numru ta' repliki) fi cluster.
Din hija deskrizzjoni ġenerali tal-passi kollha li jiddefinixxu l-fluss tax-xogħol tal-iskjerament tagħna. L-aħħar pass juża l-applikazzjoni għal gruppi multipli ta’ ħaddiema simultanjament.
Passi ta' Skjerament ta' Jenkins
Xi ngħidu dwar is-sigrieti?
Rigward is-sigurtà, aħna nsegwu s-sigrieti kollha minn postijiet differenti u naħżnuhom f'kaxxa-forti unika Vault f’Pariġi.
L-għodod tal-iskjerament tagħna jiġbdu valuri sigrieti minn Vault u, meta jasal iż-żmien tal-iskjerament, daħħalhom f'Helm.
Biex nagħmlu dan, iddefinijna mapping bejn is-sigrieti fil-Vault u s-sigrieti li jeħtieġu l-applikazzjonijiet tagħna:
Iddefinijna regoli ġenerali li għandhom isegwu meta nirreġistraw sigrieti fil-Vault.
Jekk is-sigriet japplika għal kuntest jew cluster speċifiku, trid iżżid entrata speċifika. (Hawnhekk il-kuntest cluster1 għandu l-valur tiegħu stess għall-munzell sigriet-app1-password).
Inkella jintuża l-valur b'kontumaċja.
Għal kull oġġett f'din il-lista fi Kubernetes sigriet jiddaħħal par ċavetta-valur. Għalhekk, il-mudell sigriet fil-mapep tagħna huwa sempliċi ħafna.
Issa nisseparaw l-iżvilupp ta 'charts u applikazzjonijiet. Dan ifisser li l-iżviluppaturi jridu jaħdmu f'żewġ repożitorji git: wieħed għall-applikazzjoni, u wieħed għad-definizzjoni tal-iskjerament tagħha għal Kubernetes. 2 repożitorji git ifissru 2 flussi tax-xogħol, u huwa faċli għal newbie li jitħawwad.
Il-ġestjoni ta 'charts ġeneralizzati hija battikata
Kif diġà għidna, iċ-ċarts ġeneriċi huma utli ħafna biex jiġu identifikati d-dipendenzi u jiġu skjerati malajr applikazzjonijiet multipli. Imma nużaw --reuse-valuesbiex nevitaw li ngħaddu l-valuri kollha kull darba li niskjeraw applikazzjoni li hija parti minn din it-tabella ġeneralizzata.
Fi fluss tax-xogħol ta 'kunsinna kontinwu, għandna biss żewġ valuri li jinbidlu regolarment: in-numru ta' repliki u t-tikketta tal-immaġni (verżjoni). Valuri oħra aktar stabbli jinbidlu manwalment, u dan huwa pjuttost diffiċli. Barra minn hekk, żball wieħed fl-iskjerament ta 'chart ġeneralizzat jista' jwassal għal fallimenti serji, kif rajna mill-esperjenza tagħna stess.
Aġġornament ta 'fajls ta' konfigurazzjoni multipli
Meta żviluppatur iżid applikazzjoni ġdida, irid ibiddel diversi fajls: id-dikjarazzjoni tal-applikazzjoni, il-lista tas-sigrieti, iżid l-applikazzjoni bħala dipendenza jekk tkun inkluża fit-tabella ġeneralizzata.
Il-permessi ta' Jenkins huma estiżi wisq fil-Vault
Issa għandna waħda AppRole, li jaqra s-sigrieti kollha mill-Vault.
Il-proċess ta 'rollback mhuwiex awtomatizzat
Biex twaqqaf, għandek bżonn tmexxi l-kmand fuq diversi clusters, u dan huwa mimli żbalji. Aħna nwettqu din l-operazzjoni manwalment biex niżguraw li l-ID tal-verżjoni korretta tkun speċifikata.
Qegħdin nimxu lejn GitOps
L-għan tagħna
Irridu nirritornaw iċ-ċart lir-repożitorju tal-applikazzjoni li tiskjera.
Il-fluss tax-xogħol se jkun l-istess bħal għall-iżvilupp. Pereżempju, meta fergħa tiġi mbuttata biex tikkontrolla, l-iskjerament jiġi attivat awtomatikament. Id-differenza ewlenija bejn dan l-approċċ u l-fluss tax-xogħol attwali tkun dik kollox se jiġi ġestit f'git (l-applikazzjoni nnifisha u l-mod kif tiġi skjerata fil-Kubernetes).
Hemm diversi vantaġġi:
Ħafna aktar ċari għall-iżviluppatur. Huwa aktar faċli li titgħallem kif tapplika l-bidliet f'ċart lokali.
Id-definizzjoni tal-iskjerament tas-servizz tista' tiġi speċifikata l-istess post bħall-kodiċi servizz.
Ġestjoni tat-tneħħija ta 'charts ġeneralizzati. Is-servizz se jkollu r-rilaxx ta' Helm tiegħu stess. Dan jippermettilek timmaniġġja ċ-ċiklu tal-ħajja tal-applikazzjoni (rollback, upgrade) fl-iżgħar livell, sabiex ma taffettwax servizzi oħra.
Benefiċċji ta 'git għall-ġestjoni taċ-ċart: ħoll bidliet, log tal-awditjar, eċċ. Jekk għandek bżonn tħoll bidla għal chart, tista 'tagħmel dan billi tuża git. L-iskjerament jibda awtomatikament.
Tista' tikkunsidra li ttejjeb il-fluss tax-xogħol tal-iżvilupp tiegħek b'għodod bħal Skaffold, li biha l-iżviluppaturi jistgħu jittestjaw il-bidliet f'kuntest qrib il-produzzjoni.
Migrazzjoni f'żewġ stadji
L-iżviluppaturi tagħna ilhom jużaw dan il-fluss tax-xogħol għal sentejn issa, għalhekk irridu li l-migrazzjoni tkun bla tbatija kemm jista 'jkun. Għalhekk, iddeċidejna li nżidu pass intermedju fit-triq lejn l-għan.
L-ewwel stadju huwa sempliċi:
Aħna nżommu struttura simili għat-twaqqif tal-iskjerament tal-applikazzjoni, iżda f'oġġett wieħed imsejjaħ DailymotionRelease.
1 rilaxx għal kull applikazzjoni (mingħajr mapep ġeneralizzati).
Ċarts fir-repożitorju git tal-applikazzjoni.
Tkellimna mal-iżviluppaturi kollha, għalhekk il-proċess tal-migrazzjoni diġà beda. L-ewwel stadju għadu kkontrollat bl-użu tal-pjattaforma CI. Jien ser nikteb post ieħor dalwaqt dwar it-tieni fażi: kif aħna mċaqalqa għal fluss tax-xogħol GitOps bi Fluss. Jien ngħidlek kif waqqafna kollox u liema diffikultajiet iltqajna magħhom (repożitorji multipli, sigrieti, eċċ.). Segwi l-aħbarijiet.
Hawnhekk ippruvajna niddeskrivu l-progress tagħna fil-fluss tax-xogħol tal-iskjerament tal-applikazzjoni matul is-snin li għaddew, li wassal għal ħsibijiet dwar l-approċċ GitOps. Għadna ma lħaqniex l-għan u se nirrapportaw dwar ir-riżultati, iżda issa aħna konvinti li għamilna l-aħjar meta ddeċidejna li nissimplifikaw kollox u nressqu eqreb lejn id-drawwiet tal-iżviluppaturi.