Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes

Akiyesi. itumọ.: Itan ṣiṣi oju-oju yii ti Omio-apejọ irin-ajo Yuroopu kan-mu awọn oluka lati imọ-jinlẹ ipilẹ si awọn intricacies ilowo ti o fanimọra ti iṣeto Kubernetes. Imọmọ pẹlu iru awọn ọran ṣe iranlọwọ kii ṣe gbooro awọn iwoye rẹ nikan, ṣugbọn tun ṣe idiwọ awọn iṣoro ti kii ṣe bintin.

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes

Njẹ o ti ni ohun elo kan ti o di ni aaye, dawọ idahun si awọn sọwedowo ilera, ati pe ko ni anfani lati mọ idi? Ọkan ṣee ṣe alaye ni ibatan si Sipiyu awọn oluşewadi opin ipin. Eyi ni ohun ti a yoo sọrọ nipa ninu nkan yii.

TL; DR:
A ṣeduro ni pataki lati pa awọn opin Sipiyu kuro ni Kubernetes (tabi piparẹ awọn idiyele CFS ni Kubelet) ti o ba nlo ẹya ti ekuro Linux pẹlu kokoro ipin CFS kan. Ninu mojuto wa pataki ati daradara mọ kokoro ti o yori si fifunni pupọ ati awọn idaduro
.

Ni Omo gbogbo awọn amayederun ni iṣakoso nipasẹ Kubernetes. Gbogbo awọn ẹru iṣẹ ipinlẹ wa ati ti ko ni ipinlẹ ṣiṣẹ ni iyasọtọ lori Kubernetes (a lo Google Kubernetes Engine). Ni oṣu mẹfa sẹhin, a bẹrẹ si akiyesi awọn idinku laileto. Awọn ohun elo di tabi dawọ idahun si awọn sọwedowo ilera, padanu asopọ si nẹtiwọọki, ati bẹbẹ lọ. Iwa yii ṣe wa lẹnu fun igba pipẹ, ati nikẹhin a pinnu lati mu iṣoro naa ni pataki.

Akopọ nkan naa:

  • Awọn ọrọ diẹ nipa awọn apoti ati Kubernetes;
  • Bawo ni awọn ibeere Sipiyu ati awọn opin ti wa ni imuse;
  • Bawo ni opin Sipiyu ṣe n ṣiṣẹ ni awọn agbegbe pupọ-mojuto;
  • Bii o ṣe le ṣe atẹle fifa Sipiyu;
  • Isoro ojutu ati nuances.

Awọn ọrọ diẹ nipa awọn apoti ati Kubernetes

Kubernetes jẹ pataki boṣewa igbalode ni agbaye amayederun. Awọn oniwe-akọkọ-ṣiṣe ni eiyan orchestration.

Apoti

Ni igba atijọ, a ni lati ṣẹda awọn ohun-ọṣọ bi Java JARs / WARs, Python Eggs, tabi executables lati ṣiṣẹ lori olupin. Bibẹẹkọ, lati jẹ ki wọn ṣiṣẹ, iṣẹ afikun ni lati ṣe: fifi sori ẹrọ agbegbe asiko asiko (Java/Python), gbigbe awọn faili pataki si awọn aaye to tọ, aridaju ibamu pẹlu ẹya kan pato ti ẹrọ ṣiṣe, ati bẹbẹ lọ. Ni awọn ọrọ miiran, akiyesi ṣọra ni lati san si iṣakoso iṣeto ni (eyiti o jẹ orisun ariyanjiyan nigbagbogbo laarin awọn olupilẹṣẹ ati awọn oludari eto).

Awọn apoti ti yi ohun gbogbo pada. Bayi artifact jẹ aworan eiyan. O le ṣe aṣoju bi iru faili imuṣiṣẹ ti o gbooro ti o ni kii ṣe eto nikan, ṣugbọn tun agbegbe ipaniyan ni kikun (Java / Python /…), ati awọn faili / awọn idii pataki, ti fi sori ẹrọ tẹlẹ ati ṣetan lati sure. Awọn apoti le wa ni ransogun ati ṣiṣe awọn lori yatọ si olupin lai eyikeyi afikun awọn igbesẹ.

Ni afikun, awọn apoti ṣiṣẹ ni agbegbe iyanrin tiwọn. Wọn ni ohun ti nmu badọgba nẹtiwọọki foju tiwọn, eto faili tiwọn pẹlu iwọle to lopin, awọn ilana ilana tiwọn, awọn idiwọn tiwọn lori Sipiyu ati iranti, bbl Gbogbo eyi ni imuse ọpẹ si eto ipilẹ pataki ti ekuro Linux - awọn aaye orukọ.

Kubernetes

Gẹgẹbi a ti sọ tẹlẹ, Kubernetes jẹ akọrin eiyan. O ṣiṣẹ bii eyi: o fun ni adagun awọn ẹrọ, lẹhinna sọ pe: “Hey, Kubernetes, jẹ ki a ṣe ifilọlẹ awọn iṣẹlẹ mẹwa ti apoti mi pẹlu awọn ilana 2 ati 3 GB ti iranti kọọkan, ki o jẹ ki wọn ṣiṣẹ!” Kubernetes yoo ṣe abojuto awọn iyokù. Yoo wa agbara ọfẹ, awọn apoti ifilọlẹ ati tun bẹrẹ wọn ti o ba jẹ dandan, yi imudojuiwọn kan pada nigbati awọn ẹya ba yipada, ati bẹbẹ lọ. Ni pataki, Kubernetes ngbanilaaye lati ṣe arosọ kuro ni paati ohun elo ati ṣe ọpọlọpọ awọn ọna ṣiṣe ti o dara fun gbigbe ati ṣiṣiṣẹ awọn ohun elo.

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Kubernetes lati aaye ti wo ti layman

Kini awọn ibeere ati awọn opin ni Kubernetes

O dara, a ti bo awọn apoti ati Kubernetes. A tun mọ pe ọpọ awọn apoti le gbe lori ẹrọ kanna.

Apejuwe le ṣe iyaworan pẹlu iyẹwu ti o wọpọ. Awọn agbegbe ile nla kan (awọn ẹrọ / awọn ẹya) ni a mu ati yalo si awọn ayalegbe pupọ (awọn apoti). Kubernetes ṣiṣẹ bi olutaja. Ibeere naa waye, bawo ni a ṣe le tọju awọn agbatọju lati awọn ija pẹlu ara wọn? Kini ti ọkan ninu wọn, sọ, pinnu lati yawo baluwe fun idaji ọjọ naa?

Eyi ni ibiti awọn ibeere ati awọn opin wa sinu ere. Sipiyu ìbéèrè nilo nikan fun igbogun ìdí. Eyi jẹ nkan bi “akojọ ifẹ” ti eiyan naa, ati pe o lo lati yan oju ipade ti o dara julọ. Ni akoko kanna Sipiyu iye le ti wa ni akawe si a yiyalo adehun - bi ni kete bi a ti yan a kuro fun eiyan, awọn ko le lọ kọja awọn opin iṣeto. Ati pe eyi ni ibi ti iṣoro naa ti dide ...

Bii awọn ibeere ati awọn opin ti ṣe imuse ni Kubernetes

Kubernetes nlo ẹrọ fifun (fifo awọn akoko aago) ti a ṣe sinu ekuro lati ṣe awọn opin Sipiyu. Ti ohun elo kan ba kọja opin, fifẹ ti ṣiṣẹ (ie o gba awọn iyipo Sipiyu diẹ). Awọn ibeere ati awọn opin fun iranti ti ṣeto ni oriṣiriṣi, nitorinaa wọn rọrun lati rii. Lati ṣe eyi, kan ṣayẹwo ipo atunbere ti o kẹhin ti adarọ ese: boya “OOMKilled”. Fifun Sipiyu kii ṣe rọrun pupọ, nitori K8s nikan jẹ ki awọn metiriki wa nipasẹ lilo, kii ṣe nipasẹ awọn ẹgbẹ.

Sipiyu Ibere

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Bawo ni Sipiyu ìbéèrè ti wa ni muse

Fun ayedero, jẹ ki a wo ilana nipa lilo ẹrọ kan pẹlu Sipiyu 4-core bi apẹẹrẹ.

K8s nlo ilana ẹgbẹ iṣakoso kan (awọn ẹgbẹ) lati ṣakoso ipin ti awọn orisun (iranti ati ero isise). Awoṣe logalomomoise kan wa fun: ọmọ jogun awọn opin ti ẹgbẹ obi. Awọn alaye pinpin wa ni ipamọ sinu eto faili foju kan (/sys/fs/cgroup). Ninu ọran ti ero isise eyi ni /sys/fs/cgroup/cpu,cpuacct/*.

K8s nlo faili cpu.share lati soto isise oro. Ninu ọran wa, ẹgbẹ gbongbo gba awọn ipin 4096 ti awọn orisun Sipiyu - 100% ti agbara ero isise ti o wa (1 core = 1024; eyi jẹ iye ti o wa titi). Ẹgbẹ gbongbo n pin awọn orisun ni iwọn ti o da lori awọn ipin ti awọn ọmọ ti o forukọsilẹ ni cpu.share, àti àwọn, ẹ̀wẹ̀, ṣe bákan náà pẹ̀lú àwọn àtọmọdọ́mọ wọn, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ. Lori ipade Kubernetes aṣoju kan, ẹgbẹ gbongbo ni awọn ọmọde mẹta: system.slice, user.slice и kubepods. Awọn ẹgbẹ-ẹgbẹ meji akọkọ ni a lo lati pin kaakiri awọn orisun laarin awọn ẹru eto to ṣe pataki ati awọn eto olumulo ni ita ti K8s. Ikẹhin - kubepods - ti a ṣẹda nipasẹ Kubernetes lati pin awọn orisun laarin awọn adarọ-ese.

Aworan ti o wa loke fihan pe awọn ẹgbẹ-ẹgbẹ akọkọ ati keji gba ọkọọkan 1024 mọlẹbi, pẹlu kuberpod subgroup soto 4096 mọlẹbi Bawo ni eyi ṣe ṣee ṣe: lẹhinna, ẹgbẹ gbongbo ni iwọle si nikan 4096 awọn ipin, ati apapọ awọn ipin ti awọn arọmọdọmọ rẹ ni pataki ju nọmba yii lọ (6144)? Ojuami ni pe iye naa jẹ oye oye, nitorinaa oluṣeto Linux (CFS) lo lati pin ipin awọn orisun Sipiyu ni iwọn. Ninu ọran wa, awọn ẹgbẹ meji akọkọ gba 680 awọn ipin gidi (16,6% ti 4096), ati kubepod gba awọn ti o ku 2736 mọlẹbi Ni ọran ti downtime, awọn ẹgbẹ meji akọkọ kii yoo lo awọn orisun ti a pin.

O da, oluṣeto ni ẹrọ kan lati yago fun jafara awọn orisun Sipiyu ti ko lo. O n gbe agbara "laiṣiṣẹ" lọ si adagun agbaye, lati eyiti o ti pin si awọn ẹgbẹ ti o nilo afikun agbara isise (gbigbe naa waye ni awọn ipele lati yago fun awọn adanu iyipo). Ọna ti o jọra ni a lo fun gbogbo awọn iru-ọmọ.

Ilana yii ṣe idaniloju pinpin itẹtọ ti agbara ero isise ati rii daju pe ko si ẹnikan ti o ṣe ilana “ji” awọn orisun lati ọdọ awọn miiran.

Sipiyu Idiwọn

Bi o ti jẹ pe awọn atunto ti awọn opin ati awọn ibeere ni K8s dabi iru, imuse wọn yatọ patapata: eyi julọ ​​sinilona ati apakan ti o ni akọsilẹ ti o kere julọ.

K8s olukoni CFS ipin siseto lati mu awọn ifilelẹ lọ. Eto wọn jẹ pato ninu awọn faili cfs_period_us и cfs_quota_us ninu iwe ilana akojọpọ (faili naa tun wa nibẹ cpu.share).

Ko cpu.share, ipin naa da lori akoko akoko, kii ṣe lori agbara ero isise ti o wa. cfs_period_us pato iye akoko (epoch) - o jẹ nigbagbogbo 100000 μs (100 ms). Aṣayan wa lati yi iye yii pada ni awọn K8, ṣugbọn o wa ni alfa nikan ni bayi. Oluṣeto naa nlo epoch lati tun bẹrẹ awọn ipin ti a lo. Faili keji cfs_quota_us, pato akoko ti o wa (iye) ni akoko kọọkan. Ṣe akiyesi pe o tun pato ni awọn iṣẹju-aaya. Awọn ipin le koja awọn epoch ipari; Ni awọn ọrọ miiran, o le jẹ diẹ sii ju 100 ms.

Jẹ ki a wo awọn oju iṣẹlẹ meji lori awọn ẹrọ 16-core (iru kọnputa ti o wọpọ julọ ti a ni ni Omio):

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Oju iṣẹlẹ 1: Awọn okun 2 ati opin 200 ms kan. Ko si throtling

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Ifilelẹ 2: Awọn okun 10 ati opin 200 ms. Fifun bẹrẹ lẹhin 20 ms, iraye si awọn orisun ero isise ti tun bẹrẹ lẹhin 80 ms miiran

Jẹ ká sọ pé o ṣeto awọn Sipiyu iye to 2 awọn ekuro; Kubernetes yoo tumọ iye yii si 200 ms. Eyi tumọ si pe eiyan le lo o pọju 200ms ti akoko Sipiyu laisi fifun.

Ati pe eyi ni ibi ti igbadun bẹrẹ. Gẹgẹbi a ti sọ loke, ipin ti o wa ni 200 ms. Ti o ba n ṣiṣẹ ni afiwe mẹwa awọn okun lori ẹrọ 12-core (wo apejuwe fun oju iṣẹlẹ 2), lakoko ti gbogbo awọn adarọ-ese miiran ko ṣiṣẹ, ipin naa yoo pari ni 20 ms nikan (lati 10 * 20 ms = 200 ms), ati pe gbogbo awọn okun ti podu yii yoo rọ » (fifun) fun tókàn 80 ms. Awọn tẹlẹ darukọ kokoro aseto, nitori eyi ti throttling nmu waye ati awọn eiyan ko le ani mu awọn ti wa tẹlẹ ipin.

Bawo ni lati ṣe iṣiro throttling ni pods?

Kan buwolu wọle si adarọ ese naa ki o ṣiṣẹ cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - lapapọ nọmba ti awọn akoko iṣeto;
  • nr_throttled - nọmba ti throttled akoko ninu awọn tiwqn nr_periods;
  • throttled_time - akojo throttled akoko ni nanoseconds.

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes

Kini n ṣẹlẹ gaan?

Bi abajade, a gba fifun giga ni gbogbo awọn ohun elo. Nigba miran o wa ninu ọkan ati idaji igba lagbara ju iṣiro!

Eyi nyorisi awọn aṣiṣe lọpọlọpọ - awọn ikuna ayẹwo imurasilẹ, awọn didi apoti, awọn fifọ asopọ nẹtiwọọki, awọn akoko ipari laarin awọn ipe iṣẹ. Nikẹhin eyi ni abajade ni aisiki ti o pọ si ati awọn oṣuwọn aṣiṣe ti o ga julọ.

Ipinnu ati awọn abajade

Ohun gbogbo ni o rọrun nibi. A kọ awọn opin Sipiyu silẹ ati bẹrẹ mimu dojuiwọn ekuro OS ni awọn iṣupọ si ẹya tuntun, ninu eyiti a ti ṣeto kokoro naa. Nọmba awọn aṣiṣe (HTTP 5xx) ninu awọn iṣẹ wa silẹ lẹsẹkẹsẹ ni pataki:

HTTP 5xx aṣiṣe

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Awọn aṣiṣe HTTP 5xx fun iṣẹ pataki kan

Akoko idahun p95

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Ibere ​​iṣẹ to ṣe pataki lairi, ipin ogorun 95th

Awọn idiyele iṣẹ

Sipiyu ifilelẹ lọ ati ibinu throttling ni Kubernetes
Nọmba awọn wakati apẹẹrẹ ti o lo

Kini apeja na?

Gẹgẹbi a ti sọ ni ibẹrẹ nkan naa:

Apejuwe le ṣe iyaworan pẹlu iyẹwu agbegbe kan… Kubernetes ṣe bi olutaja. Ṣugbọn bawo ni a ṣe le tọju awọn ayalegbe lati awọn ija pẹlu ara wọn? Kini ti ọkan ninu wọn, sọ, pinnu lati yawo baluwe fun idaji ọjọ naa?

Eyi ni apeja naa. Eiyan aibikita kan le jẹ gbogbo awọn orisun Sipiyu ti o wa lori ẹrọ kan. Ti o ba ni akopọ ohun elo ọlọgbọn (fun apẹẹrẹ, JVM, Go, Node VM ti tunto daradara), lẹhinna eyi kii ṣe iṣoro: o le ṣiṣẹ ni iru awọn ipo fun igba pipẹ. Ṣugbọn ti awọn ohun elo ko ba wa ni iṣapeye tabi ko ni iṣapeye rara (FROM java:latest), ipo naa le jade kuro ni iṣakoso. Ni Omio a ni awọn Dockerfiles ipilẹ adaṣe adaṣe pẹlu awọn eto aiyipada to peye fun akopọ ede pataki, nitorinaa ọran yii ko si.

A ṣeduro mimojuto awọn metiriki lILO (lilo, ekunrere ati awọn aṣiṣe), awọn idaduro API ati awọn oṣuwọn aṣiṣe. Rii daju pe awọn abajade pade awọn ireti.

jo

Eyi ni itan wa. Awọn ohun elo atẹle yii ṣe iranlọwọ pupọ lati loye ohun ti n ṣẹlẹ:

Awọn ijabọ bug Kubernetes:

Njẹ o ti ni awọn iṣoro ti o jọra ninu adaṣe rẹ tabi ni iriri ti o ni ibatan si fifẹ ni awọn agbegbe iṣelọpọ apoti bi? Pin itan rẹ ninu awọn asọye!

PS lati onitumọ

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun