Bii o ṣe le wọle si awọn orisun Kubernetes Pod

Bii o ṣe le wọle si awọn orisun Kubernetes PodẸsan nipasẹ Tohad

Nigbati o ba bẹrẹ pẹlu Kubernetes, o wọpọ lati gbagbe nipa siseto awọn orisun apoti. Ni aaye yii, o to lati rii daju pe aworan Docker ṣiṣẹ ati pe o le gbe lọ si iṣupọ Kubernetes.

Ṣugbọn nigbamii ohun elo nilo lati gbe lọ sinu iṣupọ iṣelọpọ pẹlu awọn ohun elo miiran. Lati ṣe eyi, o nilo lati pin awọn ohun elo fun eiyan naa ati rii daju pe o to ninu wọn lati gba ohun elo ati ṣiṣe, ati pe awọn ohun elo nṣiṣẹ miiran kii yoo ni iriri awọn iṣoro.

Egbe Kubernetes aaS lati Mail.ru tumọ nkan kan nipa awọn orisun apoti (CPU & MEM), awọn ibeere ati awọn opin orisun. Iwọ yoo kọ awọn anfani ti awọn eto wọnyi ati ohun ti o ṣẹlẹ ti o ko ba ṣeto wọn.

Awọn orisun iṣiro

A ni awọn iru orisun meji pẹlu awọn ẹya wọnyi:

  • Central processing kuro (Sipiyu) - ohun kohun;
  • Iranti (MEM) - awọn baiti.

Awọn orisun ti wa ni pato fun eiyan kọọkan. Ninu faili Pod YAML atẹle, iwọ yoo rii apakan awọn orisun ti o ni awọn ohun elo ti o beere ati opin ninu:

  • Awọn orisun Pod ti a beere = apao awọn ohun elo ti a beere fun gbogbo awọn apoti;
  • Ifilelẹ Oro orisun Pod = Apapọ gbogbo Awọn opin Awọn orisun orisun 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

Apeere ti Bere ati Lopin Oro

Aaye resources.requested lati awọn sipesifikesonu Pod jẹ ọkan ninu awọn eroja ti o ti lo lati wa awọn ti o fẹ ipade. O le gbero imuṣiṣẹ Pod tẹlẹ fun rẹ. Bawo ni o ṣe rii ipade ti o yẹ?

Kubernetes ni awọn paati pupọ, pẹlu ipade titunto si tabi ipade titunto si (Ofurufu Iṣakoso Kubernetes). Awọn titunto si ipade ni orisirisi awọn ilana: kube-apiserver, kube-controller-faili ati kube-scheduler.

Ilana kube-scheduler jẹ iduro fun atunyẹwo awọn adarọ-ese tuntun ti a ṣẹda ati wiwa awọn apa oṣiṣẹ ti o ṣeeṣe ti o baamu gbogbo awọn ibeere adarọ-ese, pẹlu nọmba awọn orisun ti o beere. Akojọ awọn apa ti a rii nipasẹ kube-scheduler ti wa ni ipo. Awọn podu ti wa ni eto lori ipade pẹlu awọn ikun ti o ga julọ.

Bii o ṣe le wọle si awọn orisun Kubernetes PodNibo ni ao gbe Pod eleyi ti?

Ninu aworan o le rii pe kube-scheduler yẹ ki o ṣeto Pod eleyi ti tuntun kan. Iṣupọ Kubernetes ni awọn apa meji: A ati B. Bi o ti le rii, kube-scheduler ko le ṣeto Pod kan lori ipade A - awọn orisun ti o wa (ti ko beere) ko baramu awọn ibeere ti Pod eleyi ti. Nitorinaa, 1 GB ti iranti ti o beere nipasẹ Pod eleyi ti kii yoo baamu lori ipade A, nitori iranti ti o wa jẹ 0,5 GB. Ṣugbọn ipade B ni awọn orisun to. Bi abajade, kube-scheduler pinnu pe opin irin ajo ti Pod eleyi ti jẹ ipade B.

Bayi a mọ bi awọn orisun ti o beere ṣe ni ipa lori yiyan ti ipade lati ṣiṣẹ Pod naa. Ṣugbọn kini ipa ti awọn orisun alapin?

Awọn oluşewadi opin ni a ala ti Sipiyu/MEM ko le rekoja. Bibẹẹkọ, orisun Sipiyu jẹ rọ, nitorinaa awọn apoti ti o de awọn opin Sipiyu wọn kii yoo fa Pod lati jade. Dipo, Sipiyu throttling yoo bẹrẹ. Ti opin lilo MEM ba ti de, eiyan naa yoo da duro nitori OOM-Killer ati tun bẹrẹ ti o ba gba laaye nipasẹ Eto RestartPolicy.

Ti beere ati awọn orisun ti o pọju ni awọn alaye

Bii o ṣe le wọle si awọn orisun Kubernetes PodIbaraẹnisọrọ orisun laarin Docker ati Kubernetes

Ọna ti o dara julọ lati ṣalaye bi awọn ibeere orisun ati awọn opin orisun ṣiṣẹ ni lati ṣafihan ibatan laarin Kubernetes ati Docker. Ni aworan loke o le rii bii awọn aaye Kubernetes ati awọn asia ibẹrẹ Docker ṣe ni ibatan.

Iranti: ìbéèrè ati aropin

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

Gẹgẹbi a ti sọ loke, iranti jẹ iwọn ni awọn baiti. Da lori Kubernetes iwe aṣẹ, a le pato iranti bi nọmba kan. Nigbagbogbo o jẹ odidi, fun apẹẹrẹ 2678 - iyẹn ni, 2678 awọn baiti. O tun le lo awọn suffixes G и Gi, Ohun akọkọ ni lati ranti pe wọn ko ni deede. Ekinni jẹ eleemewa ati ekeji jẹ alakomeji. Gẹgẹbi apẹẹrẹ ti a mẹnuba ninu awọn iwe k8s: 128974848, 129e6, 129M, 123Mi - ti won wa ni Oba deede.

Kubernetes aṣayan limits.memory ibaamu asia --memory lati Docker. Ni irú ti request.memory Ko si itọka fun Docker nitori Docker ko lo aaye yii. O le beere, ṣe eyi paapaa pataki? Bẹẹni nilo. Gẹgẹbi Mo ti sọ tẹlẹ, aaye naa ṣe pataki fun Kubernetes. Da lori alaye lati ọdọ rẹ, kube-scheduler pinnu lori iru ipade lati ṣeto Pod naa.

Kini yoo ṣẹlẹ ti o ba ṣeto iranti ti ko to fun ibeere kan?

Ti eiyan naa ba ti de awọn opin ti iranti ti o beere, lẹhinna a gbe Pod sinu ẹgbẹ kan ti Pods ti o da duro nigbati iranti ko to ni ipade naa.

Kini yoo ṣẹlẹ ti o ba ṣeto opin iranti ju kekere lọ?

Ti eiyan ba kọja opin iranti, yoo fopin si nitori OOM-Pa. Ati pe yoo tun bẹrẹ ti o ba ṣeeṣe da lori RestartPolicy nibiti iye aiyipada wa Always.

Kini yoo ṣẹlẹ ti o ko ba pato iranti ti o beere?

Kubernetes yoo gba iye iye ati ṣeto bi iye aiyipada.

Kini o le ṣẹlẹ ti o ko ba pato opin iranti kan?

Eiyan ko ni awọn ihamọ; o le lo iranti pupọ bi o ṣe fẹ. Ti o ba bẹrẹ lilo gbogbo iranti ti o wa ti ipade, lẹhinna OOM yoo pa a. Eiyan naa yoo tun bẹrẹ ti o ba ṣee ṣe da lori RestartPolicy.

Kini yoo ṣẹlẹ ti o ko ba pato awọn opin iranti?

Eyi ni ọran ọran ti o buru julọ: oluṣeto ko mọ iye awọn orisun ti eiyan nilo, ati pe eyi le fa awọn iṣoro to ṣe pataki lori ipade naa. Ni ọran yii, yoo dara lati ni awọn opin aiyipada lori aaye orukọ (ṣeto nipasẹ LimitRange). Ko si awọn opin aiyipada - Pod ko ni awọn opin, o le lo iranti bi o ṣe fẹ.

Ti iranti ti o beere ba jẹ diẹ sii ju ipade le funni, Pod naa kii yoo ṣe eto. O ṣe pataki lati ranti iyẹn Requests.memory - kii ṣe iye to kere julọ. Eyi jẹ apejuwe ti iye iranti ti o to lati tọju eiyan naa nṣiṣẹ nigbagbogbo.

Nigbagbogbo a ṣe iṣeduro lati ṣeto iye kanna fun request.memory и limit.memory. Eyi ṣe idaniloju pe Kubernetes kii yoo ṣeto Pod kan lori ipade ti o ni iranti to lati ṣiṣẹ Pod ṣugbọn ko to lati ṣiṣẹ. Jeki ni lokan: Kubernetes Pod gbimọ nikan gba sinu iroyin requests.memory, ati limits.memory ko gba sinu iroyin.

Sipiyu: ìbéèrè ati iye to

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

Pẹlu a Sipiyu ohun gbogbo ni kekere kan diẹ idiju. Pada si aworan ti ibatan laarin Kubernetes ati Docker, o le rii iyẹn request.cpu ibamu pẹlu --cpu-shares, nigbati limit.cpu ibaamu asia cpus ni Docker.

Sipiyu ti awọn ibeere Kubernetes jẹ isodipupo nipasẹ 1024, ipin ti awọn iyipo Sipiyu. Ti o ba fẹ beere 1 kikun mojuto, o gbọdọ fi kun cpu: 1bi han loke.

Bibeere ekuro ni kikun (ipin = 1024) ko tumọ si apo eiyan rẹ yoo gba. Ti ẹrọ agbalejo rẹ ba ni mojuto kan nikan ati pe o nṣiṣẹ diẹ sii ju eiyan kan, lẹhinna gbogbo awọn apoti gbọdọ pin Sipiyu ti o wa laarin wọn. Bawo ni eyi ṣe ṣẹlẹ? Jẹ ki a wo aworan naa.

Bii o ṣe le wọle si awọn orisun Kubernetes Pod
Sipiyu Ibere ​​- Nikan mojuto System

Jẹ ki a fojuinu pe o ni eto agbalejo ọkan-mojuto ti nṣiṣẹ awọn apoti. Mama (Kubernetes) ṣe akara oyinbo kan (CPU) o fẹ lati pin laarin awọn ọmọde (awọn apoti). Omo meta fe odidi paii (ipin = 1024), omo miran fe idaji paii (512). Mama fẹ lati ṣe deede ati ṣe iṣiro ti o rọrun.

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

Da lori iṣiro, awọn ọmọde mẹta yoo gba 28% ti mojuto, kii ṣe gbogbo mojuto. Ọmọ kẹrin yoo gba 14% ti ekuro kikun, kii ṣe idaji. Ṣugbọn awọn nkan yoo yatọ ti o ba ni eto pupọ-mojuto.

Bii o ṣe le wọle si awọn orisun Kubernetes Pod
Sipiyu Ibere ​​- Olona-mojuto (4) System

Ni aworan ti o wa loke o le rii pe awọn ọmọde mẹta fẹ odidi paii kan, ati pe ọkan fẹ idaji. Niwọn igba ti Mama ti ṣe akara oyinbo mẹrin, ọkọọkan awọn ọmọ rẹ yoo gba iye ti wọn fẹ. Ninu eto ọpọ-mojuto, awọn orisun ero isise ti pin kaakiri gbogbo awọn ohun kohun ero isise ti o wa. Ti eiyan kan ba ni opin si kere ju ọkan mojuto Sipiyu ni kikun, o tun le lo ni 100%.

Awọn iṣiro ti o wa loke jẹ irọrun lati ni oye bi Sipiyu ṣe pin laarin awọn apoti. Nitoribẹẹ, ni afikun si awọn apoti funrararẹ, awọn ilana miiran wa ti o tun lo awọn orisun Sipiyu. Nigbati awọn ilana ninu apoti kan ko ṣiṣẹ, awọn miiran le lo awọn orisun rẹ. CPU: "200m" ibamu pẹlu CPU: 0,2, eyi ti o tumo si to 20% ti ọkan mojuto.

Bayi jẹ ki ká soro nipa limit.cpu. Sipiyu ti Kubernetes fi opin si jẹ isodipupo nipasẹ 100. Abajade ni iye akoko ti eiyan le lo ni gbogbo 100 µs (cpu-period).

limit.cpu ibaamu asia Docker --cpus. Eyi jẹ apapo tuntun ti atijọ --cpu-period и --cpu-quota. Nipa siseto rẹ, a tọkasi iye awọn orisun Sipiyu ti o wa ti eiyan le lo ni iwọn pupọ ṣaaju ki fifun bẹrẹ:

  • cpus - apapo cpu-period и cpu-quota. cpus = 1.5 deede si eto cpu-period = 100000 и cpu-quota = 150000;
  • Sipiyu-akoko - akoko Sipiyu CFS iṣeto, aiyipada 100 microseconds;
  • Sipiyu-ipinnu - nọmba ti microseconds inu cpu-period, eyi ti o ti wa ni didi nipasẹ awọn eiyan.

Ohun ti o ṣẹlẹ ti o ba ti o ba fi sori ẹrọ insufficient ti beere Sipiyu?

Ti eiyan ba nilo diẹ sii ju ti o ti fi sii, yoo ji Sipiyu lati awọn ilana miiran.

Kini yoo ṣẹlẹ ti o ba ṣeto opin Sipiyu kekere ju?

Niwọn igba ti orisun Sipiyu jẹ adijositabulu, fifẹ yoo tan-an.

Kini yoo ṣẹlẹ ti o ko ba pato ibeere Sipiyu kan?

Gẹgẹbi pẹlu iranti, iye ibeere jẹ dogba si opin.

Kini yoo ṣẹlẹ ti o ko ba pato opin Sipiyu kan?

Awọn eiyan yoo lo bi Elo Sipiyu bi o ti nilo. Ti eto imulo Sipiyu aiyipada kan (LimitRange) jẹ asọye ni aaye orukọ, lẹhinna iwọn yii tun lo fun eiyan naa.

Kini yoo ṣẹlẹ ti o ko ba pato boya ibeere tabi opin Sipiyu kan?

Gẹgẹbi pẹlu iranti, eyi ni oju iṣẹlẹ ti o buru julọ. Oluṣeto naa ko mọ iye awọn orisun ti apoti rẹ nilo, ati pe eyi le fa awọn iṣoro to ṣe pataki lori ipade naa. Lati yago fun eyi, o nilo lati ṣeto awọn ifilelẹ aiyipada fun awọn aaye orukọ (LimitRange).

Ranti: ti o ba beere diẹ sii Sipiyu ju awọn apa le pese, Pod kii yoo ṣe eto. Requests.cpu - kii ṣe iye ti o kere ju, ṣugbọn iye to lati bẹrẹ Pod ati ṣiṣẹ laisi awọn ikuna. Ti ohun elo naa ko ba ṣe awọn iṣiro eka, aṣayan ti o dara julọ ni lati fi sori ẹrọ request.cpu <= 1 ki o si lọlẹ bi ọpọlọpọ awọn replicas bi ti nilo.

Bojumu iye ti a beere oro tabi awọn oluşewadi iye to

A kọ nipa aropin ti awọn orisun iširo. Bayi o to akoko lati dahun ibeere naa: “Awọn orisun melo ni Pod mi nilo lati ṣiṣẹ ohun elo laisi awọn iṣoro eyikeyi? Kini iye to dara julọ?

Laanu, ko si awọn idahun ti o daju si awọn ibeere wọnyi. Ti o ko ba mọ bi ohun elo rẹ ṣe n ṣiṣẹ tabi iye Sipiyu tabi iranti ti o nilo, aṣayan ti o dara julọ ni lati fun ohun elo naa ni iranti pupọ ati Sipiyu ati lẹhinna ṣiṣe awọn idanwo iṣẹ.

Ni afikun si awọn idanwo iṣẹ, ṣe atẹle ihuwasi ohun elo ni ibojuwo fun ọsẹ kan. Ti awọn aworan ba fihan pe ohun elo rẹ n gba awọn orisun ti o kere ju ti o beere lọ, o le dinku iye Sipiyu tabi iranti ti o beere.

Bi apẹẹrẹ wo eyi Dasibodu Grafana. O ṣe afihan iyatọ laarin awọn orisun ti o beere tabi opin awọn orisun ati lilo awọn orisun lọwọlọwọ.

ipari

Bibeere ati diwọn awọn orisun ṣe iranlọwọ lati jẹ ki iṣupọ Kubernetes rẹ ni ilera. Iṣeto ni iye to dara dinku awọn idiyele ati ki o jẹ ki awọn ohun elo ṣiṣẹ ni gbogbo igba.

Ni kukuru, awọn nkan diẹ wa lati tọju si ọkan:

  1. Awọn orisun ti a beere jẹ iṣeto ni ti a ṣe sinu akọọlẹ ni akoko ibẹrẹ (nigbati Kubernetes ngbero lati gbalejo ohun elo naa). Ni idakeji, idinku awọn orisun jẹ pataki ni akoko ṣiṣe-nigbati ohun elo ba ti ṣiṣẹ tẹlẹ lori ipade.
  2. Ti a ṣe afiwe si iranti, Sipiyu jẹ orisun ti ofin. Ti ko ba si Sipiyu ti o to, Pod rẹ kii yoo ku silẹ ati pe ẹrọ fifin yoo tan-an.
  3. Awọn orisun ti a beere ati opin awọn orisun kii ṣe o kere ju ati awọn iye ti o pọju! Nipa asọye awọn orisun ti o beere, o rii daju pe ohun elo naa yoo ṣiṣẹ laisi awọn iṣoro.
  4. Iwa ti o dara ni lati ṣeto ibeere iranti dogba si opin iranti.
  5. Ok fi sori ẹrọ beere CPU <=1, ti ohun elo ko ba ṣe awọn iṣiro eka.
  6. Ti o ba beere awọn orisun diẹ sii ju ti o wa lori ipade kan, Pod naa kii yoo ṣe eto si ipade yẹn.
  7. Lati pinnu iye to pe awọn orisun ti o beere/awọn opin orisun, lo idanwo fifuye ati ibojuwo.

Mo nireti pe nkan yii ṣe iranlọwọ fun ọ lati loye ipilẹ ipilẹ ti aropin awọn orisun. Ati pe iwọ yoo ni anfani lati lo imọ yii ninu iṣẹ rẹ.

Ti o dara orire!

Kini ohun miiran lati ka:

  1. Ifojusi SRE: Awọn aaye orukọ ati Eto Metiriki.
  2. Awọn irinṣẹ 90+ ti o wulo fun Kubernetes: imuṣiṣẹ, iṣakoso, ibojuwo, aabo ati diẹ sii.
  3. Ikanni wa ni ayika Kubernetes ni Telegram.

orisun: www.habr.com

Fi ọrọìwòye kun