Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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.

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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.

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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.

Eżempji oħra jinkludu:

  • Ingress-kontrolluri (ara r-reviżjoni tagħhom fi l-artiklu riċenti tagħna).
  • maniġer taċ-ċert:

    Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

  • 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:

    Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

  • 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:

  1. 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.
  2. Ħ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.
  3. 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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

... 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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

[[ $1 == "--config" ]] ; then
  cat << EOF
{
  "onKubernetesEvent": [
    {
      "kind": "namespace",
      "event": ["add"]
    }
  ]
}
EOF
…

Kif tkun tidher il-loġika? Pjuttost sempliċi wkoll:

…
else
  createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
  kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi

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

Li jibqa’ biss li tiġborha u timbottaha:

$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1

Il-mess finali huwa li tiskjera l-immaġni fil-cluster. Biex tagħmel dan, ejja niktbu iskjerament:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-operator
spec:
  template:
    spec:
      containers:
      - name: my-operator
        image: registry.example.com/my-operator:v1 # 1
      serviceAccountName: my-operator              # 2

Hemm żewġ punti li għandek tagħti attenzjoni għalihom:

  1. indikazzjoni tal-immaġni maħluqa ġdida;
  2. 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):

"onKubernetesEvent": [
  {
    "selector": {
      "matchLabels": {
        "foo": "bar",
       },
       "matchExpressions": [
         {
           "key": "allow",
           "operation": "In",
           "values": ["wan", "warehouse"],
         },
       ],
     }
     …
  }
]

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:

  1. 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).
  2. 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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

    Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

  • 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.

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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:

Tespandi u tikkumplimenta Kubernetes (reviżjoni u rapport tal-vidjo)

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.

Vidjows u slides

Vidjow mill-prestazzjoni (~50 minuta):

Preżentazzjoni tar-rapport:

PS

Rapporti oħra fuq il-blog tagħna:

Tista' tkun interessat ukoll fil-pubblikazzjonijiet li ġejjin:

Sors: www.habr.com

Żid kumment