Otu esi enweta akụrụngwa Kubernetes Pod

Otu esi enweta akụrụngwa Kubernetes PodỤgwọ ọrụ Tohad

Mgbe ị na-amalite na Kubernetes, ọ bụ ihe a na-echefu maka ịtọlite ​​akụrụngwa akpa. N'oge a, o zuru ezu iji hụ na ihe oyiyi Docker na-arụ ọrụ ma nwee ike ibuga ya na ụyọkọ Kubernetes.

Mana emesia ọ dị mkpa ka etinyere ngwa ahụ na ụyọkọ mmepụta yana ngwa ndị ọzọ. Iji mee nke a, ịkwesịrị ịkenye ihe onwunwe maka akpa ahụ ma jide n'aka na ha zuru ezu iji mee ka ngwa ahụ na-arụ ọrụ, na ngwa ndị ọzọ na-agba ọsọ agaghị enwe nsogbu.

otu Kubernetes aaS sitere na Mail.ru tụgharịrị asụsụ edemede gbasara akụrụngwa akpa (CPU & MEM), arịrịọ na oke akụrụngwa. Ị ga-amụta uru nke ntọala ndị a yana ihe ga-eme ma ọ bụrụ na ịtọghị ha.

Akụrụngwa kọmputa

Anyị nwere ụdị akụrụngwa abụọ nwere nkeji ndị a:

  • Ụlọ ọrụ nhazi Central (CPU) - cores;
  • Ebe nchekwa (MEM) - bytes.

A kọwapụtara akụrụngwa maka akpa ọ bụla. Na faịlụ Pod YAML na-esote, ị ga-ahụ ngalaba akụrụngwa nke nwere akụrụngwa achọrọ yana oke:

  • Arịrịọ Pod Resources = nchikota akụrụngwa a rịọrọ nke arịa niile;
  • Oke akụrụngwa akụrụngwa = Nchikota oke oke akụrụngwa Pod niile.

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

Ọmụmaatụ nke arịrịọ na oke ego

ubi resources.requested site na nkọwapụta Pod bụ otu n'ime ihe ndị a na-eji achọta oghere achọrọ. Ị nwere ike ịhazigharị Pod maka ya. Kedu otu ị ga-esi chọta ọnụ ọnụ kwesịrị ekwesị?

Kubernetes nwere ọtụtụ ihe, gụnyere nnukwu ọnụ ma ọ bụ nnukwu ọnụ (Kubernetes Control Plane). Ọnụ ụzọ nna ukwu nwere ọtụtụ usoro: kube-apiserver, kube-controller-manager na kube-scheduler.

Usoro kube-nhazi oge bụ ọrụ maka nyochaa pọd ndị emepụtara ọhụrụ yana ịchọta ọnụ ọnụ ndị ọrụ nwere ike dabara na arịrịọ pọd niile, gụnyere ọnụọgụ akụrụngwa a rịọrọ. A na-ahọrọ ndepụta ọnụ ọnụ nke kube-scheduler chọtara. A na-ahazi pọd ahụ n'ọnụ ọnụ nwere akara kachasị elu.

Otu esi enweta akụrụngwa Kubernetes PodEbee ka a ga-etinye pọd na-acha odo odo?

Na foto a, ị nwere ike ịhụ na kube-scheduler kwesịrị ịhazi Pod ọhụrụ odo odo. Ụyọkọ Kubernetes nwere ọnụ abụọ: A na B. Dị ka ị na-ahụ, kube-scheduler enweghị ike ịhazi Pod na ọnụ A - ihe dịnụ (anaghị arịọ) adabaghị na arịrịọ nke Pod-acha odo odo. Ya mere, 1 GB nke ebe nchekwa chọrọ site na Pod-acha odo odo agaghị adaba na ọnụ A, ebe ebe nchekwa dị bụ 0,5 GB. Mana ọnụ B nwere akụrụngwa zuru oke. N'ihi ya, kube-scheduler na-ekpebi na ebe ebe Pod na-acha odo odo bụ ọnụ B.

Ugbu a, anyị maara otú akụrụngwa ndị a rịọrọ si emetụta nhọrọ nke ọnụ iji mee Pod. Ma gịnị bụ mmetụta nke akụ ndị dị n'akụkụ?

Oke akụrụngwa bụ oke nke CPU/MEM enweghị ike ịgafe. Agbanyeghị, akụrụngwa CPU na-agbanwe agbanwe, yabụ arịa ndị ruru oke CPU ha agaghị eme ka Pod pụọ. Kama, CPU throttling ga-amalite. Ọ bụrụ na eruru oke ojiji MEM, a ga-akwụsị akpa ahụ n'ihi OOM-Killer wee malitegharịa ma ọ bụrụ na ntọala RestartPolicy kwadoro ya.

Arịrịọ rịọrọ na oke akụrụngwa n'uju

Otu esi enweta akụrụngwa Kubernetes PodNkwukọrịta akụrụngwa n'etiti Docker na Kubernetes

Ụzọ kacha mma isi kọwaa ka arịrịọ akụrụngwa na oke akụrụngwa si arụ ọrụ bụ iwebata mmekọrịta dị n'etiti Kubernetes na Docker. Na onyonyo dị n'elu ị nwere ike ịhụ ka ubi Kubernetes na ọkọlọtọ mmalite Docker si metụta.

Ebe nchekwa: arịrịọ na mmachi

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

Dịka e kwuru n'elu, a na-atụ ebe nchekwa na bytes. Dabere na Kubernetes akwụkwọ, anyị nwere ike dee ebe nchekwa dị ka nọmba. Ọ na-abụkarị ọnụọgụ, dịka ọmụmaatụ 2678 - ya bụ, 2678 bytes. Ị nwekwara ike iji suffixes G и Gi, isi ihe bụ icheta na ha abụghị otu. Nke mbụ bụ iri abụọ na nke abụọ bụ ọnụọgụ abụọ. Dịka ọmụmaatụ a kpọtụrụ aha na akwụkwọ k8s: 128974848, 129e6, 129M, 123Mi - ha fọrọ nke nta ka ha nhata.

Nhọrọ Kubernetes limits.memory dabara ọkọlọtọ --memory sitere na Docker. N'ihe banyere request.memory Enweghị akụ maka Docker n'ihi na Docker anaghị eji mpaghara a. Ị nwere ike ịjụ, nke a ọ dị mkpa? Ee mkpa. Dịka m kwuru na mbụ, ubi ahụ metụtara Kubernetes. Dabere na ozi sitere na ya, kube-scheduler na-ekpebi nke ọnụ ka ọ ga-ahazi Pod.

Kedu ihe ga - eme ma ọ bụrụ na ịtọọ ebe nchekwa ezughị oke maka arịrịọ?

Ọ bụrụ na akpa ahụ erutela oke ebe nchekwa achọrọ, mgbe ahụ, a na-etinye Pod n'ime otu Pods na-akwụsị mgbe enweghị ebe nchekwa zuru oke na ọnụ.

Kedu ihe ga - eme ma ọ bụrụ na ịtọọ oke ebe nchekwa dị ala?

Ọ bụrụ na akpa ahụ gafere oke ebe nchekwa, a ga-akwụsị ya n'ihi OOM-Egburu. Ọ ga-amalitegharị ma ọ bụrụ na ọ ga-ekwe omume dabere na RestartPolicy ebe uru ndabara dị Always.

Kedu ihe ga - eme ma ọ bụrụ na ị kọwaghị ebe nchekwa achọrọ?

Kubernetes ga-ewere oke oke ma debe ya ka uru ndabara.

Kedu ihe nwere ike ime ma ọ bụrụ na ị kọwaghị oke ebe nchekwa?

Akpa ahụ enweghị ihe mgbochi, ọ nwere ike iji ebe nchekwa dị ka ọ chọrọ. Ọ bụrụ na ọ malite iji ebe nchekwa niile dị na oghere ahụ, OOM ga-egbu ya. A ga-amalitegharị akpa ahụ ma ọ bụrụ na ọ ga-ekwe omume dabere na RestartPolicy.

Kedu ihe ga - eme ma ọ bụrụ na ị kọwaghị oke ebe nchekwa?

Nke a bụ ọnọdụ kachasị njọ: onye nhazi oge amaghị ego ole akpa ahụ chọrọ, nke a nwere ike ịkpata nsogbu siri ike na ọnụ. N'okwu a, ọ ga-adị mma ịnwe oke ndabara na oghere aha (nke LimitRange setịpụrụ). Enweghị oke ndabara - Pod enweghị oke, ọ nwere ike iji ebe nchekwa dị ka ọ chọrọ.

Ọ bụrụ na ebe nchekwa a rịọrọ karịrị ọnụ ọnụ nwere ike inye, agaghị ahazi Pod ahụ. Ọ dị mkpa icheta nke ahụ Requests.memory - ọ bụghị nke kacha nta uru. Nke a bụ nkọwa nke oke ebe nchekwa zuru oke iji mee ka akpa ahụ na-aga n'ihu.

A na-atụkarị aro ka ịtọ otu uru maka ya request.memory и limit.memory. Nke a na-achọpụta na Kubernetes agaghị ahazi Pod na ọnụ nke nwere ebe nchekwa zuru ezu iji mee Pod ahụ mana ọ gaghị ezuru iji mee ya. Buru n'uche: naanị atụmatụ Kubernetes Pod na-eburu n'uche requests.memoryna limits.memory adịghị n'ime akaụntụ.

CPU: arịrịọ na oke

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

Na a CPU ihe niile bụ ntakịrị mgbagwoju anya. Ịlaghachi na foto nke mmekọrịta dị n'etiti Kubernetes na Docker, ị nwere ike ịhụ nke ahụ request.cpu kwekọrọ --cpu-shares, ebe limit.cpu dabara ọkọlọtọ cpus na Docker.

A na-amụba CPU nke Kubernetes rịọrọ site na 1024, oke nke okirikiri CPU. Ọ bụrụ na ịchọrọ ịrịọ 1 isi zuru oke, ị ga-agbakwunye cpu: 1dị ka egosiri n'elu.

Ịrịọ kernel zuru ezu (oke = 1024) apụtaghị na akpa gị ga-enweta ya. Ọ bụrụ na igwe nnabata gị nwere naanị otu isi ma ị na-agba ọsọ karịa otu akpa, mgbe ahụ arịa niile ga-ekekọrịta CPU dị n'etiti ha. Kedu ka nke a si eme? Ka anyị lee foto a.

Otu esi enweta akụrụngwa Kubernetes Pod
Arịrịọ CPU - Sistemụ isi otu

Ka anyị were ya na ị nwere otu-isi usoro nnabata na-agba arịa. Mama (Kubernetes) mere achịcha (CPU) ma chọọ ikewa ya n'etiti ụmụaka (akpa). Ụmụaka atọ chọrọ otu achịcha dum (ọnụego = 1024), nwatakịrị ọzọ chọrọ ọkara achịcha (512). Mama chọrọ ịdị mma ma na-eme ngụkọta dị mfe.

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

Dabere na ngụkọta oge, ụmụaka atọ ga-enweta 28% nke isi, ọ bụghịkwa isi ya dum. Nwa nke anọ ga-enweta 14% nke kernel zuru ezu, ọ bụghị ọkara. Ma ihe ga-adị iche ma ọ bụrụ na ị nwere multi-isi usoro.

Otu esi enweta akụrụngwa Kubernetes Pod
Arịrịọ CPU - Multi-Core (4) Sistemu

N'ihe oyiyi dị n'elu, ị nwere ike ịhụ na ụmụaka atọ chọrọ otu achịcha zuru ezu, otu onye chọrọ ọkara. Ebe ọ bụ na mama m mere achịcha anọ, ụmụ ya ọ bụla ga-enweta ọtụtụ ihe ha chọrọ. N'ime sistemụ ọtụtụ isi, a na-ekesa akụrụngwa processor n'ofe cores niile dị. Ọ bụrụ na akpa nwere oke na ihe na-erughị otu isi CPU zuru oke, ọ ka nwere ike iji ya na 100%.

A na-eme ka mgbako ndị a dị n'elu dị mfe iji ghọta ka esi ekesa CPU n'etiti arịa. N'ezie, e wezụga arịa n'onwe ha, e nwere usoro ndị ọzọ na-ejikwa ihe CPU. Mgbe usoro n'ime otu akpa na-abaghị uru, ndị ọzọ nwere ike iji akụ ya. CPU: "200m" kwekọrọ CPU: 0,2, nke pụtara ihe dịka 20% nke otu isi.

Ugbu a, ka anyị kwuo banyere ya limit.cpu. A na-amụba CPU nke Kubernetes kpachiri site na 100. Ihe si na ya pụta bụ oge ole akpa ahụ nwere ike iji 100 µs ọ bụla (cpu-period).

limit.cpu dabara ọkọlọtọ Docker --cpus. Nke a bụ ngwakọta ọhụrụ nke ochie --cpu-period и --cpu-quota. Site na ịtọ ya, anyị na-egosi ego ole CPU dị na akpa nwere ike iji karịa tupu ịmalite ịmalite:

  • cpus - ngwakọta cpu-period и cpu-quota. cpus = 1.5 dakọtara na ịtọ ntọala cpu-period = 100000 и cpu-quota = 150000;
  • CPU-oge - oge Onye nhazi CPU CFS, ndabara 100 microsekọnd;
  • cpu-oke - ọnụọgụ microsekọnd n'ime cpu-period, nke a na-ejikọta ya na akpa.

Kedu ihe ga - eme ma ọ bụrụ na ị wụnye CPU achọrọ ezughi oke?

Ọ bụrụ na akpa ahụ chọrọ karịa ka etinyere ya, ọ ga-ezu ohi CPU site na usoro ndị ọzọ.

Kedu ihe ga - eme ma ọ bụrụ na ịtọọ oke CPU dị ala?

Ebe ọ bụ na akụrụngwa CPU nwere ike ịhazigharị, throttling ga-agbanye.

Kedu ihe ga - eme ma ọ bụrụ na ị kọwaghị arịrịọ CPU?

Dị ka ebe nchekwa, uru arịrịọ ruru oke.

Kedu ihe ga - eme ma ọ bụrụ na ị kọwaghị oke CPU?

Akpa ahụ ga-eji CPU dị ka ọ chọrọ. Ọ bụrụ na akọwapụtara amụma CPU (LimitRange) ndabara na oghere aha, mgbe ahụ a na-ejikwa oke a maka akpa.

Kedu ihe ga - eme ma ọ bụrụ na ị kọwapụtaghị arịrịọ ma ọ bụ oke CPU?

Dị ka ọ dị na ebe nchekwa, nke a bụ ọnọdụ kachasị njọ. Onye nhazi oge amaghị ego ole akpa gị chọrọ, nke a nwere ike ịkpata nnukwu nsogbu na ọnụ ọnụ. Iji zere nke a, ịkwesịrị ịtọ oke ndabara maka oghere aha (LimitRange).

Cheta: ọ bụrụ na ị rịọ karịa CPU karịa ọnụ ọnụ nwere ike inye, a gaghị ahazi Pod ahụ. Requests.cpu - ọ bụghị uru kacha nta, mana uru zuru oke iji malite Pod ma rụọ ọrụ na-enweghị ọdịda. Ọ bụrụ na ngwa ahụ anaghị arụ ọrụ mgbagwoju anya, nhọrọ kacha mma bụ ịwụnye request.cpu <= 1 wee malite ọtụtụ oyiri dị ka achọrọ.

Ego kacha mma nke akụrụngwa ma ọ bụ oke akụrụngwa achọrọ

Anyị mụtara banyere mmachi nke akụrụngwa kọmputa. Ugbu a ọ bụ oge ịza ajụjụ a: "Ego ole akụrụngwa ka Pod m chọrọ iji mee ngwa ahụ n'enweghị nsogbu ọ bụla? Gịnị bụ ezigbo ego?

N'ụzọ dị mwute, enweghị azịza doro anya nye ajụjụ ndị a. Ọ bụrụ na ịmaghị ka ngwa gị si arụ ọrụ ma ọ bụ ole CPU ma ọ bụ ebe nchekwa ọ chọrọ, nhọrọ kacha mma bụ inye ngwa ahụ ọtụtụ ebe nchekwa na CPU wee mee ule arụmọrụ.

Na mgbakwunye na ule arụmọrụ, nyochaa omume ngwa na nlekota oru otu izu. Ọ bụrụ na eserese ndị a na-egosi na ngwa gị na-eri ihe ole na ole karịa ka ị rịọrọ, ị nwere ike ibelata ego CPU ma ọ bụ ebe nchekwa achọrọ.

Dịka ọmụmaatụ, hụ nke a Grafana dashboard. Ọ na-egosiputa ọdịiche dị n'etiti akụrụngwa achọrọ ma ọ bụ oke akụrụngwa yana ojiji akụrụngwa ugbu a.

nkwubi

Ịrịọ na ịmachi akụrụngwa na-enyere aka mee ka ụyọkọ Kubernetes gị dị mma. Nhazi oke kwesịrị ekwesị na-ebelata ọnụ ahịa ma mee ka ngwa na-arụ ọrụ oge niile.

Na nkenke, enwere ihe ole na ole ị ga-eburu n'uche:

  1. Akụrụngwa achọrọ bụ nhazi nke a na-eburu n'uche n'oge mmalite (mgbe Kubernetes na-ezube ịkwado ngwa ahụ). N'ụzọ dị iche, ịmachi akụrụngwa dị mkpa n'oge ọsọ ọsọ-mgbe ngwa na-agba ọsọ na ọnụ.
  2. E jiri ya tụnyere ebe nchekwa, CPU bụ akụrụngwa ahaziri. Ọ bụrụ na enweghị CPU zuru oke, Pod gị agaghị emechi yana usoro ịgbanye ga-agbanye.
  3. Akụrụngwa achọrọ na oke akụrụngwa abụghị opekempe yana ụkpụrụ kachasị! Site na ịkọwapụta akụrụngwa achọrọ, ị ga-ahụ na ngwa ahụ ga-arụ ọrụ n'enweghị nsogbu.
  4. Omume dị mma bụ ịtọ arịrịọ ebe nchekwa nhata na oke ebe nchekwa.
  5. Ọ dị mma arịọrọ CPU <=1, ma ọ bụrụ na ngwa anaghị eme mgbagwoju mgbako.
  6. Ọ bụrụ na ị rịọ maka akụrụngwa karịa nke dị na ọnụ ọnụ, a gaghị ahazi Pod ahụ n'ọnụ ọnụ ahụ.
  7. Iji chọpụta oke akụrụngwa/oke akụrụngwa achọrọ, jiri nnwale na nlebanya ibu.

Enwere m olileanya na akụkọ a ga-enyere gị aka ịghọta isi echiche nke mmachi akụrụngwa. Ị ga-enwe ike itinye ihe ọmụma a n'ọrụ gị.

Jisie!

Kedu ihe ọzọ ị ga-agụ:

  1. Nleba anya SRE: Oghere aha na nhazi igwe.
  2. Ngwa 90+ bara uru maka Kubernetes: ntinye, njikwa, nlekota oru, nchekwa na ndị ọzọ.
  3. Ọwa anyị gburugburu Kubernetes na Telegram.

isi: www.habr.com

Tinye a comment