Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)
8 ta’ April fil-konferenza Saint HighLoad++ 2019, bħala parti mit-taqsima "DevOps u Operazzjonijiet", ingħata rapport "Espansjoni u kumplimentazzjoni ta' Kubernetes", li fil-ħolqien tiegħu pparteċipaw tliet impjegati tal-kumpanija Flant. Fiha, nitkellmu dwar bosta sitwazzjonijiet li fihom ridna nespandu u nikkumplimentaw il-kapaċitajiet ta 'Kubernetes, iżda li għalihom ma sibniex soluzzjoni lesta u sempliċi. Għandna s-soluzzjonijiet meħtieġa fil-forma ta’ proġetti Open Source, u dan id-diskors huwa wkoll iddedikat għalihom.
Bi tradizzjoni, bi pjaċir nippreżentaw vidjo tar-rapport (50 minuta, ħafna aktar informattiv mill-artiklu) u s-sommarju prinċipali f'forma ta 'test. Mur!
Core u żidiet fil-K8s
Kubernetes qed ibiddel l-industrija u l-approċċi għall-amministrazzjoni li ilhom stabbiliti:
Grazzi lilu estrazzjonijiet, aħna m'għadniex noperaw b'kunċetti bħall-istabbiliment ta 'konfigurazzjoni jew it-tmexxija ta' kmand (Chef, Ansible...), iżda nużaw raggruppament ta 'kontenituri, servizzi, eċċ.
Nistgħu nippreparaw applikazzjonijiet mingħajr ma naħsbu dwar l-sfumaturi tal- sit speċifiku, li fuqha se titnieda: bare metal, sħaba ta 'wieħed mill-fornituri, eċċ.
Bil-K8s qatt ma kont aktar aċċessibbli l-aħjar prattiki dwar l-organizzazzjoni tal-infrastruttura: tekniki ta' skalar, awto-fejqan, tolleranza għall-ħsarat, eċċ.
Madankollu, ovvjament, kollox mhux daqshekk bla xkiel: Kubernetes ġab ukoll l-isfidi ġodda tiegħu stess.
Kubernetes ebda hija taħlita li ssolvi l-problemi kollha tal-utenti kollha. Qalba Kubernetes huwa responsabbli biss għal sett tal-funzjonijiet minimi meħtieġa li huma preżenti fihom kull raggruppament:
Il-qalba ta 'Kubernetes tiddefinixxi sett bażiku ta' primittivi għall-grupp ta 'kontenituri, il-ġestjoni tat-traffiku, eċċ. Tkellimna dwarhom f'aktar dettall fi rapport sentejn ilu.
Min-naħa l-oħra, K8s joffri opportunitajiet kbar biex jespandu l-funzjonijiet disponibbli, li jgħinu biex jagħlqu oħrajn - speċifiċi — il-ħtiġijiet tal-utent. Iż-żidiet mal-Kubernetes huma r-responsabbiltà tal-amministraturi tal-clusters, li jridu jinstallaw u kkonfiguraw dak kollu meħtieġ biex iġibu l-cluster tagħhom "fil-forma t-tajba" [biex isolvu l-problemi speċifiċi tagħhom]. X'tip ta' żidiet huma dawn? Ejja nħarsu lejn xi eżempji.
Eżempji ta' add-ons
Wara li installa Kubernetes, nistgħu nkunu sorpriżi li n-netwerking li huwa tant meħtieġ għall-interazzjoni tal-imżiewed kemm fi ħdan node kif ukoll bejn in-nodi ma jaħdimx waħdu. Il-kernel Kubernetes ma jiggarantixxix il-konnessjonijiet meħtieġa; minflok, jiddetermina n-netwerk l-interface (CNI) għal add-ons ta' partijiet terzi. Irridu ninstallaw wieħed minn dawn add-ons, li se jkun responsabbli għall-konfigurazzjoni tan-netwerk.
Eżempju mill-qrib huwa s-soluzzjonijiet tal-ħażna tad-dejta (disk lokali, apparat tal-blokk tan-netwerk, Ceph...). Inizjalment kienu fil-qalba, iżda mal-miġja CSI is-sitwazzjoni tinbidel għal xi ħaġa simili għal dik diġà deskritta: l-interface hija f'Kubernetes, u l-implimentazzjoni tagħha hija f'moduli ta 'partijiet terzi.
Operaturi hija klassi sħiħa ta 'add-ons (li tinkludi ċ-ċert-manager imsemmi), jiddefinixxu primitive(s) u kontrollur(i). Il-loġika tax-xogħol tagħhom hija limitata biss mill-immaġinazzjoni tagħna u tippermettilna li nbiddlu komponenti tal-infrastruttura lesti (per eżempju, DBMS) fi primittivi, li huma ħafna aktar faċli biex jaħdmu magħhom (milli b'sett ta 'kontenituri u s-settings tagħhom). Inkitbu numru kbir ta' operaturi - anke jekk ħafna minnhom għadhom mhumiex lesti għall-produzzjoni, hija biss kwistjoni ta' żmien:
Metriċi - illustrazzjoni oħra ta 'kif Kubernetes issepara l-interface (Metrics API) mill-implimentazzjoni (add-ons ta' partijiet terzi bħal adapter Prometheus, aġent cluster Datadog...).
Għal monitoraġġ u statistika, fejn fil-prattika mhux biss huma meħtieġa Prometheus u Grafana, iżda wkoll kube-state-metrics, node-exporter, eċċ.
U din mhix lista kompluta ta 'żidiet... Per eżempju, fil-kumpanija Flant li ninstallaw bħalissa 29 add-ons (li kollha joħolqu total ta' 249 oġġett Kubernetes). Fi kliem sempliċi, ma nistgħux naraw il-ħajja ta 'cluster mingħajr żidiet.
Awtomazzjoni
L-operaturi huma ddisinjati biex awtomatizzati operazzjonijiet ta’ rutina li niltaqgħu magħhom kuljum. Hawn huma eżempji tal-ħajja reali li għalihom il-kitba ta' operatur tkun soluzzjoni eċċellenti:
Hemm reġistru privat (jiġifieri jeħtieġ login) b'immaġini għall-applikazzjoni. Huwa preżunt li kull pod huwa assenjat sigriet speċjali li jippermetti l-awtentikazzjoni fir-reġistru. Il-kompitu tagħna huwa li niżguraw li dan is-sigriet jinstab fl-ispazju tal-isem sabiex il-miżwed ikunu jistgħu jniżżlu immaġini. Jista 'jkun hemm ħafna applikazzjonijiet (kull waħda minnhom teħtieġ sigriet), u huwa utli li taġġorna s-sigrieti nfushom regolarment, għalhekk l-għażla li jiġu stabbiliti sigrieti bl-idejn tiġi eliminata. Dan huwa fejn l-operatur jiġi għas-salvataġġ: noħolqu kontrollur li se jistenna li jidher l-ispazju tal-isem u, ibbażat fuq dan l-avveniment, se jżid sigriet mal-ispazju tal-isem.
Ħalli b'mod awtomatiku l-aċċess mill-imżiewed għall-Internet huwa pprojbit. Iżda xi kultant jista 'jkun meħtieġ: huwa loġiku li l-mekkaniżmu ta' permess ta 'aċċess jaħdem b'mod sempliċi, mingħajr ma jeħtieġ ħiliet speċifiċi, pereżempju, bil-preżenza ta' ċerta tikketta fl-ispazju tal-isem. Kif jista' l-operatur jgħinna hawn? Jinħoloq kontrollur li jistenna li t-tikketta tidher fl-ispazju tal-isem u żżid il-politika xierqa għall-aċċess għall-Internet.
Sitwazzjoni simili: ngħidu li kellna bżonn inżidu ċertu nġiesa, jekk ikollu tikketta simili (b'xi tip ta' prefiss). L-azzjonijiet mal-operatur huma ovvji...
Fi kwalunkwe cluster, il-kompiti ta 'rutina għandhom jiġu solvuti, u korrett dan jista' jsir bl-użu ta' operaturi.
Fil-qosor tal-istejjer kollha deskritti, wasalna għall-konklużjoni li għal xogħol komdu f'Kubernetes għandek bżonn: A) tinstalla add-ons, b) jiżviluppaw operaturi (biex issolvi l-kompiti tal-amministrazzjoni ta' kuljum).
Kif tikteb dikjarazzjoni għal Kubernetes?
B'mod ġenerali, l-iskema hija sempliċi:
... imma mbagħad jirriżulta li:
L-API Kubernetes hija ħaġa pjuttost mhux trivjali li tieħu ħafna ħin biex tikkontrolla;
l-ipprogrammar ukoll mhux għal kulħadd (il-lingwa Go ntgħażlet bħala l-lingwa preferuta għax hemm qafas speċjali għaliha - Operatur SDK);
Is-sitwazzjoni hija simili mal-qafas innifsu.
Il-linja tal-qiegħ: biex tikteb kontrollur (operatur) irid tonfoq riżorsi sinifikanti biex tistudja materjal. Dan ikun iġġustifikat għal operaturi "kbar" - ngħidu aħna, għad-DBMS MySQL. Imma jekk niftakru l-eżempji deskritti hawn fuq (iżvolġi ta’ sigrieti, aċċess għall-imżiewed għall-Internet...), li rridu nagħmlu wkoll b’mod korrett, allura nifhmu li l-isforz li ntefqu se jegħleb ir-riżultat li għandna bżonn issa:
B'mod ġenerali, tqum dilemma: jonfqu ħafna riżorsi u sib l-għodda t-tajba biex tikteb dikjarazzjonijiet, jew tagħmel dan bil-mod antikwat (iżda malajr). Biex insolvuha - biex insibu kompromess bejn dawn l-estremi - ħloqna l-proġett tagħna stess: operatur tal-qoxra(ara wkoll tiegħu avviż reċenti fuq il-buttun).
Operatur tal-qoxra
Kif jaħdem? Il-cluster għandu pod li fih Go binarju b'operatur tal-qoxra. Maġenbu hemm sett ta ganċijiet(aktar dettalji dwarhom - ara hawn taħt). Il-shell-operatur innifsu jissottoskrivi għal ċerti iżviluppi fil-Kubernetes API, li meta jseħħu tniedi l-ganċijiet korrispondenti.
L-operatur tal-qoxra kif jaf liema ganċijiet għandu jsejjaħ għal liema avvenimenti? Din l-informazzjoni tiġi trażmessa lill-operatur tal-qoxra mill-ganċijiet infushom, u jagħmlu dan b'mod sempliċi ħafna.
Ganċ huwa skript Bash jew kwalunkwe fajl eżekutibbli ieħor li jaċċetta argument wieħed --config u jirrispondi b'JSON. Dan tal-aħħar jiddetermina liema oġġetti huma ta’ interess għalih u liema avvenimenti (għal dawn l-oġġetti) għandhom jiġu mwieġba:
Se nispjega l-implimentazzjoni fuq l-operatur tal-qoxra ta 'wieħed mill-eżempji tagħna - sigrieti dekompożizzjoni għall-aċċess ta' reġistru privat b'immaġini ta 'applikazzjoni. Tikkonsisti f'żewġ stadji.
Prattika: 1. Ikteb ganċ
L-ewwelnett, fil-ganċ se nipproċessaw --config, li jindika li aħna interessati fl-ispazji tal-isem, u speċifikament, il-mument tal-ħolqien tagħhom:
L-ewwel pass huwa li ssir taf liema namespace inħoloq, u t-tieni huwa li toħloqha bl-użu kubectl sigriet għal dan l-ispazju tal-isem.
Prattika: 2. Armar tal-immaġni
Li jibqa 'huwa li tgħaddi l-ganċ maħluqa lill-operatur tal-qoxra - kif tagħmel dan? L-operatur tal-qoxra innifsu jiġi bħala immaġni Docker, għalhekk il-kompitu tagħna huwa li nżidu l-ganċ f'direttorju speċjali f'din l-immaġni:
FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks
Hemm żewġ punti li għandek tagħti attenzjoni għalihom:
indikazzjoni tal-immaġni maħluqa ġdida;
Dan huwa komponent tas-sistema li (mill-inqas) jeħtieġ drittijiet biex jissottoskrivi għal avvenimenti f'Kubernetes u biex jalloka sigrieti għal namespaces, għalhekk noħolqu ServiceAccount (u sett ta 'regoli) għall-ganċ.
Riżultat - solvejna l-problema tagħna qraba għal Kubernetes b'mod li joħloq operatur għad-dekompożizzjoni tas-sigrieti.
Karatteristiċi oħra tal-operatur tal-qoxra
Biex tillimita l-oġġetti tat-tip magħżul tiegħek li l-ganċ se jaħdem magħhom, jistgħu jiġu ffiltrati, tagħżel skond ċerti tikketti (jew bl-użu matchExpressions):
Ipprovdut mekkaniżmu ta' deduplikazzjoni, li - bl-użu ta 'filtru jq - jippermettilek tikkonverti oġġetti JSON kbar f'oħrajn żgħar, fejn jibqgħu biss dawk il-parametri li rridu nissorveljaw għal bidliet.
Meta tissejjaħ ganċ, l-operatur tal-qoxra jgħaddiha data tal-oġġett, li jistgħu jintużaw għal kull ħtieġa.
L-avvenimenti li jqanqlu snanar mhumiex limitati għal avvenimenti Kubernetes: l-operatur tal-qoxra jipprovdi appoġġ għal sejħa ganċijiet bil-ħin (simili għal crontab fi scheduler tradizzjonali), kif ukoll avveniment speċjali onStartup. Dawn l-avvenimenti kollha jistgħu jiġu kkombinati u assenjati lill-istess ganċ.
U żewġ karatteristiċi oħra ta 'l-operatur tal-qoxra:
Taħdem b'mod mhux sinkroniku. Peress li avveniment Kubernetes (bħal oġġett li qed jinħoloq) ġie riċevut, avvenimenti oħra (bħall-istess oġġett li qed jitħassar) setgħu seħħew fil-cluster, u l-ganċijiet jeħtieġ li jagħtu kont għal dan. Jekk il-ganċ ġie esegwit bi żball, allura dan ikun awtomatikament sejħa mill-ġdid sakemm titlesta b'suċċess (din l-imġiba tista' tinbidel).
Hija tesporta metriċi għal Prometheus, li biha tista 'tifhem jekk l-operatur tal-qoxra hux qed jaħdem, sib in-numru ta' żbalji għal kull ganċ u d-daqs attwali tal-kju.
Biex tqassar din il-parti tar-rapport:
Installazzjoni ta 'add-ons
Għal xogħol komdu ma' Kubernetes, issemmiet ukoll il-ħtieġa li jiġu installati add-ons. Jien ngħidlek dwarha billi tuża l-eżempju tat-triq tal-kumpanija tagħna lejn kif nagħmluha issa.
Bdejna naħdmu ma' Kubernetes b'diversi raggruppamenti, li l-unika żieda magħhom kienet Ingress. Kien meħtieġ li jiġi installat b'mod differenti f'kull cluster, u għamilna diversi konfigurazzjonijiet YAML għal ambjenti differenti: metall vojt, AWS...
Peress li kien hemm aktar clusters, kien hemm aktar konfigurazzjonijiet. Barra minn hekk, tjiebna dawn il-konfigurazzjonijiet huma stess, li b'riżultat tagħhom saru pjuttost eteroġenji:
Biex kollox fl-ordni, bdejna bi skript (install-ingress.sh), li ħa bħala argument it-tip ta 'cluster li se niskjeraw għalih, iġġenerat il-konfigurazzjoni YAML meħtieġa u ħarġet lil Kubernetes.
Fil-qosor, it-triq ulterjuri tagħna u r-raġunament assoċjat magħha kienu kif ġej:
biex taħdem b'konfigurazzjonijiet YAML, hija meħtieġa magna tal-mudell (fl-ewwel stadji dan huwa sempliċi sed);
biż-żieda fin-numru ta 'clusters, waslet il-ħtieġa għal aġġornament awtomatiku (l-ewwel soluzzjoni kienet li tpoġġi l-iskrittura f'Git, taġġornaha bl-użu ta' cron u tħaddem);
kitba simili kienet meħtieġa għal Prometheus (install-prometheus.sh), madankollu, huwa notevoli għall-fatt li teħtieġ ħafna aktar dejta ta' input, kif ukoll il-ħażna tagħhom (b'mod tajjeb - ċentralizzata u f'raggruppament), u xi dejta (passwords) tista' tiġi ġġenerata awtomatikament:
ir-riskju li titħaddem xi ħaġa ħażina għal numru dejjem jikber ta 'clusters kien dejjem jikber, għalhekk irrealizzajna li l-installaturi (jiġifieri żewġ skripts: għal Ingress u Prometheus) kien meħtieġ staging (diversi fergħat f'Git, diversi crons biex jaġġornawhom fil-korrispondenti: raggruppamenti stabbli jew tat-test);
с kubectl apply sar diffiċli biex taħdem magħha għaliex mhix dikjarattiva u tista' toħloq biss oġġetti, iżda ma tieħux deċiżjonijiet dwar l-istatus tagħhom/tħassarhom;
Konna neqsin xi funzjonijiet li ma konna implimentajna xejn dak iż-żmien:
kontroll sħiħ fuq ir-riżultat tal-aġġornamenti tal-clusters,
determinazzjoni awtomatika ta' xi parametri (input għal skripts ta' installazzjoni) ibbażata fuq data li tista' tinkiseb mill-cluster (skoperta),
l-iżvilupp loġiku tagħha fil-forma ta’ skoperta kontinwa.
Implimentajna din l-esperjenza kollha akkumulata fil-qafas tal-proġett l-ieħor tagħna - addon-operatur.
Addon-operatur
Hija bbażata fuq l-operatur tal-qoxra diġà msemmi. Is-sistema kollha tidher bħal din:
Dan li ġej huwa miżjud mal-ganċijiet tal-operatur tal-qoxra:
ħażna tal-valuri,
Tabella tat-Tmun,
komponent li jimmonitorja l-maħżen tal-valuri u - f'każ ta' xi tibdil - jitlob lil Helm biex jerġa' jirrolla ċ-ċart.
Għalhekk, nistgħu nirreaġixxu għal avveniment f'Kubernetes, inniedu ganċ, u minn dan il-ganċ nistgħu nagħmlu bidliet fil-ħażna, u warajh iċ-ċart se terġa 'titniżżel. Fid-dijagramma li tirriżulta, aħna nisseparaw is-sett ta 'ganċijiet u ċ-ċart f'komponent wieħed, li nsejħu modulu:
Jista 'jkun hemm ħafna moduli, u magħhom inżidu ganċijiet globali, maħżen tal-valuri globali, u komponent li jimmonitorja dan il-maħżen globali.
Issa, meta jiġri xi ħaġa f'Kubernetes, nistgħu nirreaġixxu għaliha billi tuża ganċ globali u nbiddlu xi ħaġa fil-maħżen globali. Din il-bidla se tkun innutata u se tikkawża li l-moduli kollha fil-cluster jiġu roll out:
Din l-iskema tissodisfa r-rekwiżiti kollha għall-installazzjoni ta’ add-ons li ġew iddikjarati hawn fuq:
Helm huwa responsabbli għat-templating u d-dikjarazzjoni.
Il-kwistjoni ta 'awto-aġġornament ġiet solvuta bl-użu ta' ganċ globali, li jmur fir-reġistru fuq skeda u, jekk jara immaġini ta 'sistema ġdida hemmhekk, rolls out (jiġifieri "nfisha").
Il-ħażna tas-settings fil-cluster hija implimentata bl-użu ConfigMap, li fiha d-dejta primarja għall-ħażniet (fl-istartjar huma mgħobbija fil-ħażniet).
Problemi bil-ġenerazzjoni tal-password, l-iskoperta u l-iskoperta kontinwa ġew solvuti bl-użu ta 'ganċijiet.
L-istadju jinkiseb bis-saħħa tat-tikketti, li Docker jappoġġja barra mill-kaxxa.
Ir-riżultat huwa mmonitorjat bl-użu ta 'metriċi li bihom nistgħu nifhmu l-istatus.
Din is-sistema kollha hija implimentata fil-forma ta 'binarju wieħed f'Go, li jissejjaħ addon-operator. Dan jagħmel id-dijagramma tidher aktar sempliċi:
Il-komponent ewlieni f'din id-dijagramma huwa sett ta 'moduli (enfasizzat bil-griż hawn taħt). Issa nistgħu niktbu modulu għall-add-on meħtieġ bi ftit sforz u kun żgur li se jiġi installat f'kull cluster, se jiġi aġġornat u jirrispondi għall-avvenimenti li jeħtieġ fil-cluster.
"Flant" użi addon-operatur fuq 70+ raggruppamenti Kubernetes. Stat attwali - verżjoni alfa. Issa qed nippreparaw dokumentazzjoni biex nirrilaxxaw il-beta, iżda għalissa fir-repożitorju eżempji disponibbli, li fuq il-bażi tagħha tista 'toħloq l-addon tiegħek.
Fejn nista' nikseb il-moduli għal addon-operator? Il-pubblikazzjoni tal-librerija tagħna hija l-istadju li jmiss għalina; nippjanaw li nagħmlu dan fis-sajf.