Mokhoa oa ho fumana lisebelisoa tsa Kubernetes Pod

Mokhoa oa ho fumana lisebelisoa tsa Kubernetes PodMoputso ka Tohad

Ha u qala ka Kubernetes, ho tloaelehile ho lebala ka ho theha lisebelisoa tsa setshelo. Ka nako ena, ho lekane ho netefatsa hore setšoantšo sa Docker se sebetsa mme se ka isoa sehlopheng sa Kubernetes.

Empa hamorao kopo e hloka ho kenngoa ka har'a sehlopha sa tlhahiso hammoho le lisebelisoa tse ling. Ho etsa sena, o hloka ho fana ka lisebelisoa bakeng sa setshelo mme o netefatse hore ho na le tse lekaneng ho etsa hore kopo e sebetse, le hore lits'ebetso tse ling tse sebetsang li ke ke tsa ba le mathata.

sehlopha Kubernetes aaS ho tsoa ho Mail.ru e fetoletse sengoloa se mabapi le mehloli ea lisebelisoa (CPU & MEM), likopo le meeli ea lisebelisoa. U tla ithuta melemo ea litlhophiso tsena le se etsahalang haeba u sa li behe.

Lisebelisoa tsa komporo

Re na le mefuta e 'meli ea lisebelisoa tse nang le likarolo tse latelang:

  • Setsi sa tšebetso se bohareng (CPU) - li-cores;
  • Memori (MEM) - li-byte.

Lisebelisoa li hlalositsoe bakeng sa setshelo ka seng. Ho faele e latelang ea Pod YAML, u tla bona karolo ea lisebelisoa e nang le lisebelisoa tse kopiloeng le tse fokotsang meeli:

  • Kopo ea Pod Resources = kakaretso ea lisebelisoa tse kopiloeng tsa lijana tsohle;
  • Pod Resource Limit = Kakaretso ea Meeli eohle ea Pod Resource.

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

Mohlala oa Lisebelisuoa tse Kopiloeng le tse Lekanyelitsoeng

tšimo resources.requested ho tsoa ho Pod ea litlhaloso ke e 'ngoe ea lintho tse sebelisoang ho fumana node e lakatsehang. U se u ntse u ka rera ho tsamaisoa ha Pod bakeng sa eona. U fumana node e loketseng joang?

Kubernetes e na le likarolo tse 'maloa, ho kenyelletsa le node e kholo kapa node e kholo (Kubernetes Control Plane). The master node e na le mekhoa e mengata: kube-apiserver, kube-controller-manager le kube-scheduler.

Ts'ebetso ea kube-scheduler e na le boikarabello ba ho lekola li-pods tse sa tsoa etsoa le ho fumana li-node tsa basebetsi tse lumellanang le likopo tsohle tsa pod, ho kenyeletsoa le palo ea lisebelisoa tse kopiloeng. Lethathamo la li-node tse fumanoang ke kube-scheduler li behiloe maemong. Pod e hlophisitsoe sebakeng se nang le lintlha tse phahameng ka ho fetisisa.

Mokhoa oa ho fumana lisebelisoa tsa Kubernetes PodPod e pherese e tla beoa hokae?

Setšoantšong u ka bona hore kube-scheduler e lokela ho hlophisa Pod e ncha e pherese. Sehlopha sa Kubernetes se na le li-node tse peli: A le B. Joalokaha u ka bona, kube-scheduler e ke ke ea hlophisa Pod ho node A - mehloli e fumanehang (e sa kōptjoang) ha e lumellane le likōpo tsa Pod e pherese. Kahoo, 1 GB ea memori e kopiloeng ke Pod e pherese e ke ke ea lekana node A, kaha memori e teng ke 0,5 GB. Empa node B e na le lisebelisoa tse lekaneng. Ka lebaka leo, kube-scheduler e etsa qeto ea hore moo Pod e pherese e eang teng ke node B.

Joale rea tseba hore na lisebelisoa tse kopiloeng li ama khetho ea node ea ho tsamaisa Pod joang. Empa phello ea mehloli e fokolang ke efe?

Moeli oa lisebelisoa ke moeli oo CPU/MEM e ke keng ea o tšela. Leha ho le joalo, sesebelisoa sa CPU se fetoha le maemo, kahoo lijana tse fihlang meeling ea tsona ea CPU li ke ke tsa etsa hore Pod e tsoe. Sebakeng seo, CPU throttling e tla qala. Haeba moeli oa ts'ebeliso ea MEM o fihletsoe, sets'oants'o se tla emisoa ka lebaka la OOM-Killer mme se qalelle hape haeba se lumelloa ke RestartPolicy setting.

Lisebelisoa tse kopiloeng le tse ngata ka botlalo

Mokhoa oa ho fumana lisebelisoa tsa Kubernetes PodPuisano ea lisebelisoa lipakeng tsa Docker le Kubernetes

Mokhoa o motle oa ho hlalosa hore na likopo tsa lisebelisoa le meeli ea lisebelisoa li sebetsa joang ke ho hlahisa likamano lipakeng tsa Kubernetes le Docker. Setšoantšong se ka holimo u ka bona kamoo masimo a Kubernetes le lifolakha tsa ho qala tsa Docker li amanang kateng.

Memori: kopo le moeli

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

Joalokaha ho boletsoe ka holimo, mohopolo o lekanngoa ka li-byte. Ho ipapisitsoe le Litokomane tsa Kubernetes, re ka hlakisa memori joalo ka nomoro. Hangata ke palo e felletseng, mohlala 2678 - ke hore, 2678 bytes. U ka boela ua sebelisa li-suffixes G и Gi, ntho e ka sehloohong ke ho hopola hore ha li lekane. Ea pele ke decimal 'me ea bobeli ke binary. Joalo ka mohlala o boletsoeng litokomaneng tsa k8s: 128974848, 129e6, 129M, 123Mi - li batla li lekana.

Khetho ea Kubernetes limits.memory e tsamaisanang le folakha --memory ho tloha Docker. Tabeng ea request.memory Ha ho na motsu bakeng sa Docker hobane Docker ha e sebelise tšimo ena. U ka botsa, na see sea hlokahala? E hloka. Joalokaha ke boletse pejana, tšimo e bohlokoa bakeng sa Kubernetes. Ho ipapisitsoe le tlhaiso-leseling e tsoang ho eona, kube-scheduler e etsa qeto ea hore na ke node efe e tla hlophisa Pod.

Ho etsahala'ng haeba u seta memori e sa lekaneng bakeng sa kopo?

Haeba setshelo se fihlile meeling ea mohopolo o kopiloeng, joale Pod e beoa sehlopheng sa li-Pods tse emisang ha ho se na memori e lekaneng node.

Ho etsahala'ng haeba u beha moeli oa memori o le tlase haholo?

Haeba setshelo se feta moeli oa memori, se tla emisoa ka lebaka la OOM-Killed. 'Me e tla qala hape haeba ho khonahala e ipapisitse le RestartPolicy moo boleng ba kamehla bo leng teng Always.

Ho etsahala'ng haeba u sa hlakise mohopolo oo u o kopileng?

Kubernetes e tla nka boleng ba moeli ebe e e beha e le boleng ba kamehla.

Ho ka etsahala'ng haeba u sa bolele moeli oa memori?

Setshelo ha se na lithibelo; se ka sebelisa mohopolo o mongata kamoo se batlang. Haeba a qala ho sebelisa mohopolo o teng oa node, joale OOM e tla mo bolaea. Joale setshelo se tla qalisoa bocha haeba ho khonahala ho ipapisitsoe le RestartPolicy.

Ho etsahala'ng haeba u sa hlalose meeli ea memori?

Ena ke boemo bo bobe ka ho fetisisa: mohlophisi ha a tsebe hore na setshelo se hloka lisebelisoa tse kae, 'me sena se ka baka mathata a tebileng ho node. Tabeng ena, ho ka ba monate ho ba le meeli ea kamehla sebakeng sa mabitso (se behiloeng ke LimitRange). Ha ho na meeli ea kamehla - Pod ha e na meeli, e ka sebelisa mohopolo o mongata kamoo e batlang.

Haeba memori e kopiloeng e feta node e ka fanang ka eona, Pod e ke ke ea hlophisoa. Ho bohlokoa ho hopola seo Requests.memory - eseng bonyane ba boleng. Ena ke tlhaloso ea palo ea memori e lekaneng ho boloka setshelo se ntse se sebetsa.

Hangata ho kgothaletswa ho beha boleng bo lekanang bakeng sa request.memory и limit.memory. Sena se tiisa hore Kubernetes e ke ke ea hlophisa Pod ho node e nang le mohopolo o lekaneng oa ho tsamaisa Pod empa e sa lekana ho e tsamaisa. Hopola: Ho rera ho Kubernetes Pod ho nahanela feela requests.memoryle limits.memory ha e nahanele.

CPU: kopo le moeli

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

Ka CPU ntho e 'ngoe le e' ngoe e rarahane haholoanyane. Ha u khutlela setšoantšong sa kamano pakeng tsa Kubernetes le Docker, u ka bona seo request.cpu e lumellana le --cpu-shares, athe limit.cpu e tsamaisanang le folakha cpus ka Docker.

CPU eo Kubernetes a e kopang e atolosoa ke 1024, karolo ea lipotoloho tsa CPU. Haeba u batla ho kopa 1 e felletseng ea mantlha, u tlameha ho eketsa cpu: 1joalokaha ho bontšitsoe ka holimo.

Ho kopa kernel e felletseng (karolo = 1024) ha ho bolele hore setshelo sa hau se tla e fumana. Haeba mochini oa hau oa moamoheli o na le konokono e le 'ngoe feela mme o ntse o tsamaisa setshelo se fetang se le seng, lijana tsohle li tlameha ho arolelana CPU e teng lipakeng tsa tsona. See se etsahala joang? A re shebeng setšoantšo.

Mokhoa oa ho fumana lisebelisoa tsa Kubernetes Pod
Kopo ea CPU - Sisteme e le 'ngoe ea Core

Ha re nahane hore u na le sistimi e le 'ngoe ea mantlha e tsamaisang lijana. 'Mè (Kubernetes) o ile a pheha pie (CPU)' me o batla ho e arola pakeng tsa bana (lijana). Bana ba bararo ba batla phae e felletseng (karolo = 1024), ngoana e mong o batla halofo ea phae (512). 'Mè o batla ho ba leeme 'me o etsa lipalo tse bonolo.

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

Ho latela lipalo, bana ba bararo ba tla fumana 28% ea mantlha, eseng mantlha kaofela. Ngoana oa bone o tla fumana 14% ea kernel e feletseng, eseng halofo. Empa lintho li tla fapana haeba u na le sistimi e nang le li-multi-core.

Mokhoa oa ho fumana lisebelisoa tsa Kubernetes Pod
Kopo ea CPU - Multi-Core (4) System

Setšoantšong se ka holimo u ka bona hore bana ba bararo ba batla pie e feletseng, 'me e mong o batla halofo. Kaha 'mè o ile a pheha liphae tse 'nè, e mong le e mong oa bana ba hae o tla fumana tse ngata kamoo a batlang kateng. Sistimi ea li-multi-core, lisebelisoa tsa processor li ajoa ho li-processor cores tsohle tse fumanehang. Haeba setshelo se lekantsoe ka tlase ho konokono e le 'ngoe e felletseng ea CPU, se ntse se ka se sebelisa ho 100%.

Lipalo tse kaholimo li nolofalitsoe ho utloisisa hore na CPU e ajoa joang har'a lijana. Ehlile, ntle le lijana ka botsona, ho na le lits'ebetso tse ling tse sebelisang lisebelisoa tsa CPU. Ha lits'ebetso ka sejaneng se le seng li sa sebetse, tse ling li ka sebelisa sesebelisoa sa eona. CPU: "200m" e lumellana le CPU: 0,2, e bolelang hoo e ka bang 20% ​​ea motheo o le mong.

Joale ha re bue ka limit.cpu. CPU eo Kubernetes e e behang moeli e eketsoa ka 100. Sephetho ke nako eo setshelo se ka se sebelisang tse ling le tse ling tse 100 µs (cpu-period).

limit.cpu e tsamaisana le folakha ea Docker --cpus. Ena ke motsoako o mocha oa khale --cpu-period и --cpu-quota. Ka ho e beha, re bonts'a hore na ke lisebelisoa tse kae tse fumanehang tsa CPU tseo setshelo se ka li sebelisang haholo pele ho thothomela ho qala:

  • cpu - motsoako cpu-period и cpu-quota. cpus = 1.5 lekana le ho beha cpu-period = 100000 и cpu-quota = 150000;
  • CPU-nako - nako Kemiso ea CPU CFS, li-microseconds tse 100 tsa kamehla;
  • cpu palo - palo ea microseconds ka hare cpu-period, e tlanngoeng ke setshelo.

Ho etsahala'ng haeba u kenya CPU e sa lekaneng e batloang?

Haeba setshelo se hloka ho feta seo se se kentseng, se tla utsoa CPU lits'ebetsong tse ling.

Ho etsahalang haeba o beha moeli oa CPU o le tlase haholo?

Kaha sesebelisoa sa CPU sea khona ho fetoha, throttling e tla bulela.

Ho etsahalang haeba o sa hlakise kopo ya CPU?

Joalo ka memori, boleng ba kopo bo lekana le moeli.

Ho etsahala'ng haeba u sa bolele moeli oa CPU?

Setshelo se tla sebelisa CPU e ngata kamoo se hlokang. Haeba leano la kamehla la CPU (LimitRange) le hlalositsoe sebakeng sa mabitso, moeli ona o boetse o sebelisoa bakeng sa sets'oants'o.

Ho etsahala'ng haeba u sa hlalose kopo kapa moeli oa CPU?

Joalo ka mohopolo, ena ke boemo bo bobe ka ho fetesisa. Mohlophisi ha a tsebe hore na setshelo sa hau se hloka lisebelisoa tse kae, 'me sena se ka baka mathata a tebileng sebakeng sa node. Ho qoba sena, o hloka ho beha meeli ea kamehla bakeng sa libaka tsa mabitso (LimitRange).

Hopola: haeba o kopa CPU e ngata ho feta li-node tse ka fanang ka tsona, Pod e ke ke ea hlophisoa. Requests.cpu - eseng boleng bo tlase, empa boleng bo lekaneng ho qala Pod le ho sebetsa ntle le liphoso. Haeba sesebelisoa se sa etse lipalo tse rarahaneng, khetho e ntle ke ho kenya request.cpu <= 1 le ho qala likopi tse ngata kamoo ho hlokahalang.

Chelete e loketseng ea lisebelisoa tse kopiloeng kapa moeli oa lisebelisoa

Re ithutile ka moedi oa lisebelisoa tsa komporo. Joale ke nako ea ho araba potso: "Pod ea ka e hloka lisebelisoa tse kae ho tsamaisa ts'ebeliso ntle le mathata? Chelete e nepahetseng ke bokae?

Ka bomalimabe, ha ho na likarabo tse hlakileng tsa lipotso tsena. Haeba o sa tsebe hore na kopo ea hau e sebetsa joang kapa hore na e hloka CPU kapa memori e kae, khetho e ntle ke ho fa sesebelisoa mohopolo o mongata le CPU ebe o etsa liteko tsa ts'ebetso.

Ntle le liteko tsa ts'ebetso, beha leihlo boitšoaro ba ts'ebeliso ea ts'ebeliso bakeng sa beke. Haeba li-graph li bontša hore kopo ea hau e sebelisa lisebelisoa tse fokolang ho feta tseo u li kopileng, u ka fokotsa palo ea CPU kapa memori e kopiloeng.

Ka mohlala bona sena Grafana dashboard. E bonts'a phapang lipakeng tsa lisebelisoa tse kopiloeng kapa moeli oa lisebelisoa le ts'ebeliso ea hajoale ea lisebelisoa.

fihlela qeto e

Ho kopa le ho fokotsa lisebelisoa ho thusa ho boloka sehlopha sa hau sa Kubernetes se phetse hantle. Tokiso e nepahetseng ea moeli e fokotsa litšenyehelo mme e boloka lits'ebetso li sebetsa ka linako tsohle.

Ka bokhutšoanyane, ho na le lintho tse 'maloa tseo u lokelang ho li hopola:

  1. Lisebelisoa tse kopiloeng ke tlhophiso e nahanoang nakong ea ho qala (ha Kubernetes e rera ho amohela kopo). Ka lehlakoreng le leng, ho fokotsa lisebelisoa ho bohlokoa nakong ea ho sebetsa-ha kopo e se e ntse e sebetsa node.
  2. Ha ho bapisoa le mohopolo, CPU ke sesebelisoa se laoloang. Haeba ho se na CPU e lekaneng, Pod ea hau e ke ke ea koala 'me mochine oa throttling o tla buleha.
  3. Lisebelisoa tse kopiloeng le moeli oa lisebelisoa ha se bonyane le boleng bo phahameng! Ka ho hlalosa lisebelisoa tse kopiloeng, o netefatsa hore ts'ebeliso e tla sebetsa ntle le mathata.
  4. Mokhoa o motle ke ho seta kopo ea memori e lekanang le moeli oa memori.
  5. Ho lokile ho kenya kopo CPU <=1, haeba kopo e sa etse lipalo tse rarahaneng.
  6. Haeba o kopa lisebelisoa tse ngata ho feta tse fumanehang node, Pod e ke ke ea hlola e hlophisoa sebakeng seo.
  7. Ho fumana palo e nepahetseng ea lisebelisoa tse kopiloeng / meeli ea lisebelisoa, sebelisa tlhahlobo ea mojaro le ho beha leihlo.

Ke tšepa hore sengoloa sena se u thusa ho utloisisa mohopolo oa mantlha oa ho fokotsa lisebelisoa. 'Me u tla khona ho sebelisa tsebo ena mosebetsing oa hao.

Katleho!

Ke eng hape eo u ka e balang:

  1. Tlhokomelo ea SRE: Libaka tsa mabitso le Sebopeho sa Metric.
  2. 90+ lisebelisoa tse sebetsang bakeng sa Kubernetes: ho tsamaisoa, tsamaiso, ho beha leihlo, ts'ireletso le tse ling.
  3. Seteishene sa rona se Around Kubernetes ho Telegraph.

Source: www.habr.com

Eketsa ka tlhaloso