Ħames miss meta tiġi skjerata l-ewwel applikazzjoni fuq Kubernetes

Ħames miss meta tiġi skjerata l-ewwel applikazzjoni fuq KubernetesFail minn Aris-Dreamer

Ħafna nies jemmnu li huwa biżżejjed li jemigraw l-applikazzjoni għal Kubernetes (jew bl-użu ta 'Helm jew manwalment) u jkunu kuntenti. Imma mhux daqshekk sempliċi.

Team Mail.ru Soluzzjonijiet Cloud ittraduċiet artiklu mill-inġinier DevOps Julian Gindi. Jaqsam x'iżvantaġġi ltaqgħet magħhom il-kumpanija tiegħu waqt il-proċess tal-migrazzjoni sabiex ma titfaċċax fuq l-istess rake.

L-Ewwel Pass: It-Twaqqif ta' Talbiet u Limiti tal-Pods

Nibdew billi nwaqqfu ambjent nadif li fih se jaħdmu l-imżiewed tagħna. Kubernetes jagħmel biċċa xogħol tajba fl-iskedar tal-miżwed u fl-immaniġġjar tal-kundizzjonijiet tal-falliment. Iżda rriżulta li l-iskeder kultant ma jistax ipoġġi pod jekk ikun diffiċli li jiġi stmat kemm jeħtieġ riżorsi biex jaħdem b'suċċess. Dan huwa fejn joħorġu talbiet għal riżorsi u limiti. Hemm ħafna dibattitu dwar l-aħjar approċċ biex jiġu stabbiliti talbiet u limiti. Kultant verament tħoss li hija aktar arti milli xjenza. Hawn hu l-approċċ tagħna.

Talbiet pod - Dan huwa l-valur ewlieni użat mill-ischeduler biex ipoġġi l-powd bl-aħjar mod.

Ta ' Dokumentazzjoni ta' Kubernetes: Il-pass tal-filtrazzjoni jiddetermina s-sett ta 'nodi fejn il-pod jista' jiġi skedat. Pereżempju, il-filtru PodFitsResources jiċċekkja jekk node għandux biżżejjed riżorsi biex jissodisfa t-talbiet tar-riżorsi speċifiċi ta' pod.

Aħna nużaw talbiet għall-applikazzjoni sabiex ikunu jistgħu jintużaw biex nistmaw kemm hemm riżorsi fil-fatt L-applikazzjoni teħtieġ li taħdem sew. B'dan il-mod l-iskedar jista 'jpoġġi nodi b'mod realistiku. Inizjalment ridna nissettjaw talbiet b'marġni biex niżguraw li kull pod ikollu numru kbir biżżejjed ta' riżorsi, iżda ndunajna li l-ħinijiet tal-iskedar żdiedu b'mod sinifikanti u xi pods qatt ma kienu skedati għal kollox, bħallikieku ma kienu waslu l-ebda talba għal riżorsi għalihom.

F'dan il-każ, l-iskedar ta 'spiss imbotta l-imżiewed u ma jkunx jista' jiskedahom mill-ġdid minħabba li l-pjan ta 'kontroll ma kellu l-ebda idea ta' kemm riżorsi tkun teħtieġ l-applikazzjoni, komponent ewlieni tal-algoritmu tal-iskedar.

Limiti tal-pods - dan huwa limitu aktar ċar għall-miżwed. Jirrappreżenta l-ammont massimu ta 'riżorsi li l-cluster se jalloka lill-kontenitur.

Għal darb'oħra, minn dokumentazzjoni uffiċjali: Jekk kontenitur għandu limitu ta' memorja ta' 4 GiB stabbilit, allura l-kubelet (u r-runtime tal-kontenitur) jinfurzawh. Ir-runtime ma jippermettix li l-kontenitur juża aktar mil-limitu tar-riżorsi speċifikat. Pereżempju, meta proċess f'kontenitur jipprova juża aktar mill-ammont permess ta 'memorja, il-kernel tas-sistema jtemm il-proċess bi żball "mingħajr memorja" (OOM).

Kontenitur jista' dejjem juża aktar riżorsi milli speċifikat fit-talba tar-riżorsi, iżda qatt ma jista' juża aktar milli speċifikat fil-limitu. Dan il-valur huwa diffiċli biex jiġi stabbilit b'mod korrett, iżda huwa importanti ħafna.

Idealment, irridu li r-rekwiżiti tar-riżorsi ta 'pod jinbidlu matul iċ-ċiklu tal-ħajja ta' proċess mingħajr ma jinterferixxu ma 'proċessi oħra fis-sistema—dak huwa l-għan li jiġu stabbiliti limiti.

Sfortunatament, ma nistax nagħti istruzzjonijiet speċifiċi dwar liema valuri nistabbilixxu, iżda aħna nfusna nżommu mar-regoli li ġejjin:

  1. Bl-użu ta 'għodda għall-ittestjar tat-tagħbija, nissimulaw livell ta' linja bażi tat-traffiku u nissorveljaw l-użu tar-riżorsi tal-pods (memorja u proċessur).
  2. Aħna nissettjaw it-talbiet tal-pods għal valur arbitrarjament baxx (b'limitu tar-riżorsi ta 'madwar 5 darbiet il-valur tat-talbiet) u nosservaw. Meta t-talbiet ikunu baxxi wisq, il-proċess ma jistax jibda, ħafna drabi jikkawża żbalji misterjużi ta 'runtime Go.

Innota li limiti ogħla tar-riżorsi jagħmlu l-iskedar aktar diffiċli minħabba li l-pod jeħtieġ node fil-mira b'riżorsi biżżejjed disponibbli.

Immaġina sitwazzjoni fejn għandek web server ħafif b'limitu ta 'riżorsi għoli ħafna, ngħidu aħna 4 GB ta' memorja. Dan il-proċess x'aktarx ikollu jiskala orizzontalment, u kull modulu ġdid ikollu jiġi skedat fuq node b'mill-inqas 4 GB ta 'memorja disponibbli. Jekk ma jeżisti l-ebda nodu bħal dan, il-cluster irid jintroduċi nodu ġdid biex jipproċessa dak il-pod, li jista' jieħu xi żmien. Huwa importanti li d-differenza bejn it-talbiet tar-riżorsi u l-limiti tinżamm għal minimu biex jiġi żgurat skalar veloċi u bla xkiel.

It-tieni pass: it-twaqqif ta' testijiet ta' Ħajja u Prontezza

Dan huwa suġġett sottili ieħor li spiss jiġi diskuss fil-komunità Kubernetes. Huwa importanti li jkun hemm fehim tajjeb tat-testijiet tal-Ħajja u tal-Prontezza peress li jipprovdu mekkaniżmu biex is-softwer jaħdem bla xkiel u jimminimizza l-ħin ta’ waqfien. Madankollu, jistgħu jikkawżaw hit serju tal-prestazzjoni għall-applikazzjoni tiegħek jekk ma tkunx ikkonfigurata b'mod korrett. Hawn taħt hawn sommarju ta' kif huma ż-żewġ kampjuni.

Ħajja juri jekk il-kontenitur hux qed jaħdem. Jekk ifalli, il-kubelet joqtol il-kontenitur u tiġi attivata politika mill-ġdid għalih. Jekk il-kontenitur ma jkunx mgħammar b'sonda Liveness, allura l-istat default ikun suċċess - dan huwa dak li jgħid fih Dokumentazzjoni ta' Kubernetes.

Is-sondi tal-ħajja għandhom ikunu irħas, jiġifieri m'għandhomx jikkunsmaw ħafna riżorsi, għaliex jaħdmu ta' spiss u jeħtieġ li jinfurmaw lil Kubernetes li l-applikazzjoni qed taħdem.

Jekk issettja l-għażla li taħdem kull sekonda, dan iżid talba 1 kull sekonda, għalhekk kun konxju li se jkunu meħtieġa riżorsi addizzjonali biex jimmaniġġaw dan it-traffiku.

Fil-kumpanija tagħna, it-testijiet Liveness jiċċekkjaw il-komponenti ewlenin ta 'applikazzjoni, anki jekk id-dejta (per eżempju, minn database remota jew cache) mhix kompletament aċċessibbli.

Aħna kkonfigurajna l-apps b'endpoint "saħħa" li sempliċement jirritorna kodiċi ta 'rispons ta' 200. Din hija indikazzjoni li l-proċess qed jaħdem u kapaċi jipproċessa talbiet (iżda għadu mhux traffiku).

Kampjun Prontezza jindika jekk il-kontenitur huwiex lest biex jaqdi t-talbiet. Jekk is-sonda ta' prontezza tfalli, il-kontrollur tal-endpoint ineħħi l-indirizz IP tal-pod mill-endpoints tas-servizzi kollha li jikkorrispondu mal-pod. Dan huwa ddikjarat ukoll fid-dokumentazzjoni ta 'Kubernetes.

Sondi ta' prontezza jikkunsmaw aktar riżorsi għaliex iridu jintbagħtu lill-backend b'mod li jindika li l-applikazzjoni hija lesta biex taċċetta talbiet.

Hemm ħafna dibattitu fil-komunità dwar jekk għandhiex aċċess għad-database direttament. Minħabba l-overhead (il-kontrolli jsiru ta 'spiss, iżda jistgħu jiġu aġġustati), iddeċidejna li għal xi applikazzjonijiet, ir-rieda biex jaqdi t-traffiku tingħadd biss wara li tivverifika li r-rekords jintbagħtu lura mid-database. Provi ta' prontezza mfassla tajjeb żguraw livelli ogħla ta' disponibbiltà u eliminaw il-perijodi ta' waqfien waqt l-iskjerament.

Jekk tiddeċiedi li tagħmel mistoqsija fid-database biex tittestja l-prontezza tal-applikazzjoni tiegħek, kun żgur li tkun irħas kemm jista' jkun. Ejja nieħdu din it-talba:

SELECT small_item FROM table LIMIT 1

Hawn eżempju ta 'kif nikkonfiguraw dawn iż-żewġ valuri f'Kubernetes:

livenessProbe: 
 httpGet:   
   path: /api/liveness    
   port: http 
readinessProbe:  
 httpGet:    
   path: /api/readiness    
   port: http  periodSeconds: 2

Tista 'żżid xi għażliet ta' konfigurazzjoni addizzjonali:

  • initialDelaySeconds — kemm se jgħaddu sekondi bejn it-tnedija tal-kontenitur u l-bidu tal-kampjuni.
  • periodSeconds — intervall ta' stennija bejn il-kampjuni.
  • timeoutSeconds — in-numru ta' sekondi li warajhom l-unità titqies bħala emerġenza. Timeout regolari.
  • failureThreshold — in-numru ta' fallimenti tat-test qabel ma jintbagħat sinjal mill-ġdid lill-pod.
  • successThreshold — in-numru ta’ sondi li rnexxew qabel ma l-powd jidħol fl-istat lest (wara falliment, meta l-powd jibda jew jirkupra).

It-tielet pass: twaqqif ta 'politiki ta' netwerk default għall-pod

Kubernetes għandu topografija tan-netwerk "ċatta"; b'mod awtomatiku, il-miżwed kollha jikkomunikaw direttament ma 'xulxin. F'xi każijiet dan mhux mixtieq.

Kwistjoni potenzjali ta' sigurtà hija li attakkant jista' juża applikazzjoni vulnerabbli waħda biex jibgħat traffiku lill-imżiewed kollha fin-netwerk. Bħal ħafna oqsma tas-sigurtà, il-prinċipju tal-inqas privileġġ japplika hawnhekk. Idealment, il-politiki tan-netwerk għandhom jispeċifikaw b'mod espliċitu liema konnessjonijiet bejn il-miżwed huma permessi u liema le.

Pereżempju, hawn taħt hemm politika sempliċi li tiċħad it-traffiku kollu li jkun dieħel għal spazju tal-isem speċifiku:

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:  
 name: default-deny-ingress
spec:  
 podSelector: {}  
 policyTypes:  
   - Ingress

Viżwalizzazzjoni ta' din il-konfigurazzjoni:

Ħames miss meta tiġi skjerata l-ewwel applikazzjoni fuq Kubernetes
(https://miro.medium.com/max/875/1*-eiVw43azgzYzyN1th7cZg.gif)
Fid-dettalji hawn.

L-erba 'pass: imġieba apposta bl-użu ta' ganċijiet u kontenituri init

Wieħed mill-għanijiet ewlenin tagħna kien li nipprovdu skjeramenti lil Kubernetes mingħajr waqfien għall-iżviluppaturi. Dan huwa diffiċli minħabba li hemm ħafna għażliet għall-għeluq tal-applikazzjonijiet u biex jinħelsu r-riżorsi li użaw.

Diffikultajiet partikolari qamu ma Nginx. Aħna ndunajna li meta dawn il-miżwed ġew skjerati b'mod sekwenzjali, il-konnessjonijiet attivi waqgħu qabel it-tlestija b'suċċess.

Wara riċerka estensiva onlajn, jirriżulta li Kubernetes ma jistenna li l-konnessjonijiet Nginx teżawrixxi lilha nnifisha qabel ittemm il-pod. Bl-użu ta 'ganċ ta' qabel il-waqfien, implimentajna l-funzjonalità li ġejja u neħlesna kompletament mill-waqfien:

lifecycle: 
 preStop:
   exec:
     command: ["/usr/local/bin/nginx-killer.sh"]

Imma nginx-killer.sh:

#!/bin/bash
sleep 3
PID=$(cat /run/nginx.pid)
nginx -s quit
while [ -d /proc/$PID ]; do
   echo "Waiting while shutting down nginx..."
   sleep 10
done

Paradigma oħra estremament utli hija l-użu ta 'kontenituri init biex jimmaniġġaw l-istartjar ta' applikazzjonijiet speċifiċi. Dan huwa speċjalment utli jekk għandek proċess ta' migrazzjoni tad-database li juża ħafna riżorsi li jeħtieġ li jibda qabel ma tibda l-applikazzjoni. Tista 'wkoll tispeċifika limitu ta' riżorsi ogħla għal dan il-proċess mingħajr ma tistabbilixxi tali limitu għall-applikazzjoni prinċipali.

Skema oħra komuni hija l-aċċess għas-sigrieti f'kontenitur init li jipprovdi dawk il-kredenzjali lill-modulu prinċipali, li jipprevjeni aċċess mhux awtorizzat għal sigrieti mill-modulu tal-applikazzjoni prinċipali innifsu.

Bħas-soltu, ikkwota mid-dokumentazzjoni: Init containers imexxu b'mod sigur kodiċi jew utilitajiet tad-dwana li kieku jnaqqsu s-sigurtà tal-immaġni tal-kontenitur tal-applikazzjoni. Billi żżomm għodod mhux meħtieġa separati, tillimita l-wiċċ tal-attakk tal-immaġni tal-kontenitur tal-applikazzjoni.

Pass Ħames: Konfigurazzjoni tal-kernel

Fl-aħħarnett, ejja nitkellmu dwar teknika aktar avvanzata.

Kubernetes hija pjattaforma estremament flessibbli li tħallik tmexxi l-piżijiet tax-xogħol kif tara xieraq. Għandna numru ta 'applikazzjonijiet ta' prestazzjoni għolja li huma estremament intensivi fir-riżorsi. Wara li għamilna ttestjar estensiv tat-tagħbija, skoprejna li applikazzjoni waħda kienet qed titħabat biex timmaniġġja t-tagħbija tat-traffiku mistennija meta s-settings default ta 'Kubernetes kienu fis-seħħ.

Madankollu, Kubernetes jippermettilek tħaddem kontenitur privileġġjat li jibdel il-parametri tal-qalba għal pod speċifiku biss. Hawn dak li użajna biex nibdlu n-numru massimu ta' konnessjonijiet miftuħa:

initContainers:
  - name: sysctl
     image: alpine:3.10
     securityContext:
         privileged: true
      command: ['sh', '-c', "sysctl -w net.core.somaxconn=32768"]

Din hija teknika aktar avvanzata li ħafna drabi ma tkunx meħtieġa. Imma jekk l-applikazzjoni tiegħek qed titħabat biex tlaħħaq ma 'tagħbija tqila, tista' tipprova tirranġa xi wħud minn dawn is-settings. Aktar dettalji dwar dan il-proċess u l-iffissar ta 'valuri differenti - bħal dejjem fid-dokumentazzjoni uffiċjali.

Bħala konklużjoni

Filwaqt li Kubernetes jista 'jidher soluzzjoni lesta barra mill-kaxxa, hemm ftit passi ewlenin li trid tieħu biex l-applikazzjonijiet tiegħek jibqgħu jaħdmu bla xkiel.

Matul il-migrazzjoni Kubernetes tiegħek, huwa importanti li ssegwi ċ-"ċiklu tal-ittestjar tat-tagħbija": tniedi l-applikazzjoni, tagħbija ittestjaha, osserva metriċi u imġiba tal-iskala, aġġusta l-konfigurazzjoni bbażata fuq dik id-data, imbagħad irrepeti ċ-ċiklu mill-ġdid.

Kun realistiku dwar it-traffiku mistenni tiegħek u ipprova imbotta lil hinn minnu biex tara liema komponenti jinkisru l-ewwel. B'dan l-approċċ iterattiv, ftit biss mir-rakkomandazzjonijiet elenkati jistgħu jkunu biżżejjed biex jinkiseb suċċess. Jew jista 'jeħtieġ customization aktar profonda.

Dejjem staqsi lilek innifsek dawn il-mistoqsijiet:

  1. Kemm-il riżorsi jikkunsmaw l-applikazzjonijiet u kif se jinbidel dan il-volum?
  2. X'inhuma r-rekwiżiti reali tal-iskala? Kemm se tieħu traffiku l-app bħala medja? Xi ngħidu dwar l-ogħla traffiku?
  3. Kemm-il darba s-servizz jeħtieġ li jiżdied orizzontalment? Kemm iridu jinġiebu malajr pods ġodda onlajn biex jirċievu t-traffiku?
  4. Kif jingħalqu l-imżiewed b'mod korrett? Dan huwa meħtieġ għal kollox? Huwa possibbli li jinkiseb skjerament mingħajr perijodi ta' waqfien?
  5. Kif tista' timminimizza r-riskji tas-sigurtà u tillimita l-ħsara minn kwalunkwe imżiewed kompromessi? Xi servizzi għandhom permessi jew aċċess li ma jeħtiġux?

Kubernetes jipprovdi pjattaforma inkredibbli li tippermettilek li tisfrutta l-aħjar prattiki għall-iskjerament ta’ eluf ta’ servizzi fi cluster. Madankollu, kull applikazzjoni hija differenti. Xi drabi l-implimentazzjoni teħtieġ ftit aktar xogħol.

Fortunatament, Kubernetes jipprovdi l-konfigurazzjoni meħtieġa biex jinkisbu l-għanijiet tekniċi kollha. Bl-użu ta 'kombinazzjoni ta' talbiet u limiti ta 'riżorsi, sondi ta' Ħajja u Prontezza, kontenituri init, politiki tan-netwerk, u rfinar tad-kernel tad-dwana, tista 'tikseb prestazzjoni għolja flimkien ma' tolleranza ta 'ħsarat u skalabbiltà rapida.

X'iktar għandek taqra:

  1. L-aħjar prattiki u l-aħjar prattiki għat-tħaddim ta’ kontenituri u Kubernetes f’ambjenti ta’ produzzjoni.
  2. 90+ għodda utli għal Kubernetes: skjerament, ġestjoni, monitoraġġ, sigurtà u aktar.
  3. Il-kanal tagħna Madwar Kubernetes f'Telegram.

Sors: www.habr.com

Żid kumment