Kif taċċessa r-riżorsi tal-Kubernetes Pod

Kif taċċessa r-riżorsi tal-Kubernetes PodIl-Premju minn Tohad

Meta tibda bil-Kubernetes, huwa komuni li tinsa dwar it-twaqqif tar-riżorsi tal-kontejners. F'dan il-punt, huwa biżżejjed li jiġi żgurat li l-immaġni Docker taħdem u tista 'tiġi skjerata fil-cluster Kubernetes.

Iżda aktar tard l-applikazzjoni jeħtieġ li tiġi skjerata fi cluster ta 'produzzjoni flimkien ma' applikazzjonijiet oħra. Biex tagħmel dan, għandek bżonn talloka riżorsi għall-kontenitur u kun żgur li hemm biżżejjed minnhom biex l-applikazzjoni tibda taħdem, u li applikazzjonijiet oħra li jaħdmu ma jesperjenzawx problemi.

Team Kubernetes aaS minn Mail.ru ittraduċiet artiklu dwar ir-riżorsi tal-kontejners (CPU & MEM), it-talbiet u l-limitazzjonijiet tar-riżorsi. Int ser titgħallem il-benefiċċji ta 'dawn is-settings u x'jiġri jekk ma tissettjahomx.

Riżorsi tal-kompjuters

Għandna żewġ tipi ta 'riżorsi bl-unitajiet li ġejjin:

  • Unità tal-ipproċessar ċentrali (CPU) - cores;
  • Memorja (MEM) - bytes.

Ir-riżorsi huma speċifikati għal kull kontenitur. Fil-fajl Pod YAML li ġej, se tara taqsima tar-riżorsi li fiha r-riżorsi mitluba u limitu:

  • Requested Pod Resources = somma tar-riżorsi mitluba tal-kontenituri kollha;
  • Limitu tar-Riżorsi tal-Pod = Is-somma tal-Limiti kollha tar-Riżorsi tal-Pod.

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod-name
  labels:
    application: backend
spec:
  containers:
    — name: main-container
      image: my-backend
      tag: v1
      ports:
      — containerPort: 8080
      resources:
        requests:
          cpu: 0.2 # REQUESTED CPU: 200m cores
          memory: "1Gi" # REQUESTED MEM: 1Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi
    — name: other-container
      image: other-app
      tag: v1
      ports:
      — containerPort: 8000
      resources:
        requests:
          cpu: "200m" # REQUESTED CPU: 200m cores
          memory: "0.5Gi" # REQUESTED MEM: 0.5Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi

Eżempju ta' Riżorsi Mitluba u Limitati

Qasam resources.requested mill-ispeċifikazzjoni Pod huwa wieħed mill-elementi li jintuża biex jinstab in-nodu mixtieq. Diġà tista' tippjana l-iskjerament tal-Pods għaliha. Kif issib node adattat?

Kubernetes jikkonsisti f'diversi komponenti, inkluż node prinċipali jew node prinċipali (Kubernetes Control Plane). In-node prinċipali għandu diversi proċessi: kube-apiserver, kube-controller-manager u kube-scheduler.

Il-proċess kube-scheduler huwa responsabbli biex jirrevedi l-imżiewed maħluqa ġodda u jsib nodi tal-ħaddiema possibbli li jaqblu mat-talbiet kollha tal-pods, inkluż in-numru ta 'riżorsi mitluba. Il-lista tan-nodi misjuba minn kube-scheduler hija kklassifikata. Il-pod huwa skedat fuq in-nodu bl-ogħla punteġġi.

Kif taċċessa r-riżorsi tal-Kubernetes PodFejn se jitqiegħed il-Pod vjola?

Fl-istampa tista 'tara li kube-scheduler għandu jiskeda Pod vjola ġdid. Il-cluster Kubernetes fih żewġ nodi: A u B. Kif tistgħu taraw, kube-scheduler ma jistax jiskeda Pod fuq in-node A - ir-riżorsi disponibbli (mhux mitluba) ma jaqblux mat-talbiet tal-Pod vjola. Għalhekk, il-1 GB ta 'memorja mitluba mill-Pod vjola mhux se jidħlu fuq in-node A, peress li l-memorja disponibbli hija 0,5 GB. Iżda n-node B għandu biżżejjed riżorsi. Bħala riżultat, kube-scheduler jiddeċiedi li d-destinazzjoni tal-Pod vjola hija n-node B.

Issa nafu kif ir-riżorsi mitluba jaffettwaw l-għażla tan-node biex imexxi l-Pod. Imma x'inhu l-impatt tar-riżorsi marġinali?

Il-limitu tar-riżorsi huwa limitu li s-CPU/MEM ma jistgħux jaqsmu. Madankollu, ir-riżorsa tas-CPU hija flessibbli, għalhekk il-kontenituri li jilħqu l-limiti tas-CPU tagħhom ma jikkawżawx il-ħruġ tal-Pod. Minflok, se jibda t-throttling tas-CPU. Jekk jintlaħaq il-limitu tal-użu tal-MEM, il-kontenitur jitwaqqaf minħabba OOM-Killer u jerġa' jinbeda jekk permess mill-issettjar RestartPolicy.

Riżorsi mitluba u massimi fid-dettall

Kif taċċessa r-riżorsi tal-Kubernetes PodKomunikazzjoni tar-riżorsi bejn Docker u Kubernetes

L-aħjar mod biex tispjega kif jaħdmu t-talbiet tar-riżorsi u l-limiti tar-riżorsi huwa li tintroduċi r-relazzjoni bejn Kubernetes u Docker. Fl-immaġni ta 'hawn fuq tista' tara kif l-oqsma Kubernetes u l-bnadar tal-istartjar Docker huma relatati.

Memorja: talba u limitazzjoni

containers:
...
 resources:
   requests:
     memory: "0.5Gi"
   limits:
     memory: "1Gi"

Kif imsemmi hawn fuq, il-memorja titkejjel f'bytes. Ibbażat fuq Dokumentazzjoni ta' Kubernetes, nistgħu nispeċifikaw il-memorja bħala numru. Normalment huwa numru sħiħ, pereżempju 2678 - jiġifieri 2678 bytes. Tista 'wkoll tuża suffissi G и Gi, il-ħaġa prinċipali hija li tiftakar li mhumiex ekwivalenti. L-ewwel hija deċimali u t-tieni hija binarja. Bħall-eżempju msemmi fid-dokumentazzjoni k8s: 128974848, 129e6, 129M, 123Mi - huma prattikament ekwivalenti.

Għażla Kubernetes limits.memory jaqbel mal-bandiera --memory minn Docker. F'każ li request.memory M'hemm l-ebda vleġġa għal Docker minħabba li Docker ma jużax dan il-qasam. Tista' tistaqsi, dan huwa saħansitra meħtieġ? Iva bżonn. Kif għedt qabel, il-qasam huwa importanti għal Kubernetes. Ibbażat fuq l-informazzjoni minnha, kube-scheduler jiddeċiedi dwar liema node għandu jiskeda l-Pod.

X'jiġri jekk issettjax memorja insuffiċjenti għal talba?

Jekk il-kontenitur ikun laħaq il-limiti tal-memorja mitluba, allura l-Pod jitqiegħed fi grupp ta 'Pods li jieqfu meta ma jkunx hemm biżżejjed memorja fin-node.

X'jiġri jekk issettja l-limitu tal-memorja baxx wisq?

Jekk il-kontenitur jaqbeż il-limitu tal-memorja, jiġi tterminat minħabba OOM-Killed. U se terġa 'tibda jekk possibbli bbażata fuq RestartPolicy fejn il-valur default huwa Always.

X'jiġri jekk ma tispeċifikax il-memorja mitluba?

Kubernetes se jieħu l-valur tal-limitu u jistabbilixxih bħala l-valur default.

X'jista' jiġri jekk ma tispeċifikax limitu ta' memorja?

Il-kontenitur m'għandu l-ebda restrizzjonijiet; jista' juża kemm irid memorja. Jekk jibda juża l-memorja kollha disponibbli tan-node, allura OOM joqtluh. Il-kontenitur imbagħad jerġa' jinbeda jekk possibbli abbażi ta' RestartPolicy.

X'jiġri jekk ma tispeċifikax il-limiti tal-memorja?

Dan huwa l-agħar xenarju: l-iskeder ma jafx kemm jeħtieġ riżorsi l-kontenitur, u dan jista 'jikkawża problemi serji fuq in-node. F'dan il-każ, ikun sabiħ li jkun hemm limiti awtomatiċi fuq l-ispazju tal-isem (settjat minn LimitRange). M'hemm l-ebda limiti default - il-Pod m'għandu l-ebda limiti, jista 'juża memorja kemm irid.

Jekk il-memorja mitluba hija aktar milli n-nodu jista 'joffri, il-Pod mhux se jkun skedat. Huwa importanti li tiftakar dan Requests.memory - mhux il-valur minimu. Din hija deskrizzjoni ta 'l-ammont ta' memorja biżżejjed biex iżomm il-kontenitur jaħdem kontinwament.

Normalment huwa rakkomandat li jiġi stabbilit l-istess valur għal request.memory и limit.memory. Dan jiżgura li Kubernetes mhux se jiskeda Pod fuq node li għandu biżżejjed memorja biex iħaddem il-Pod iżda mhux biżżejjed biex iħaddem. Żomm f'moħħok: L-ippjanar Kubernetes Pod jieħu in kunsiderazzjoni biss requests.memoryU limits.memory ma jqisx.

CPU: talba u limitu

containers:
...
 resources:
   requests:
     cpu: 1
   limits:
     cpu: "1200m"

B'CPU kollox huwa ftit aktar ikkumplikat. Jirritornaw għall-istampa tar-relazzjoni bejn Kubernetes u Docker, tista 'tara dan request.cpu соответствует --cpu-shares, billi limit.cpu jaqbel mal-bandiera cpus f'Docker.

Is-CPU li jitlob Kubernetes huwa mmultiplikat b'1024, il-proporzjon taċ-ċikli tas-CPU. Jekk trid titlob 1 qalba sħiħa, trid iżżid cpu: 1kif muri hawn fuq.

Li titlob għadma sħiħa (proporzjon = 1024) ma jfissirx li l-kontenitur tiegħek se jirċevih. Jekk il-magna ospitanti tiegħek għandha qalba waħda biss u qed tħaddem aktar minn kontenitur wieħed, allura l-kontenituri kollha għandhom jaqsmu s-CPU disponibbli bejniethom. Kif jiġri dan? Ejja nħarsu lejn l-istampa.

Kif taċċessa r-riżorsi tal-Kubernetes Pod
Talba tas-CPU - Sistema Qoba Unika

Ejja nimmaġinaw li għandek sistema ospitanti b'qalba waħda li tħaddem kontenituri. Omm (Kubernetes) ħajt torta (CPU) u trid taqsamha bejn it-tfal (kontenituri). Tlett itfal iridu torta sħiħa (proporzjon = 1024), tifel ieħor irid nofs torta (512). Omm trid tkun ġusta u tagħmel kalkolu sempliċi.

# Сколько пирогов хотят дети?
# 3 ребенка хотят по целому пирогу и еще один хочет половину пирога
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# Выражение получается так:
3 (ребенка/контейнера) * 1 (целый пирог/полное ядро) + 1 (ребенок/контейнер) * 0.5 (половина пирога/половина ядра)
# Сколько пирогов испечено?
availableCakesNumber = 1
# Сколько пирога (максимально) дети реально могут получить?
newMaxRequest = 1 / 3.5 =~ 28%

Ibbażat fuq il-kalkolu, tliet itfal se jirċievu 28% tal-qalba, u mhux il-qalba kollha. Ir-raba' wild se tikseb 14% tal-qalba sħiħa, mhux nofs. Iżda l-affarijiet se jkunu differenti jekk ikollok sistema multi-core.

Kif taċċessa r-riżorsi tal-Kubernetes Pod
Talba għal CPU - Sistema Multi-Core (4).

Fl-immaġni ta 'hawn fuq tista' tara li tlett itfal iridu torta sħiħa, u wieħed irid nofs. Peress li omm ħammet erba 'torti, kull wieħed minn uliedha se jieħu kemm iridu. F'sistema multi-core, ir-riżorsi tal-proċessuri huma mqassma fil-qlub kollha tal-proċessuri disponibbli. Jekk kontenitur huwa limitat għal inqas minn qalba waħda sħiħa ta 'CPU, xorta tista' tużaha f'100%.

Il-kalkoli ta 'hawn fuq huma ssimplifikati biex wieħed jifhem kif is-CPU huwa mqassam fost il-kontenituri. Naturalment, minbarra l-kontenituri nfushom, hemm proċessi oħra li jużaw ukoll ir-riżorsi tas-CPU. Meta l-proċessi f'kontenitur wieħed ikunu inattivi, oħrajn jistgħu jużaw ir-riżors tiegħu. CPU: "200m" соответствует CPU: 0,2, li jfisser madwar 20% ta 'qalba waħda.

Issa ejja nitkellmu dwar limit.cpu. Is-CPU li jillimita Kubernetes huwa mmultiplikat b'100. Ir-riżultat huwa l-ammont ta' ħin li l-kontenitur jista' juża kull 100 µs (cpu-period).

limit.cpu jaqbel mal-bandiera Docker --cpus. Din hija taħlita ġdida ta 'qodma --cpu-period и --cpu-quota. Billi nissettjawha, aħna nindikaw kemm-il riżorsi disponibbli tas-CPU l-kontenitur jista' juża b'mod massimu qabel ma jibda t-throttling:

  • CPUs - kombinazzjoni cpu-period и cpu-quota. cpus = 1.5 ekwivalenti għall-issettjar cpu-period = 100000 и cpu-quota = 150000;
  • CPU-perjodu - perjodu Scheduler tas-CFS tas-CPU, default 100 mikrosekonda;
  • cpu-kwota - numru ta' mikrosekondi ġewwa cpu-period, li hija mdawra mill-kontenitur.

X'jiġri jekk tinstalla CPU mitluba insuffiċjenti?

Jekk il-kontenitur jeħtieġ aktar milli jkun installat, se jisraq CPU minn proċessi oħra.

X'jiġri jekk issettja l-limitu tas-CPU baxx wisq?

Peress li r-riżorsa tas-CPU hija aġġustabbli, it-throttling jinxtegħel.

X'jiġri jekk ma tispeċifikax talba tas-CPU?

Bħal fil-memorja, il-valur tat-talba huwa ugwali għal-limitu.

X'jiġri jekk ma tispeċifikax limitu tas-CPU?

Il-kontenitur se juża CPU kemm jeħtieġ. Jekk politika default tas-CPU (LimitRange) hija definita fl-ispazju tal-isem, allura dan il-limitu jintuża wkoll għall-kontenitur.

X'jiġri jekk ma tispeċifikax la talba jew limitu tas-CPU?

Bħal fil-memorja, dan huwa l-agħar xenarju. L-iskeduler ma jafx kemm jeħtieġ il-kontenitur tiegħek, u dan jista 'jikkawża problemi serji fuq in-node. Biex tevita dan, trid tissettja limiti default għall-ispazji tal-isem (LimitRange).

Ftakar: jekk titlob aktar CPU milli n-nodi jistgħu jipprovdu, il-Pod mhux se jkun skedat. Requests.cpu - mhux il-valur minimu, iżda valur suffiċjenti biex jibda l-Pod u jaħdem mingħajr fallimenti. Jekk l-applikazzjoni ma twettaqx kalkoli kumplessi, l-aħjar għażla hija li tinstalla request.cpu <= 1 u tniedi kemm hemm bżonn ta’ repliki.

Ammont ideali ta 'riżorsi mitluba jew limitu tar-riżorsi

Tgħallimna dwar il-limitazzjoni tar-riżorsi tal-kompjuter. Issa wasal iż-żmien li twieġeb il-mistoqsija: “Kemm riżorsi jeħtieġ il-Pod tiegħi biex iħaddem l-applikazzjoni mingħajr problemi? X'inhu l-ammont ideali?

Sfortunatament, m'hemmx tweġibiet ċari għal dawn il-mistoqsijiet. Jekk ma tafx kif taħdem l-applikazzjoni tiegħek jew kemm teħtieġ CPU jew memorja, l-aħjar għażla hija li tagħti lill-applikazzjoni ħafna memorja u CPU u mbagħad tmexxi testijiet tal-prestazzjoni.

Minbarra t-testijiet tal-prestazzjoni, immonitorja l-imġieba tal-applikazzjoni fil-monitoraġġ għal ġimgħa. Jekk il-graffs jindikaw li l-applikazzjoni tiegħek qed tikkonsma inqas riżorsi milli tlabt, tista' tnaqqas l-ammont ta' CPU jew memorja mitluba.

Bħala eżempju ara dan Dashboard Grafana. Hija turi d-differenza bejn ir-riżorsi mitluba jew il-limitu tar-riżorsi u l-użu attwali tar-riżorsi.

Konklużjoni

It-talba u l-limitazzjoni tar-riżorsi tgħin biex iżżomm il-grupp Kubernetes tiegħek b'saħħtu. Il-konfigurazzjoni xierqa tal-limitu timminimizza l-ispejjeż u żżomm l-applikazzjonijiet jaħdmu l-ħin kollu.

Fil-qosor, hemm ftit affarijiet li għandek iżżomm f'moħħok:

  1. Ir-riżorsi mitluba huma konfigurazzjoni li titqies fil-ħin tal-istartjar (meta Kubernetes jippjana li jospita l-applikazzjoni). B'kuntrast, il-limitazzjoni tar-riżorsi hija importanti waqt ir-runtime—meta l-applikazzjoni tkun diġà qed taħdem fuq in-node.
  2. Meta mqabbel mal-memorja, is-CPU huwa riżors regolat. Jekk ma jkunx hemm biżżejjed CPU, il-Pod tiegħek ma jagħlaqx u l-mekkaniżmu tat-throttling jinxtegħel.
  3. Ir-riżorsi mitluba u l-limitu tar-riżorsi mhumiex valuri minimi u massimi! Billi tiddefinixxi r-riżorsi mitluba, tiżgura li l-applikazzjoni taħdem mingħajr problemi.
  4. Prattika tajba hija li t-talba tal-memorja tiġi stabbilita daqs il-limitu tal-memorja.
  5. Ok installa mitluba CPU <=1, jekk l-applikazzjoni ma twettaqx kalkoli kumplessi.
  6. Jekk titlob aktar riżorsi milli huma disponibbli fuq node, il-Pod qatt ma jkun skedat għal dak in-nodu.
  7. Biex tiddetermina l-ammont korrett tar-riżorsi/limiti tar-riżorsi mitluba, uża l-ittestjar tat-tagħbija u l-monitoraġġ.

Nittama li dan l-artikolu jgħinek tifhem il-kunċett bażiku tal-limitazzjoni tar-riżorsi. U tkun tista' tapplika dan l-għarfien fix-xogħol tiegħek.

Awguri!

X'iktar għandek taqra:

  1. Osservabbiltà SRE: Spazji tal-Ismijiet u Struttura Metrika.
  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