10 Żbalji Komuni Meta Tuża Kubernetes

Nota. transl.: L-awturi ta 'dan l-artikolu huma inġiniera minn kumpanija Ċeka żgħira, pipetail. Irnexxielhom jgħaqqdu lista mill-isbaħ ta' [xi drabi banali, iżda xorta] problemi urġenti ħafna u kunċetti żbaljati relatati mal-operat tar-raggruppamenti ta' Kubernetes.

10 Żbalji Komuni Meta Tuża Kubernetes

Matul is-snin ta’ użu ta’ Kubernetes, ħdimna ma’ numru kbir ta’ raggruppamenti (kemm ġestiti kif ukoll mhux immaniġġjati - fuq GCP, AWS u Azure). Maż-żmien, bdejna nindunaw li xi żbalji kienu kontinwament ripetuti. Madankollu, m’hemmx mistħija f’dan: il-biċċa l-kbira għamilna aħna stess!

L-artiklu fih l-iżbalji l-aktar komuni u jsemmi wkoll kif tikkoreġihom.

1. Riżorsi: talbiet u limiti

Dan l-oġġett żgur jistħoqqlu l-eqreb attenzjoni u l-ewwel post fil-lista.

Talba CPU normalment jew mhux speċifikat xejn jew għandu valur baxx ħafna (biex tpoġġi kemm jista 'jkun imżiewed fuq kull node). Għalhekk, in-nodi jsiru mgħobbija żżejjed. F'ħinijiet ta' tagħbija għolja, is-saħħa tal-ipproċessar tan-nodu tiġi utilizzata bis-sħiħ u tagħbija tax-xogħol partikolari tirċievi biss dak li "talbet" minn throttling tas-CPU. Dan iwassal għal aktar latenza tal-applikazzjoni, timeouts, u konsegwenzi oħra spjaċevoli. (Aqra aktar dwar dan fit-traduzzjoni reċenti l-oħra tagħna: “Limiti tas-CPU u throttling aggressiv f'Kubernetes"- madwar. trad.)

BestEffort (estremament ebda irrakkomandat):

resources: {}

Talba għal CPU estremament baxxa (estremament ebda irrakkomandat):

   resources:
      Requests:
        cpu: "1m"

Min-naħa l-oħra, il-preżenza ta 'limitu ta' CPU tista 'twassal għal qbiż mhux raġonevoli taċ-ċikli tal-arloġġ mill-imżiewed, anki jekk il-proċessur tan-node ma jkunx mgħobbi għal kollox. Għal darb'oħra, dan jista' jwassal għal aktar dewmien. Il-kontroversja tkompli madwar il-parametru Kwota tas-CFS tas-CPU fil-qalba tal-Linux u t-throttling tas-CPU skont il-limiti stabbiliti, kif ukoll id-diżattivazzjoni tal-kwota tas-CFS... Alas, il-limiti tas-CPU jistgħu jikkawżaw aktar problemi milli jistgħu jsolvu. Aktar informazzjoni dwar dan tista’ ssibha fil-link hawn taħt.

Għażla eċċessiva (impenn żejjed) problemi tal-memorja jistgħu jwasslu għal problemi akbar. Li jintlaħaq il-limitu tas-CPU jinvolvi taqbeż iċ-ċikli tal-arloġġ, filwaqt li jintlaħaq il-limitu tal-memorja jinvolvi l-qtil tal-pod. Qatt osservajt OOMkill? Iva, dan huwa eżattament dak li qed nitkellmu.

Trid timminimizza l-probabbiltà li dan iseħħ? Tallokax iżżejjed il-memorja u uża QoS Garantit (Kwalità tas-Servizz) billi tistabbilixxi t-talba għall-memorja għal-limitu (bħal fl-eżempju hawn taħt). Aqra aktar dwar dan fi preżentazzjonijiet Henning Jacobs (Inġinier Ewlieni f'Zalando).

Burstable (ċans akbar li tinqatel OOM):

   resources:
      requests:
        memory: "128Mi"
        cpu: "500m"
      limits:
        memory: "256Mi"
        cpu: 2

Garantit:

   resources:
      requests:
        memory: "128Mi"
        cpu: 2
      limits:
        memory: "128Mi"
        cpu: 2

X'se jgħin potenzjalment meta jiġu stabbiliti riżorsi?

Bil metriċi-server tista 'tara l-konsum attwali tar-riżorsi tas-CPU u l-użu tal-memorja mill-imżiewed (u l-kontenituri ġewwa fihom). Ħafna probabbli, diġà qed tużah. Eżegwixxi l-kmandi li ġejjin:

kubectl top pods
kubectl top pods --containers
kubectl top nodes

Madankollu, juru biss użu kurrenti. Jista 'jtik idea approssimattiva tal-ordni tal-kobor, iżda fl-aħħar mill-aħħar ser ikollok bżonn storja ta’ bidliet fil-metriċi matul iż-żmien (biex twieġeb mistoqsijiet bħal: "X'kienet l-ogħla tagħbija tas-CPU?", "X'kienet it-tagħbija l-bieraħ filgħodu?", eċċ.). Għal dan tista 'tuża Prometheus, DataDog u għodod oħra. Huma sempliċiment jiksbu metriċi minn metrics-server u jaħżnuhom, u l-utent jista 'jistaqsihom u jippjanahom kif xieraq.

VerticalPodAutoscaler tippermetti awtomatizza dan il-proċess. Huwa jsegwi l-istorja tal-użu tas-CPU u tal-memorja u jistabbilixxi talbiet u limiti ġodda bbażati fuq din l-informazzjoni.

L-użu tal-qawwa tal-kompjuter b'mod effiċjenti mhuwiex biċċa xogħol faċli. Qisu tilgħab it-Tetris il-ħin kollu. Jekk qed tħallas wisq għall-qawwa tal-kompjuter b'konsum medju baxx (jiġifieri ~ 10%), nirrakkomandaw li tħares lejn prodotti bbażati fuq AWS Fargate jew Virtual Kubelet. Huma mibnija fuq mudell ta' kontijiet bla server/paga għal kull użu, li jista' jirriżulta li jkun irħas f'kundizzjonijiet bħal dawn.

2. Sondi ta 'ħajja u prontezza

B'mod awtomatiku, il-kontrolli tal-ħajja u tal-prontezza mhumiex attivati ​​f'Kubernetes. U kultant jinsew jixgħelhom...

Imma kif inkella tista 'tibda servizz mill-ġdid fil-każ ta' żball fatali? U l-load balancer kif jaf li pod huwa lest li jaċċetta t-traffiku? Jew li tista' timmaniġġja aktar traffiku?

Dawn it-testijiet ħafna drabi huma konfużi ma 'xulxin:

  • Ħajja — kontroll tas-"sopravivenza", li jerġa' jibda l-pod jekk ifalli;
  • Prontezza — verifika tal-prontezza, jekk tfalli, skonnettja l-pod mis-servizz Kubernetes (dan jista’ jiġi ċċekkjat bl-użu kubectl get endpoints) u t-traffiku ma jasalx lejh sakemm il-kontroll li jmiss jitlesta b'suċċess.

Dawn iż-żewġ kontrolli MAGĦMULA MATUL IĊ-ĊIKLU TAL-ĦAJJA KOLLHA TAL-POD. Huwa importanti ħafna.

Kunċett żbaljat komuni huwa li s-sondi ta' prontezza jitħaddmu biss mal-istartjar sabiex il-balancer ikun jista' jkun jaf li l-pod huwa lest (Ready) u jistgħu jibdew jipproċessaw it-traffiku. Madankollu, din hija biss waħda mill-għażliet għall-użu tagħhom.

Ieħor hija l-possibbiltà li ssir taf li t-traffiku fuq il-pod huwa eċċessiv u jgħabbiha żżejjed (jew il-pod jwettaq kalkoli li jużaw ħafna riżorsi). F'dan il-każ, il-kontroll tal-prontezza jgħin naqqas it-tagħbija fuq il-miżwed u "kessaħ".. It-tlestija b'suċċess ta 'verifika ta' prontezza fil-futur tippermetti żid it-tagħbija fuq il-powd mill-ġdid. F'dan il-każ (jekk it-test ta' prontezza jfalli), in-nuqqas tat-test tal-ħajja jkun kontroproduttiv ħafna. Għaliex terġa 'tibda pod li huwa b'saħħtu u jaħdem iebes?

Għalhekk, f'xi każijiet, l-ebda verifika hija aħjar milli tippermettilhom b'parametri kkonfigurati ħażin. Kif intqal hawn fuq, jekk verifika tal-ħajja kopji kontroll tal-prontezza, allura inti fl-inkwiet kbir. Għażla possibbli hija li jiġi kkonfigurat test ta' prontezza bissU ħajja perikoluża ħalli fil-ġenb.

Iż-żewġ tipi ta' kontrolli m'għandhomx ifallu meta d-dipendenzi komuni jfallu, inkella dan iwassal għal falliment kaskata (bħal valanga) tal-imżiewed kollha. Fi kliem ieħor, tagħmilx ħsara lilek innifsek.

3. LoadBalancer għal kull servizz HTTP

X'aktarx, għandek servizzi HTTP fil-cluster tiegħek li tixtieq tibgħat lid-dinja ta' barra.

Jekk tiftaħ is-servizz bħala type: LoadBalancer, il-kontrollur tiegħu (skont il-fornitur tas-servizz) se jipprovdi u jinnegozja LoadBalancer estern (mhux neċessarjament jaħdem fuq L7, iżda saħansitra anke fuq L4), u dan jista 'jaffettwa l-ispiża (indirizz IPv4 statiku estern, qawwa tal-kompjuter, kontijiet kull sekonda ) minħabba l-ħtieġa li jinħoloq numru kbir ta' tali riżorsi.

F'dan il-każ, huwa ħafna aktar loġiku li tuża bilanċjar tat-tagħbija esterna waħda, li tiftaħ is-servizzi bħala type: NodePort. Jew aħjar, jespandu xi ħaġa simili nginx-ingress-kontrollur (Jew traefik), li se jkun l-uniku wieħed Node Port endpoint assoċjat mal-bilanċjar tat-tagħbija esterna u se rotta traffiku fil-cluster bl-użu ingress-Riżorsi Kubernetes.

Servizzi oħra intra-cluster (mikro) li jinteraġixxu ma 'xulxin jistgħu "jikkomunikaw" bl-użu ta' servizzi bħal ClusterIP u mekkaniżmu ta 'skoperta tas-servizz integrat permezz tad-DNS. Sempliċement tużax id-DNS/IP pubbliku tagħhom, peress li dan jista’ jkollu impatt fuq il-latenza u jżid l-ispiża tas-servizzi tal-cloud.

4. Autoscaling cluster mingħajr ma jitqiesu l-karatteristiċi tiegħu

Meta żżid nodi u tneħħihom minn raggruppament, m'għandekx tistrieħ fuq xi metriċi bażiċi bħall-użu tas-CPU fuq dawk in-nodi. L-ippjanar tal-pods għandu jqis ħafna restrizzjonijiet, bħall-affinità pod/node, taints u tollerazzjonijiet, talbiet għar-riżorsi, QoS, eċċ. L-użu ta 'autoscaler estern li ma jqisx dawn l-isfumaturi jista' jwassal għal problemi.

Immaġina li ċertu pod għandu jkun skedat, iżda l-qawwa kollha disponibbli tas-CPU hija mitluba/żarmata u l-pod jeħel fi stat Pending. Autoscaler estern jara t-tagħbija medja tas-CPU kurrenti (mhux dik mitluba) u ma jibdax espansjoni (scale-out) - ma żżidx nodu ieħor. Bħala riżultat, dan il-pod mhux se jkun skedat.

F'dan il-każ, reverse scaling (scale-in) — it-tneħħija ta' nodu minn cluster hija dejjem aktar diffiċli biex tiġi implimentata. Immaġina li għandek pod stateful (b'ħażna persistenti konnessa). Volumi persistenti normalment jappartjenu għal żona ta’ disponibbiltà speċifika u mhumiex replikati fir-reġjun. Għalhekk, jekk autoscaler estern iħassar node ma 'dan il-pod, allura l-iskeder ma jkunx jista' jiskeda dan il-pod fuq node ieħor, peress li dan jista 'jsir biss fiż-żona tad-disponibbiltà fejn tinsab il-ħażna persistenti. Pod se jkun mwaħħla fl-istat Pending.

Popolari ħafna fil-komunità Kubernetes cluster-autoscaler. Hija taħdem fuq cluster, tappoġġja APIs minn fornituri ewlenin tal-cloud, tqis ir-restrizzjonijiet kollha u tista 'skala fil-każijiet ta' hawn fuq. Hija kapaċi wkoll tiżdied filwaqt li żżomm il-limiti kollha stabbiliti, u b'hekk tiffranka l-flus (li inkella jintefqu fuq kapaċità mhux użata).

5. It-traskurazzjoni tal-kapaċitajiet IAM/RBAC

Oqgħod attent li tuża utenti IAM b'sigrieti persistenti għal magni u applikazzjonijiet. Organizza aċċess temporanju billi tuża rwoli u kontijiet tas-servizz (kontijiet tas-servizz).

Ħafna drabi niltaqgħu mal-fatt li ċ-ċwievet tal-aċċess (u s-sigrieti) huma hardcoded fil-konfigurazzjoni tal-applikazzjoni, kif ukoll intraskuraw ir-rotazzjoni tas-sigrieti minkejja li għandna aċċess għal Cloud IAM. Uża rwoli IAM u kontijiet tas-servizz minflok utenti fejn xieraq.

10 Żbalji Komuni Meta Tuża Kubernetes

Insa dwar kube2iam u mur direttament għar-rwoli IAM għall-kontijiet tas-servizz (kif deskritt fi nota bl-istess isem Štěpán Vraný):

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-app-role
  name: my-serviceaccount
  namespace: default

Annotazzjoni waħda. Mhux daqshekk diffiċli, hux?

Ukoll, tagħtix privileġġi ta' kontijiet ta' servizz u profili ta' istanza admin и cluster-adminjekk ma jkollhomx bżonnha. Dan huwa ftit aktar diffiċli biex jiġi implimentat, speċjalment fl-RBAC K8s, iżda definittivament jiswa l-isforz.

6. Tiddependix fuq l-anti-affinità awtomatika għall-imżiewed

Immaġina li għandek tliet repliki ta' xi skjerament fuq node. In-nodu jaqa ', u flimkien miegħu r-repliki kollha. Sitwazzjoni spjaċevoli, hux? Imma għaliex ir-repliki kollha kienu fuq l-istess node? Kubernetes mhux suppost li jipprovdi disponibbiltà għolja (HA)?!

Sfortunatament, l-iskeder Kubernetes, fuq inizjattiva tiegħu stess, ma jikkonformax mar-regoli ta 'eżistenza separata (anti-affinità) għall-imżiewed. Għandhom jiġu ddikjarati b'mod espliċitu:

// опущено для краткости
      labels:
        app: zk
// опущено для краткости
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"

Dak kollox. Issa l-imżiewed se jkunu skedati fuq nodi differenti (din il-kundizzjoni hija kkontrollata biss waqt l-iskedar, iżda mhux waqt it-tħaddim tagħhom - għalhekk requiredDuringSchedulingIgnoredDuringExecution).

Hawnhekk qed nitkellmu podAntiAffinity fuq nodi differenti: topologyKey: "kubernetes.io/hostname", - u mhux dwar żoni ta' disponibbiltà differenti. Biex timplimenta HA sħiħ, ser ikollok tħaffer aktar fil-fond f'dan is-suġġett.

7. Injora PodDisruptionBudgets

Immaġina li għandek tagħbija ta' produzzjoni fuq cluster Kubernetes. Perjodikament, in-nodi u l-cluster innifsu jridu jiġu aġġornati (jew dekummissjonati). PodDisruptionBudget (PDB) huwa xi ħaġa bħal ftehim ta’ garanzija ta’ servizz bejn amministraturi ta’ clusters u utenti.

PDB jippermettilek tevita interruzzjonijiet tas-servizz ikkawżati minn nuqqas ta' nodi:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: zookeeper

F'dan l-eżempju, inti, bħala utent tar-raggruppament, tiddikjara lill-amministraturi: "Ħej, għandi servizz ta 'zookeeper, u tagħmel x'tagħmel, nixtieq li jkolli mill-inqas 2 repliki ta' dan is-servizz dejjem disponibbli."

Tista' taqra aktar dwar dan hawn.

8. Utenti multipli jew ambjenti fi cluster komuni

Spazji tal-isem Kubernetes (ispazji tal-ismijiet) ma jipprovdux insulazzjoni qawwija.

Kunċett żbaljat komuni huwa li jekk tuża tagħbija mhux prod fi spazju tal-isem wieħed u tagħbija prod f'ieħor, allura dawn mhux se jinfluwenzaw lil xulxin bl-ebda mod... Madankollu, ċertu livell ta 'iżolament jista' jinkiseb bl-użu ta 'talbiet/limitazzjonijiet tar-riżorsi, l-iffissar ta' kwoti, u l-iffissar ta 'prijorityClasses. Xi iżolament "fiżiku" fil-pjan tad-dejta huwa pprovdut minn affinitajiet, tollerazzjonijiet, tbajja (jew nodeseletturi), iżda separazzjoni bħal din hija pjuttost ikkumplikata timplimenta.

Dawk li għandhom bżonn jgħaqqdu ż-żewġ tipi ta' xogħol fl-istess cluster se jkollhom jittrattaw il-kumplessità. Jekk ma jkunx hemm ħtieġa bħal din, u inti tistax taffordja li jkollok wieħed cluster wieħed aktar (ngħidu aħna, fi sħaba pubblika), allura huwa aħjar li tagħmel dan. Dan se jikseb livell ferm ogħla ta 'insulazzjoni.

9. externalTrafficPolicy: Raggruppament

Ħafna drabi aħna nosservaw li t-traffiku kollu ġewwa l-cluster jiġi permezz ta’ servizz bħal NodePort, li għalih hija stabbilita l-politika default externalTrafficPolicy: Cluster... Dan ifisser li Node Port hija miftuħa fuq kull node fil-cluster, u tista 'tuża kwalunkwe wieħed minnhom biex jinteraġixxu mas-servizz mixtieq (sett ta' imżiewed).

10 Żbalji Komuni Meta Tuża Kubernetes

Fl-istess ħin, imżiewed reali assoċjati mas-servizz NodePort imsemmi hawn fuq huma ġeneralment disponibbli biss fuq ċertu subsett ta’ dawn in-nodi. Fi kliem ieħor, jekk nikkonnettja ma 'node li m'għandux il-pod meħtieġ, se jgħaddi t-traffiku lejn nodu ieħor, iżżid hops u ż-żieda fil-latenza (jekk in-nodi jinsabu f'żoni ta 'disponibbiltà/ċentri tad-dejta differenti, il-latency tista' tkun pjuttost għolja; barra minn hekk, l-ispejjeż tat-traffiku tal-ħruġ se jiżdiedu).

Min-naħa l-oħra, jekk ċertu servizz Kubernetes għandu sett ta 'politika externalTrafficPolicy: Local, allura NodePort jiftaħ biss fuq dawk in-nodi fejn il-miżwed meħtieġa jkunu attwalment qed jaħdmu. Meta tuża load balancer estern li jiċċekkja l-istat (kontroll tas-saħħa) endpoints (kif tagħmel AWS ELB), Hu se tibgħat traffiku biss lin-nodi meħtieġa, li se jkollu effett ta 'benefiċċju fuq id-dewmien, il-ħtiġijiet tal-kompjuters, il-kontijiet tal-ħruġ (u s-sens komun jiddetta l-istess).

Hemm ċans kbir li diġà qed tuża xi ħaġa simili traefik jew nginx-ingress-kontrollur bħala punt ta 'tmiem NodePort (jew LoadBalancer, li juża wkoll NodePort) biex iwassal it-traffiku ta' dħul HTTP, u l-issettjar ta 'din l-għażla jista' jnaqqas b'mod sinifikanti l-latency għal tali talbiet.

В din il-pubblikazzjoni Tista' titgħallem aktar dwar externalTrafficPolicy, il-vantaġġi u l-iżvantaġġi tagħha.

10. Tintrabatx ma 'clusters u tabbużax mill-pjan ta' kontroll

Qabel, kienet id-drawwa li s-servers isejħu b'ismijiet proprji: Anton, HAL9000 u Colossus... Illum ġew sostitwiti minn identifikaturi ġenerati bl-addoċċ. Madankollu, il-vizzju baqa ', u issa ismijiet proprji jmorru għall-clusters.

Storja tipika (ibbażata fuq avvenimenti reali): kollox beda bi prova tal-kunċett, għalhekk il-cluster kellu isem kburi ittestjar… Għaddew is-snin u Għadha tintuża fil-produzzjoni, u kulħadd jibża’ imissha.

M'hemm xejn pjaċevoli dwar clusters li jinbidlu f'annimali domestiċi, għalhekk nirrakkomandaw li tneħħihom perjodikament waqt il-prattika irkupru minn diżastru (dan jgħin inġinerija tal-kaos - madwar. trad.). Barra minn hekk, ma jagħmilx ħsara li taħdem fuq is-saff ta 'kontroll (pjan ta' kontroll). Li tibża’ tmissu mhux sinjal tajjeb. Eċċ mejta? Guys, int verament fl-inkwiet!

Min-naħa l-oħra, m'għandekx titwassal bil-manipulazzjoni tagħha. Biż-żmien is-saff ta 'kontroll jista' jsir bil-mod. Probabbilment, dan huwa dovut għal numru kbir ta 'oġġetti li qed jinħolqu mingħajr ir-rotazzjoni tagħhom (sitwazzjoni komuni meta tuża Helm b'settings default, u huwa għalhekk li l-istat tiegħu f'configmaps/sigrieti mhux aġġornat - bħala riżultat, eluf ta' oġġetti jakkumulaw f' is-saff ta 'kontroll) jew b'editjar kostanti ta' oġġetti kube-api (għal skalar awtomatiku, għal CI/CD, għal monitoraġġ, reġistru tal-avvenimenti, kontrolluri, eċċ.).

Barra minn hekk, nirrakkomandaw li tiċċekkja l-ftehimiet SLA/SLO mal-fornitur Kubernetes ġestit u tagħti attenzjoni lill-garanziji. Il-bejjiegħ jista 'jiggarantixxi kontroll disponibbiltà saff (jew is-sottokomponenti tiegħu), iżda mhux id-dewmien p99 tat-talbiet li tibgħatlu. Fi kliem ieħor, tista 'tidħol kubectl get nodes, u tirċievi tweġiba biss wara 10 minuti, u dan mhux se jkun ksur tat-termini tal-ftehim tas-servizz.

11. Bonus: bl-użu tal-aħħar tikketta

Iżda dan diġà huwa klassiku. Dan l-aħħar iltqajna ma 'din it-teknika inqas spiss, peress li ħafna, wara li tgħallmu minn esperjenza qarsa, waqfu jużaw it-tikketta :latest u beda pinning verżjonijiet. Ħura!

Ġabra iżomm l-immutabilità tat-tikketti tal-immaġni; Nirrakkomandaw li tiffamiljarizza ruħek ma 'din il-karatteristika notevoli.

Sommarju

Tistenniex li kollox jaħdem mil-lum għal għada: Kubernetes mhuwiex rimedju. App ħażina se jibqa' hekk anke f'Kubernetes (u probabbilment se tmur għall-agħar). In-nuqqas ta 'attenzjoni se jwassal għal kumplessità eċċessiva, xogħol bil-mod u stressanti tas-saff ta' kontroll. Barra minn hekk, tirriskja li titħalla mingħajr strateġija ta' rkupru minn diżastru. Tistenniex li Kubernetes jipprovdi iżolament u disponibbiltà għolja barra mill-kaxxa. Jqatta' ftit ħin biex l-applikazzjoni tiegħek tkun tassew cloud native.

Tista' ssir familjari ma' l-esperjenzi bla suċċess ta' diversi timijiet fi din il-ġabra ta’ stejjer minn Henning Jacobs.

Dawk li jixtiequ jżidu mal-lista ta 'żbalji mogħtija f'dan l-artikolu jistgħu jikkuntattjawna fuq Twitter (@MarekBartik, @MstrsObserver).

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment