Mar a gheibh thu cothrom air goireasan Kubernetes Pod

Mar a gheibh thu cothrom air goireasan Kubernetes PodAn Duais le Tohad

Nuair a thòisicheas tu a-mach le Kubernetes, tha e cumanta dìochuimhneachadh mu bhith a 'stèidheachadh ghoireasan soithichean. Aig an ìre seo, tha e gu leòr dèanamh cinnteach gu bheil ìomhaigh an Docker ag obair agus gun gabh a chuir gu buidheann Kubernetes.

Ach nas fhaide air adhart feumar an tagradh a chuir a-steach ann am buidheann toraidh còmhla ri tagraidhean eile. Gus seo a dhèanamh, feumaidh tu goireasan a riarachadh airson an t-soithich agus dèanamh cinnteach gu bheil gu leòr dhiubh ann gus an aplacaid a chuir an gnìomh, agus nach bi duilgheadasan aig tagraidhean ruith eile.

sgioba Kubernetes aaS bho Mail.ru eadar-theangaich artaigil mu ghoireasan soithichean (CPU & MEM), iarrtasan agus cuingealachadh ghoireasan. Ionnsaichidh tu buannachdan nan roghainnean sin agus dè thachras mura suidhich thu iad.

Goireasan coimpiutaireachd

Tha dà sheòrsa ghoireasan againn leis na h-aonadan a leanas:

  • Aonad giullachd meadhanach (CPU) - coraichean;
  • Cuimhne (MEM) - bytes.

Tha goireasan air an sònrachadh airson gach container. Anns an fhaidhle Pod YAML a leanas, chì thu roinn ghoireasan anns a bheil na goireasan a chaidh iarraidh agus a chuingealachadh:

  • Goireasan Pod a chaidh iarraidh = suim de ghoireasan a chaidh iarraidh anns a h-uile soitheach;
  • Crìochan Stòras Pod = Suim gach Crìochan Goireas 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

Eisimpleir de Ghoireasan Iarrte agus Earranta

achadh resources.requested bhon t-sònrachadh Is e Pod aon de na h-eileamaidean a thathas a’ cleachdadh gus an nód a tha thu ag iarraidh a lorg. Faodaidh tu mar-thà dealbhadh Pod a chleachdadh air a shon. Ciamar a lorgas tu nòta freagarrach?

Tha grunn phàirtean ann an Kubernetes, a’ gabhail a-steach prìomh nód no prìomh nód (Plèana Smachd Kubernetes). Tha grunn phròiseasan aig a 'phrìomh nód: kube-apiserver, kube-controller-manager agus kube-scheduler.

Tha e an urra ris a’ phròiseas kube-clàraiche ath-sgrùdadh a dhèanamh air pods a chaidh an cruthachadh às ùr agus lorg nodan luchd-obrach a tha a rèir gach iarrtas pod, a’ toirt a-steach an àireamh de ghoireasan a chaidh iarraidh. Tha liosta nan nodan a lorgar le kube-scheduler air a rangachadh. Tha am pod clàraichte air an nód leis na sgòran as àirde.

Mar a gheibh thu cothrom air goireasan Kubernetes PodCàite an tèid am Pod purpaidh a chuir?

Anns an dealbh chì thu gum bu chòir do chlàr-ciùb Pod purpaidh ùr a chlàradh. Tha dà nodan ann an cruinneachadh Kubernetes: A agus B. Mar a chì thu, chan urrainn do chlàraiche kube Pod a chlàradh air nód A - chan eil na goireasan a tha rim faighinn (gun iarrtas) a rèir iarrtasan a’ phod purpaidh. Mar sin, cha bhith an 1 GB de chuimhne a dh ’iarr am Pod purpaidh a’ freagairt air nód A, leis gur e 0,5 GB an cuimhne a tha ri fhaighinn. Ach tha goireasan gu leòr aig nód B. Mar thoradh air an sin, tha an clàr-ciùb a 'co-dhùnadh gur e nód B an ceann-uidhe aig a' phod purpaidh.

A-nis tha fios againn mar a bheir na goireasan a chaidh iarraidh buaidh air an roghainn nód airson am Pod a ruith. Ach dè a’ bhuaidh a th’ aig goireasan iomallach?

Tha crìoch an stòrais na chrìoch nach urrainn dhan CPU/MEM a dhol tarsainn. Ach, tha an goireas CPU sùbailte, agus mar sin cha toir soithichean a ruigeas na crìochan CPU aca air am Pod falbh. An àite sin, tòisichidh smeòrach CPU. Ma ruigear a’ chrìoch cleachdaidh MEM, thèid an soitheach a stad mar thoradh air OOM-Killer agus ath-thòiseachadh ma tha sin ceadaichte leis an t-suidheachadh RestartPolicy.

Goireasan a chaidh iarraidh agus as àirde gu mionaideach

Mar a gheibh thu cothrom air goireasan Kubernetes PodConaltradh ghoireasan eadar Docker agus Kubernetes

Is e an dòigh as fheàrr air mìneachadh mar a tha iarrtasan ghoireasan agus crìochan ghoireasan ag obair a bhith a’ toirt a-steach an dàimh eadar Kubernetes agus Docker. Anns an ìomhaigh gu h-àrd chì thu mar a tha raointean Kubernetes agus brataichean tòiseachaidh Docker càirdeach.

Cuimhne: iarrtas agus cuingealachadh

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

Mar a chaidh ainmeachadh gu h-àrd, tha cuimhne air a thomhas ann am bytes. Stèidhichte air Sgrìobhainnean Kubernetes, is urrainn dhuinn cuimhne a shònrachadh mar àireamh. Mar as trice tha e an t-sreath iomlan, mar eisimpleir 2678 - 'se sin, 2678 bytes. Faodaidh tu cuideachd iar-leasachan a chleachdadh G и Gi, is e am prìomh rud cuimhneachadh nach eil iad co-ionann. Tha a 'chiad fhear deicheach agus an dàrna fear dà-chànanach. Mar an eisimpleir a chaidh ainmeachadh ann an sgrìobhainnean k8s: 128974848, 129e6, 129M, 123Mi - tha iad cha mhòr co-ionann.

Roghainn Kubernetes limits.memory co-chosmhail ris a’ bhratach --memory bho Docker. Ann an cùis request.memory Chan eil saighead ann airson Docker oir chan eil Docker a’ cleachdadh an raon seo. Faodaidh tu faighneachd, a bheil seo eadhon riatanach? Tha feum. Mar a thuirt mi roimhe, tha an raon cudromach dha Kubernetes. Stèidhichte air an fhiosrachadh bhuaithe, bidh kube-scheduler a’ co-dhùnadh dè an nód airson am Pod a chlàradh.

Dè thachras ma shuidhicheas tu cuimhne gu leòr airson iarrtas?

Ma tha an soitheach air crìochan na cuimhne a chaidh iarraidh a ruighinn, tha am Pod air a chuir ann am buidheann de pods a stadas nuair nach eil cuimhne gu leòr anns an nód.

Dè thachras ma shuidhicheas tu an ìre cuimhne ro ìosal?

Ma thèid an soitheach thairis air a’ chrìoch cuimhne, thèid a thoirt gu crìch air sgàth OOM-Killed. Agus ath-thòiseachadh ma ghabhas e dèanamh stèidhichte air RestartPolicy far a bheil an luach bunaiteach Always.

Dè thachras mura sònraich thu a’ chuimhne a chaidh iarraidh?

Gabhaidh Kubernetes an luach crìche agus suidhichidh e e mar an luach bunaiteach.

Dè as urrainn tachairt mura sònraich thu crìoch cuimhne?

Chan eil bacadh sam bith air a’ ghobhar; faodaidh e na h-uimhir de chuimhne a chleachdadh ’s a thogras e. Ma thòisicheas e a 'cleachdadh a h-uile cuimhne a tha ri fhaighinn air an nód, marbhaidh OOM e. Thèid an soitheach ath-thòiseachadh an uairsin ma ghabhas e dèanamh stèidhichte air RestartPolicy.

Dè thachras mura sònraich thu crìochan cuimhne?

Is e seo an suidheachadh as miosa: chan eil fios aig a ’chlàr-ama cia mheud goireas a dh’ fheumas an soitheach, agus faodaidh seo droch dhuilgheadasan adhbhrachadh air an nód. Anns a 'chùis seo, bhiodh e math crìochan bunaiteach a bhith agad air an àite ainm (air a shuidheachadh le LimitRange). Chan eil crìochan bunaiteach ann - chan eil crìochan aig a’ Pod, faodaidh e na h-uimhir de chuimhne a chleachdadh agus a tha e ag iarraidh.

Ma tha an cuimhne a chaidh iarraidh nas motha na tha an nód a’ tabhann, cha bhith am Pod clàraichte. Tha e cudromach cuimhneachadh air sin Requests.memory - chan e an luach as ìsle. Is e seo cunntas air na tha de chuimhne gu leòr gus an soitheach a chumail a’ ruith gu leantainneach.

Mar as trice thathar a 'moladh an aon luach a shuidheachadh airson request.memory и limit.memory. Bidh seo a’ dèanamh cinnteach nach clàraich Kubernetes Pod air nód aig a bheil cuimhne gu leòr airson am Pod a ruith ach nach eil gu leòr airson a ruith. Cumaibh cuimhne: chan eil planadh Kubernetes Pod a 'toirt aire ach requests.memoryagus limits.memory chan eil e a 'toirt aire.

CPU: iarrtas agus crìoch

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

Le CPU tha a h-uile dad beagan nas iom-fhillte. A 'tilleadh chun dealbh den dàimh eadar Kubernetes agus Docker, chì thu sin request.cpu соответствует --cpu-shares, ach limit.cpu co-chosmhail ris a’ bhratach cpus anns an Docker.

Tha an CPU a tha Kubernetes ag iarraidh air iomadachadh le 1024, a’ chuibhreann de chuairtean CPU. Ma tha thu airson 1 làn bhunait iarraidh, feumaidh tu cuir ris cpu: 1mar a chithear gu h-àrd.

Chan eil a bhith ag iarraidh kernel slàn (co-roinn = 1024) a’ ciallachadh gum faigh an soitheach agad e. Mura h-eil ach aon chridhe aig an inneal aoigheachd agad agus gu bheil thu a’ ruith barrachd air aon ghobhar, feumaidh a h-uile inneal an CPU a tha ri fhaighinn a roinn eatorra. Ciamar a tha seo a’ tachairt? Bheir sinn sùil air an dealbh.

Mar a gheibh thu cothrom air goireasan Kubernetes Pod
Iarrtas CPU - Siostam bunaiteach singilte

Smaoinich gu bheil siostam aoigheachd aon-cridhe agad a’ ruith shoithichean. Bidh mama (Kubernetes) a’ fuine pie (CPU) agus ag iarraidh a roinn eadar clann (soithichean). Tha triùir chloinne ag iarraidh pìos slàn (co-roinn = 1024), tha pàiste eile ag iarraidh leth-pìos (512). Tha mama ag iarraidh a bhith cothromach agus a 'dèanamh àireamhachadh sìmplidh.

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

Stèidhichte air an àireamhachadh, gheibh triùir chloinne 28% den chridhe, agus chan e an cridhe gu lèir. Gheibh an ceathramh leanabh 14% den làn kernel, chan e leth. Ach bidh cùisean eadar-dhealaichte ma tha siostam ioma-cridhe agad.

Mar a gheibh thu cothrom air goireasan Kubernetes Pod
Iarrtas CPU - Siostam ioma-chridhe (4).

Anns an ìomhaigh gu h-àrd chì thu gu bheil triùir chloinne ag iarraidh pìos slàn, agus tha aon ag iarraidh leth. Leis gu bheil mama a’ fuine ceithir paidhean, gheibh gach leanabh aice na tha iad ag iarraidh. Ann an siostam ioma-cridhe, tha goireasan pròiseasar air an sgaoileadh thairis air a h-uile cores pròiseasar a tha rim faighinn. Ma tha soitheach air a chuingealachadh ri nas lugha na aon chridhe làn CPU, faodaidh e fhathast a chleachdadh aig 100%.

Tha an àireamhachadh gu h-àrd air a dhèanamh nas sìmplidhe gus tuigse fhaighinn air mar a tha CPU air a chuairteachadh am measg shoithichean. Gu dearbh, a bharrachd air na soithichean fhèin, tha pròiseasan eile ann a bhios cuideachd a ’cleachdadh goireasan CPU. Nuair a tha pròiseasan ann an aon shoitheach leisg, faodaidh cuid eile an goireas aca a chleachdadh. CPU: "200m" соответствует CPU: 0,2, a tha a’ ciallachadh timcheall air 20% de aon chridhe.

A-nis leigidh sinn bruidhinn mu dheidhinn limit.cpu. Tha an CPU a tha Kubernetes a 'cuingealachadh air iomadachadh le 100. Mar thoradh air an sin, tha an ùine a dh'fhaodas an soitheach a chleachdadh gach 100 µs (cpu-period).

limit.cpu a’ maidseadh bratach an Docker --cpus. Is e seo measgachadh ùr de sheann --cpu-period и --cpu-quota. Le bhith ga shuidheachadh, bidh sinn a’ comharrachadh cia mheud goireas CPU a tha ri fhaighinn as urrainn don ghobhar a chleachdadh mus tòisich an smeòrach:

  • cpus - measgachadh cpu-period и cpu-quota. cpus = 1.5 co-ionann ri suidheachadh cpu-period = 100000 и cpu-quota = 150000;
  • CPU-ùine - ùine Clàr-ama CPU CFS, default 100 microseconds;
  • cpu-cuota - an àireamh de microseconds a-staigh cpu-period, a tha air a chuartachadh leis an t-soitheach.

Dè thachras mura stàlaich thu CPU a chaidh iarraidh gu leòr?

Ma tha feum aig an t-soitheach air barrachd na tha e air a chuir a-steach, goididh e CPU bho phròiseasan eile.

Dè thachras ma shuidhicheas tu crìoch an CPU ro ìosal?

Leis gu bheil an goireas CPU comasach air atharrachadh, tionndaidhidh smeòrach air.

Dè thachras mura sònraich thu iarrtas CPU?

Coltach ri cuimhne, tha luach an iarrtais co-ionann ris a’ chrìoch.

Dè thachras mura sònraich thu crìoch CPU?

Cleachdaidh an soitheach na h-uimhir de CPU mar a dh’ fheumas e. Ma tha poileasaidh CPU bunaiteach (LimitRange) air a mhìneachadh san ainm-àite, thèid a’ chrìoch seo a chleachdadh cuideachd airson an t-soithich.

Dè thachras mura sònraich thu iarrtas no crìoch CPU?

Coltach ri cuimhne, is e seo an suidheachadh as miosa. Chan eil fios aig a’ chlàr-ama cia mheud goireas a dh’ fheumas an soitheach agad, agus faodaidh seo fìor dhuilgheadasan adhbhrachadh air an nód. Gus seo a sheachnadh, feumaidh tu crìochan bunaiteach a shuidheachadh airson ainmean-àite (LimitRange).

Cuimhnich: ma dh’ iarras tu barrachd CPU na as urrainn dha na nodan a thoirt seachad, cha bhith am Pod clàraichte. Requests.cpu - chan e an luach as ìsle, ach luach gu leòr airson am Pod a thòiseachadh agus obrachadh às aonais fàilligidhean. Mura dèan an tagradh àireamhachadh iom-fhillte, is e an roghainn as fheàrr a stàladh request.cpu <= 1 agus cuir air bhog na h-uimhir de mhac-samhail mar a dh’ fheumar.

An ìre mhath de ghoireasan a chaidh iarraidh no crìoch ghoireasan

Dh’ ionnsaich sinn mu dheidhinn cuingealachadh ghoireasan coimpiutaireachd. A-nis tha an t-àm ann a’ cheist a fhreagairt: “Cia mheud goireas a dh’ fheumas mo Pod gus an tagradh a ruith gun duilgheadas sam bith? Dè an ìre foirfe a th’ ann?

Gu mì-fhortanach, chan eil freagairtean soilleir ann dha na ceistean sin. Mura h-eil fios agad ciamar a tha an tagradh agad ag obair no dè an ìre de CPU no cuimhne a tha a dhìth air, is e an roghainn as fheàrr tòrr cuimhne agus CPU a thoirt don tagradh agus an uairsin deuchainnean coileanaidh a ruith.

A bharrachd air deuchainnean coileanaidh, cùm sùil air giùlan an tagraidh ann an sgrùdadh airson seachdain. Ma sheallas na grafaichean gu bheil an tagradh agad a’ caitheamh nas lugha de ghoireasan na dh’ iarr thu, faodaidh tu an ìre de CPU no cuimhne a chaidh iarraidh a lughdachadh.

Mar eisimpleir faic seo Deas-bhòrd Grafana. Bidh e a’ taisbeanadh an eadar-dhealachaidh eadar an ìre ghoireasan no an ìre ghoireasan a chaidh iarraidh agus cleachdadh ghoireasan an-dràsta.

co-dhùnadh

Le bhith ag iarraidh agus a’ cuingealachadh ghoireasan cuidichidh sin le bhith a’ cumail do bhuidheann Kubernetes fallain. Bidh rèiteachadh crìochan ceart a’ lughdachadh chosgaisean agus a’ cumail thagraidhean a’ dol fad na h-ùine.

Ann an ùine ghoirid, tha beagan rudan ri chumail nad inntinn:

  1. Is e rèiteachadh a th’ ann an goireasan a chaidh iarraidh aig àm tòiseachaidh (nuair a tha Kubernetes an dùil an tagradh a chumail). An coimeas ri sin, tha cuingealachadh ghoireasan cudromach aig àm ruith - nuair a tha an tagradh a’ ruith air an nód mu thràth.
  2. An coimeas ri cuimhne, tha an CPU na ghoireas riaghlaichte. Mura h-eil CPU gu leòr ann, cha dùin am Pod agad agus tionndaidhidh an inneal smeòrach air.
  3. Chan eil goireasan agus crìoch ghoireasan nan luachan as ìsle agus as àirde! Le bhith a’ mìneachadh nan goireasan a chaidh iarraidh, nì thu cinnteach gun ruith an aplacaid gun duilgheadas sam bith.
  4. Is e deagh chleachdadh an t-iarrtas cuimhne a shuidheachadh co-ionann ris a’ chrìoch cuimhne.
  5. Ceart gu leòr chaidh iarraidh air stàladh CPU <=1, mura dèan an tagradh àireamhachadh iom-fhillte.
  6. Ma dh’iarras tu barrachd ghoireasan na tha rim faighinn air nód, cha bhith am Pod gu bràth clàraichte don nód sin.
  7. Gus faighinn a-mach dè an ìre cheart de ghoireasan / crìochan ghoireasan a chaidh iarraidh, cleachd deuchainn luchdan agus sgrùdadh.

Tha mi an dòchas gun cuidich an artaigil seo thu gus bun-bheachd cuingealachadh ghoireasan a thuigsinn. Agus bidh e comasach dhut an t-eòlas seo a chleachdadh nad obair.

Beannachd leat

Dè eile ri leughadh:

  1. SRE Observability: Ainmean-àite agus Structar Metric.
  2. 90+ innealan feumail airson Kubernetes: cleachdadh, riaghladh, sgrùdadh, tèarainteachd agus barrachd.
  3. An sianal againn timcheall air Kubernetes ann an Telegram.

Source: www.habr.com

Cuir beachd ann