Fa'afefea ona maua punaoa Kubernetes Pod

Fa'afefea ona maua punaoa Kubernetes PodO le taui na saunia e Tohad

A amata i le Kubernetes, e masani lava ona galo le faʻatulagaina o punaoa pusa. I le taimi nei, ua lava lea e faʻamautinoa ai o loʻo galue le ata Docker ma mafai ona tuʻuina atu i le vaega Kubernetes.

Ae mulimuli ane e manaʻomia le faʻapipiʻiina o le talosaga i se faʻapipiʻi gaosiga faʻatasi ai ma isi talosaga. Ina ia faia lenei mea, e tatau ona e tuʻuina atu punaoa mo le atigipusa ma ia mautinoa o loʻo lava ia mea e maua ai le talosaga ma faʻagaoioia, ma o isi faʻaoga talosaga o le a le oʻo i ni faʻafitauli.

au Kubernetes aaS mai Mail.ru fa'aliliuina se tala e uiga i puna'oa pusa (CPU & MEM), talosaga ma fa'atapula'aina punaoa. O le a e a'oa'oina le aoga o nei fa'atulagaga ma le mea e tupu pe a e le setiina.

Punaoa tau komepiuta

E lua ituaiga a matou punaoa ma iunite nei:

  • Vaega o le gaosiga tutotonu (CPU) - 'au'au;
  • Manatua (MEM) - paita.

O punaoa ua faʻamaonia mo pusa taʻitasi. I le faila Pod YAML o loʻo mulimuli mai, o le a e vaʻai i se vaega o punaoa o loʻo i ai mea e manaʻomia ma faʻatapulaʻa punaoa:

  • Talosaga Pod Punaoa = aofaiga o punaoa talosaga o pusa uma;
  • Pod Resource Limit = Aotelega uma Pod Resource Limit.

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

Faataitaiga o Punaoa Talosagaina ma Faatapulaaina

laufanua resources.requested mai le faʻamatalaga Pod o se tasi o elemene e faʻaaogaina e suʻe ai le node manaʻomia. Ua mafai ona e fuafuaina le faʻaogaina o le Pod mo ia. E fa'afefea ona e maua se node talafeagai?

Kubernetes e aofia ai le tele o vaega, e aofia ai le matai pona po'o le matai pona (Kubernetes Control Plane). O le pona matai e tele faiga: kube-apiserver, kube-controller-manager ma kube-scheduler.

O le faiga o le kube-scheduler e nafa ma le toe iloiloina o pods fou na faia ma le sailia o nodes a tagata faigaluega e fetaui ma talosaga uma pod, e aofia ai le numera o punaoa o loʻo talosagaina. O le lisi o nodes na maua e kube-scheduler o loʻo faʻatulagaina. O le pod o loʻo faʻatulagaina i luga o le node e sili ona maualuga togi.

Fa'afefea ona maua punaoa Kubernetes PodO fea o le a tu'u ai le Pod viole?

I le ata e mafai ona e vaʻai i le kube-scheduler e tatau ona faʻatulagaina se Pod lanu viole fou. O le fuifui Kubernetes e lua nodes: A ma le B. E pei ona e vaʻaia, e le mafai e le kube-scheduler ona faʻatulagaina se Pod i luga o le node A - o mea e maua (e le manaʻomia) e le fetaui ma talosaga a le Pod lanu viole. O lea la, o le 1 GB o le manatua e talosagaina e le lanu viole Pod o le a le fetaui i le node A, talu ai o le manatua avanoa o le 0,5 GB. Ae o le node B e lava punaoa. O se taunuuga, ua filifili le kube-scheduler o le taunuuga o le Pod viole o le node B.

Ua tatou iloa nei pe faʻafefea ona aʻafia e punaoa talosaga le filifiliga o le node e faʻatautaia ai le Pod. Ae o le a le aafiaga o punaoa laiti?

Ole tapula'a o punaoa ose tuaoi e le mafai e le PPU/MEM ona sopoia. Ae ui i lea, o le CPU puna'oa e fetu'una'i, o koneteina e o'o atu i tapula'a o le CPU o le a le mafua ai ona alu ese le Pod. Ae, ole CPU throttling o le a amata. Afai e ausia le tapulaa faʻaoga MEM, o le a taofi le pusa ona o le OOM-Killer ma toe amata pe a faʻatagaina e le RestartPolicy setting.

Talosaga ma maualuga punaoa i auiliiliga

Fa'afefea ona maua punaoa Kubernetes PodFesootaiga punaoa i le va o Docker ma Kubernetes

O le auala sili e fa'amatala ai pe fa'afefea ona fa'aogaina talosaga ma fa'atapula'a o puna'oa o le fa'ailoaina lea o le mafutaga i le va o Kubernetes ma Docker. I le ata o loʻo i luga e mafai ona e vaʻai pe faʻafefea ona fesoʻotaʻi le fanua Kubernetes ma fuʻa amata a Docker.

Manatu: talosaga ma tapulaa

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

E pei ona taʻua i luga, o le manatua e fuaina i bytes. E fua i luga Kubernetes pepa aloaia, e mafai ona tatou faʻamaonia le manatua o se numera. E masani lava o se integer, mo se faʻataʻitaʻiga 2678 - o lona uiga, 2678 bytes. E mafai fo'i ona e fa'aogaina suffix G и Gi, o le mea autu o le manatua e le tutusa. O le muamua o le decimal ma le lona lua o le binary. E pei o le faʻataʻitaʻiga o loʻo taʻua i le k8s pepa: 128974848, 129e6, 129M, 123Mi - e toetoe lava tutusa.

Kubernetes filifiliga limits.memory fetaui ma le fu'a --memory mai Docker. I le tulaga o request.memory E leai se aū mo Docker aua e le faʻaogaina e Docker lenei fanua. Atonu e te fesili, pe talafeagai ea lenei mea? Ioe mana'omia. E pei ona ou fai atu muamua, e taua le fanua mo Kubernetes. Faʻavae i luga o faʻamatalaga mai ai, e filifili e le kube-scheduler po o fea node e faʻatulaga ai le Pod.

O le a le mea e tupu pe a le lava le manatua e te setiina mo se talosaga?

Afai ua oʻo le koneteina i tapulaʻa o le manaʻoga manaʻomia, ona tuʻu lea o le Pod i se vaega o Pods e taofi pe a le lava le manatua i le node.

O le a le mea e tupu pe a e setiina le tapula'a manatua e maualalo tele?

Afai e sili atu le atigipusa i le tapulaa manatua, o le a faamuta ona o le OOM-Killed. Ma o le a toe amata pe a mafai e faʻavae i luga o le RestartPolicy lea o loʻo i ai le tau le aoga Always.

O le a le mea e tupu pe afai e te le faʻamaonia le mea e manaʻomia?

O le a ave e Kubernetes le tau fa'atapula'a ma fa'atulaga e fai ma tau fa'aletonu.

O le a le mea e mafai ona tupu pe afai e te le fa'amauina se tapulaa o le manatua?

O le atigipusa e leai ni tapulaʻa; e mafai ona faʻaogaina le tele o manatua e manaʻo ai. Afai na te amata faʻaaoga uma manatuaga avanoa o le node, ona fasiotia lea e le OOM. O le a toe amataina le koneteina pe a mafai e faʻavae ile RestartPolicy.

O le a le mea e tupu pe afai e te le fa'amauina tapulaa manatua?

Ole fa'aaliga sili lea ona leaga: e le iloa e le tagata fa'atulagaina le tele o punaoa e mana'omia e le koneteina, ma e mafai ona mafua ai fa'afitauli matuia ile node. I lenei tulaga, e manaia le i ai o tapulaa faʻaletonu ile igoa avanoa (faʻatulagaina e LimitRange). E leai ni tapula'a fa'aletonu - o le Pod e leai ni tapula'a, e mafai ona fa'aoga le tele o manatua e mana'o ai.

Afai e sili atu le manatua o loʻo talosagaina nai lo le mea e mafai e le node ona ofoina atu, o le a le faʻatulagaina le Pod. E taua le manatua o lena mea Requests.memory - e le o le tau maualalo. O le fa'amatalaga lea o le aofa'i o manatua e lava e fa'aauau ai pea le fa'agaioiina o le koneteina.

E masani ona fautuaina e seti le tau tutusa mo request.memory и limit.memory. Ole mea lea e fa'amautinoa ai e le fa'atulaga e Kubernetes se Pod i luga o se node e lava le manatua e fa'atino ai le Pod ae le lava e ta'avale ai. Manatua: Kubernetes Pod fuafuaga na'o le amanaia requests.memoryma limits.memory e le amanaia.

PPU: talosaga ma tapulaa

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

Faatasi ai ma se PPU o mea uma e sili atu ona lavelave. Toe foʻi i le ata o le mafutaga i le va o Kubernetes ma Docker, e mafai ona e vaʻaia lena mea request.cpu соответствует --cpu-shares, ae limit.cpu fetaui ma le fu'a cpus i Docker.

O le PPU o loʻo talosagaina e Kubernetes e faʻateleina i le 1024, o le aofaʻi o taamilosaga CPU. Afai e te manaʻo e talosagaina le 1 atoa autu, e tatau ona e faʻaopopo cpu: 1e pei ona faaalia i luga.

Talosagaina se fatu atoa (tulaga = 1024) e le faapea o le a maua e lau pusa. Afai o lau masini talimalo e na o le tasi le autu ma e sili atu ma le tasi le koneteina, ona tatau lea i pusa uma ona faʻasoa le PPU avanoa i le va oi latou. E faapefea ona tupu lenei mea? Sei o tatou vaavaai i le ata.

Fa'afefea ona maua punaoa Kubernetes Pod
Talosaga CPU - Faiga Fa'avae Tasi

Se'i fa'apea o lo'o iai sau fa'atonuga fa'apitoa e ta'avale pusa. Na tao e Tina (Kubernetes) se pai (CPU) ma mana'o e vaevae i tamaiti (koneteina). E to'atolu tamaiti e mana'o i se pai atoa (tulaga = 1024), o le isi tamaititi e mana'o i le afa pai (512). E mana'o Tina e fai sa'o ma fai se fa'atatauga faigofie.

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

E tusa ai ma le faʻatusatusaga, e toʻatolu tamaiti o le a maua le 28% o le 'autu, ae le o le 'autu atoa. O le tamaititi lona fa o le a maua le 14% o le fatu atoa, ae le o le afa. Ae o mea o le a ese pe afai e iai sau faiga faʻapipiʻi tele.

Fa'afefea ona maua punaoa Kubernetes Pod
Talosaga CPU - Tele-Autu (4) Faiga

I le ata o loʻo i luga e mafai ona e vaʻaia e toʻatolu tamaiti e manaʻo i se pai atoa, ae tasi e manaʻo i le afa. Talu ai na tao e tina ni pai se fa, o le a maua uma e lana fanau le tele o mea latou te mananao ai. I totonu o le tele-core system, o lo'o tufatufaina atu punaoa fa'apolokalame i totonu uma o lo'o avanoa. Afai o se atigipusa e faʻatapulaʻaina i lalo ifo o le tasi le CPU atoa, e mafai lava ona faʻaaogaina i le 100%.

O faʻatusatusaga o loʻo i luga e faʻafaigofieina e malamalama ai pe faʻafefea ona tufatufaina atu le PPU i pusa. Ioe, e ese mai i koneteina lava latou, o loʻo i ai isi faiga e faʻaogaina ai foʻi punaoa CPU. A fa'agasolo faiga i totonu o se pusa e tasi, e mafai e isi ona fa'aoga lona alaoa. CPU: "200m" соответствует CPU: 0,2, o lona uiga e tusa ma le 20% o le tasi autu.

Sei o tatou talanoa nei limit.cpu. O le PPU e fa'atapula'aina e Kubernetes e fa'ateleina i le 100. O le i'uga o le aofa'i o le taimi e mafai ai e le koneteina ona fa'aoga i 100 µs uma (cpu-period).

limit.cpu fetaui ma le fu'a Docker --cpus. O se tuufaatasiga fou lea o mea tuai --cpu-period и --cpu-quota. E ala i le setiina, matou te faʻaalia pe fia le tele o punaoa CPU o loʻo maua e le pusa e mafai ona sili ona faʻaoga aʻo leʻi amataina le faʻamalo:

  • pusa tupe - tu'ufa'atasiga cpu-period и cpu-quota. cpus = 1.5 e tutusa ma le seti cpu-period = 100000 и cpu-quota = 150000;
  • PPU-vaitaimi - vaitaimi CPU CFS fa'atulagaina, fa'aletonu 100 microseconds;
  • cpu-quota - numera o microseconds i totonu cpu-period, lea e noatia i le fagu.

O le a le mea e tupu pe a e faʻapipiʻi le lava PPU talosaga?

Afai e manaʻomia e le koneteina sili atu nai lo le faʻapipiʻiina, o le a gaoia le PPU mai isi gaioiga.

O le a le mea e tupu pe afai e te setiina le tapulaʻa o le PPU e maualalo tele?

Talu ai e mafai ona fetu'una'i le puna'oa o le PPU, o le a fa'aola le tootoo.

O le a le mea e tupu pe afai e te le faʻamaonia se talosaga CPU?

E pei o le manatua, o le tau ole talosaga e tutusa ma le tapulaa.

O le a le mea e tupu pe afai e te le fa'ailoaina se tapula'a ole CPU?

O le atigipusa o le a faʻaaogaina le tele o le PPU pe a manaʻomia. Afai o se faiga faʻavae PPU (LimitRange) o loʻo faʻamalamalamaina i le igoa avanoa, ona faʻaaogaina lea o lenei tapulaʻa mo le pusa.

O le a le mea e tupu pe afai e te le faʻamaoniaina se talosaga poʻo se tapulaa CPU?

E pei o le manatua, o le tulaga sili lea ona leaga. E le iloa e le tagata fa'atulagaina le tele o puna'oa e mana'omia e lau koneteina, ma e mafai ona tupu ai fa'afitauli matuia ile node. Ina ia aloese mai lenei mea, e tatau ona e setiina tapulaa le aoga mo igoa avanoa (LimitRange).

Manatua: afai e te manaʻo e sili atu le PPU nai lo mea e mafai ona tuʻuina atu, o le a le faʻatulagaina le Pod. Requests.cpu - e le o le tau maualalo, ae o se tau e lava e amata ai le Pod ma galue e aunoa ma se toilalo. Afai e le faia e le talosaga faʻatusatusaga faigata, o le filifiliga sili o le faʻapipiʻi request.cpu <= 1 ma fa'alauiloa le tele o fa'atusa pe a mana'omia.

Le aofa'i lelei o punaoa o lo'o talosagaina po'o le tapula'a o punaoa

Na matou aʻoaʻoina e uiga i le faʻatapulaʻaina o punaoa faakomepiuta. Ua oʻo nei i le taimi e tali ai le fesili: "E fia le tele o punaoa e manaʻomia e laʻu Pod e faʻatino ai le talosaga e aunoa ma ni faʻafitauli? O le a le aofa'i lelei?

Ae paga lea, e leai ni tali manino i nei fesili. Afai e te le iloa pe faʻapefea ona galue lau talosaga poʻo le tele o le CPU poʻo le manatua e manaʻomia, o le filifiliga sili o le tuʻuina atu i le talosaga le tele o manatua ma le CPU ona faʻataʻitaʻi lea o suʻega faʻatinoga.

I le faaopoopo atu i suʻega faʻatinoga, mataʻituina le amio a le talosaga i le mataʻituina mo le vaiaso. Afai e fa'ailoa mai i kalafi o lo'o fa'aogaina e lau tusi talosaga nai lo mea na e mana'omia, e mafai ona fa'aitiitia le aofa'i o le PPU po'o le manatua e mana'omia.

Mo se faʻataʻitaʻiga vaʻai i lenei Grafana dashboard. O lo'o fa'aalia ai le eseesega i le va o punaoa o lo'o talosagaina po'o le fa'atapula'a o punaoa ma le fa'aogaina o punaoa o lo'o iai nei.

iʻuga

O le talosagaina ma le fa'atapula'aina o punaoa e fesoasoani e fa'atumauina ai le soifua maloloina o lau fa'aputuga Kubernetes. Fa'atonu tapula'a sa'o e fa'aitiitia ai tau ma fa'aauau pea le fa'agaoioia o talosaga i taimi uma.

I se faapuupuuga, e i ai nai mea e teu i lou mafaufau:

  1. O punaoa o loʻo manaʻomia o se faʻatulagaina lea e amanaia i le taimi amata (pe a fuafua Kubernetes e faʻafeiloaʻi le talosaga). I se faʻatusatusaga, faʻatapulaʻaina punaoa e taua ile taʻavale-pe a oʻo mai le talosaga i luga o le node.
  2. Pe a faatusatusa i le manatua, o le PPU o se punaoa faʻatulafonoina. Afai e le lava le PPU, o le a le tapuni lau Pod ma o le a faʻaalia le masini faʻapipiʻi.
  3. O puna'oa mana'omia ma le fa'atapula'aina o puna'oa e le o ni tau maualalo ma maualuga! I le faʻamalamalamaina o punaoa o loʻo talosagaina, e te faʻamautinoa o le a faʻaogaina le talosaga e aunoa ma ni faʻafitauli.
  4. O se fa'ata'ita'iga lelei o le setiina lea o le talosaga manatua e tutusa ma le fa'atapula'a o le manatua.
  5. Ok fa'apipi'i talosaga CPU <=1, pe afai e le faia e le talosaga faʻatusatusaga faigata.
  6. Afai e te talosagaina nisi punaoa nai lo le avanoa i luga o se node, o le Pod e le mafai ona faʻatulagaina i lena node.
  7. Ina ia fuafuaina le aofaʻi saʻo o punaoa / punaʻoa faʻatapulaʻa, faʻaaoga suʻega uta ma mataʻituina.

Ou te faʻamoemoe o lenei tusiga e fesoasoani ia te oe e te malamalama ai i le manatu faavae o le faʻatapulaʻaina o punaoa. Ma o le a mafai ona e faʻaaogaina lenei malamalama i lau galuega.

Suʻega!

O le a se isi mea e faitau:

  1. SRE Mata'ituina: Igoa Avanoa ma Fua Fa'atatau.
  2. 90+ Meafaigaluega Fa'aoga mo Kubernetes: Fa'atonu, Pulega, Mata'ituina, Saogalemu ma isi mea.
  3. O la matou alalaupapa Around Kubernetes i Telegram.

puna: www.habr.com

Faaopoopo i ai se faamatalaga