Ahoana ny fidirana amin'ny loharanon-karena Kubernetes Pod

Ahoana ny fidirana amin'ny loharanon-karena Kubernetes PodNy valisoa nataon'i Tohad

Rehefa manomboka amin'ny Kubernetes dia mahazatra ny manadino ny fametrahana loharanon-karena. Amin'izao fotoana izao dia ampy ny miantoka fa miasa ny sary Docker ary azo apetraka amin'ny cluster Kubernetes.

Saingy taty aoriana dia mila apetraka ao anaty cluster famokarana miaraka amin'ireo fampiharana hafa ny fampiharana. Mba hanaovana izany dia mila mizara loharanon-karena ho an'ny kaontenera ianao ary ataovy azo antoka fa ampy ny fampiharana azy ireo, ary tsy hisy olana ny fampiharana hafa mandeha.

ekipa Kubernetes aaS avy amin'ny Mail.ru nandika lahatsoratra momba ny loharanon-karena (CPU & MEM), fangatahana ary famerana ny loharano. Hianatra ny tombotsoan'ireo fanovana ireo ianao ary inona no mitranga raha tsy mametraka azy ireo ianao.

Resource computing

Manana karazany roa izahay miaraka amin'ireto singa manaraka ireto:

  • Central Processing Unit (CPU) - cores;
  • Memory (MEM) - bytes.

Ny loharanon-karena dia voafaritra ho an'ny container tsirairay. Amin'ity rakitra Pod YAML manaraka ity dia hahita sehatra loharano misy ireo loharano nangatahana sy mametra ianao:

  • Resource Pod nangatahana = fitambaran'ny loharanon-karena nangatahana amin'ny kaontenera rehetra;
  • Famerana ny loharanon-karena Pod = Ny fitambaran'ny fetran'ny loharanon-karena Pod rehetra.

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

Ohatra amin'ny loharanon-karena nangatahana sy voafetra

saha resources.requested avy amin'ny famaritana Pod dia iray amin'ireo singa ampiasaina hahitana ny node irina. Azonao atao sahady ny manomana ny fametrahana Pod ho azy. Ahoana no ahitanao node mety?

Ny Kubernetes dia misy singa maromaro, anisan'izany ny node master na node master (Kubernetes Control Plane). Ny node master dia manana dingana maromaro: kube-apiserver, kube-controller-manager ary kube-scheduler.

Ny fizotry ny kube-scheduler dia tompon'andraikitra amin'ny famerenana ny pods vao noforonina sy ny fitadiavana node mpiasa mety mifanaraka amin'ny fangatahana pod rehetra, ao anatin'izany ny isan'ny loharano nangatahana. Ny lisitry ny nodes hitan'ny kube-scheduler dia laharana. Ny pod dia voalahatra amin'ny node manana naoty ambony indrindra.

Ahoana ny fidirana amin'ny loharanon-karena Kubernetes PodAiza no hametrahana ny Pod volomparasy?

Eo amin'ny sary dia hitanao fa tokony handamina Pod volomparasy vaovao ny kube-scheduler. Ny kluster Kubernetes dia misy node roa: A sy B. Araka ny hitanao dia tsy afaka mandamina Pod amin'ny node A ny kube-scheduler - tsy mifanaraka amin'ny fangatahan'ny Pod volomparasy ny loharano misy (tsy angatahina). Noho izany, ny fahatsiarovana 1 GB nangatahan'ny Pod volomparasy dia tsy hifanaraka amin'ny node A, satria ny fahatsiarovana misy dia 0,5 GB. Saingy manana loharano ampy ny node B. Vokatr'izany dia nanapa-kevitra ny kube-scheduler fa ny toerana halehan'ny Pod volomparasy dia ny node B.

Fantatsika izao ny fiantraikan'ny loharano nangatahana amin'ny fisafidianana ny node hampandehanana ny Pod. Inona anefa no fiantraikan'ny harena an-kibon'ny tany?

Ny fetran'ny loharanon-karena dia fetra tsy azon'ny CPU/MEM hiampitana. Na izany aza, ny loharanon'ny CPU dia miovaova, ka ny kaontenera mahatratra ny fetran'ny CPU dia tsy hahatonga ny Pod hiala. Raha ny tokony ho izy, dia hanomboka ny fampihenana ny CPU. Raha tratra ny fetran'ny fampiasana MEM, dia hajanona ny kaontenera noho ny OOM-Killer ary hatomboka raha avela amin'ny toe-javatra RestartPolicy.

Ny loharanon-karena nangatahana sy ambony indrindra amin'ny antsipiriany

Ahoana ny fidirana amin'ny loharanon-karena Kubernetes PodFifandraisana loharanon-karena eo amin'i Docker sy Kubernetes

Ny fomba tsara indrindra hanazavana ny fomba fiasan'ny fangatahana loharanon-karena sy ny fetran'ny loharanon-karena dia ny fampidirana ny fifandraisana misy eo amin'i Kubernetes sy Docker. Ao amin'ny sary etsy ambony dia azonao jerena ny ifandraisan'ny saha Kubernetes sy ny saina fanombohana Docker.

Fahatsiarovana: fangatahana sy fetra

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

Araka ny voalaza etsy ambony, ny fahatsiarovana dia refesina amin'ny bytes. Miankina amin'ny Documentation Kubernetes, azontsika atao ny mamaritra ny fahatsiarovana ho isa. Matetika izy io dia integer, ohatra 2678 - izany hoe 2678 bytes. Azonao atao koa ny mampiasa suffixes G ΠΈ Gi, ny zava-dehibe dia ny mitadidy fa tsy mitovy izy ireo. Ny voalohany dia decimal ary ny faharoa dia binary. Tahaka ny ohatra voalaza ao amin'ny antontan-taratasy k8s: 128974848, 129e6, 129M, 123Mi - saika mitovy izy ireo.

Safidy Kubernetes limits.memory mifanaraka amin'ny saina --memory avy amin'ny Docker. Raha ohatra ka request.memory Tsy misy zana-tsipìka ho an'i Docker satria tsy mampiasa an'io sehatra io i Docker. Mety hanontany ianao hoe, ilaina ve izany? Eny mila. Araka ny nolazaiko teo aloha dia zava-dehibe ho an'ny Kubernetes ny saha. Miorina amin'ny fampahalalana avy aminy, ny kube-scheduler dia manapa-kevitra ny amin'ny node handaminana ny Pod.

Inona no mitranga raha mametraka fitadidiana tsy ampy ho an'ny fangatahana ianao?

Raha nahatratra ny fetran'ny fitadidiana nangatahana ilay kaontenera, dia apetraka ao anaty vondrona Pods ny Pod izay mijanona rehefa tsy ampy ny fitadidiana ao amin'ny node.

Inona no mitranga raha apetrakao ambany loatra ny fetra fitadidiana?

Raha mihoatra ny fetran'ny fitadidiana ilay kaontenera, dia ho tapaka izany noho ny OOM-Killed. Ary hanomboka indray raha azo atao mifototra amin'ny RestartPolicy izay misy ny sanda default Always.

Inona no mitranga raha tsy mamaritra ny fahatsiarovana nangatahana ianao?

Ny Kubernetes dia haka ny sandan'ny fetra ary hametraka izany ho sanda mahazatra.

Inona no mety hitranga raha tsy mamaritra fetra fitadidiana ianao?

Tsy misy fameperana ny kaontenera; afaka mampiasa fitadidiana betsaka araka izay tiany izy. Raha manomboka mampiasa ny fahatsiarovana rehetra misy amin'ny node izy, dia hamono azy ny OOM. Haverina averina indray ilay kaontenera raha azo atao mifototra amin'ny RestartPolicy.

Inona no mitranga raha tsy mamaritra ny fetra fitadidiana ianao?

Ity no tranga ratsy indrindra: tsy fantatry ny mpandrindra ny habetsaky ny loharano ilain'ny fitoeran-javatra, ary mety hiteraka olana lehibe amin'ny node izany. Amin'ity tranga ity dia tsara ny manana fetran'ny default amin'ny namespace (napetraky ny LimitRange). Tsy misy fetran'ny default - tsy misy fetra ny Pod, afaka mampiasa fitadidiana betsaka araka izay tiany.

Raha mihoatra noho izay azon'ny node omena ny fahatsiarovana nangatahana dia tsy ho voalahatra ny Pod. Zava-dehibe ny mitadidy izany Requests.memory - tsy ny sanda ambany indrindra. Ity dia fanoritsoritana ny habetsaky ny fitadidiana ampy hitazonana ny kaontenera mandeha tsy tapaka.

Matetika no soso-kevitra ny hametraka sanda mitovy amin'ny request.memory ΠΈ limit.memory. Izany dia miantoka fa ny Kubernetes dia tsy hanomana Pod amin'ny node izay manana fahatsiarovana ampy hampandehanana ny Pod fa tsy ampy hampandehanana azy. Ataovy ao an-tsaina: Ny drafitry ny Kubernetes Pod dia tsy miraharaha fotsiny requests.memoryary limits.memory tsy miraharaha.

CPU: fangatahana sy fetra

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

Miaraka amin'ny CPU dia sarotra kokoa ny zava-drehetra. Raha miverina amin'ny sarin'ny fifandraisan'i Kubernetes sy Docker ianao dia hitanao izany request.cpu mifanandrify amin'ny --cpu-shares, kosa limit.cpu mifanaraka amin'ny saina cpus ao amin'ny Docker.

Ny CPU izay angatahan'i Kubernetes dia ampitomboina amin'ny 1024, ny ampahany amin'ny tsingerin'ny CPU. Raha te hangataka core 1 feno ianao dia tsy maintsy ampiana cpu: 1araka ny aseho etsy ambony.

Ny fangatahana kernel feno (proportion = 1024) dia tsy midika fa hahazo izany ny fitoeranao. Raha manana fototra iray ihany ny milina mpampiantrano anao ary mitondra kaontenera mihoatra ny iray ianao, dia tsy maintsy mizara ny CPU misy eo aminy ny kaontenera rehetra. Ahoana no mitranga izany? Andeha hojerentsika ny sary.

Ahoana ny fidirana amin'ny loharanon-karena Kubernetes Pod
Fangatahana CPU - Rafitra fototra tokana

Alao sary an-tsaina fa manana rafitra fampiantranoana tokana tokana mitantana kaontenera ianao. Nanao mofo (CPU) i Neny (Kubernetes) ary te hizara izany ho an'ny ankizy (tavoahangy). Ankizy telo no maniry mofo iray manontolo (ampahany = 1024), ankizy iray hafa mila tapa-katsaka (512). I Neny dia te ho marina ary manao kajikajy tsotra.

# Бколько ΠΏΠΈΡ€ΠΎΠ³ΠΎΠ² хотят Π΄Π΅Ρ‚ΠΈ?
# 3 Ρ€Π΅Π±Π΅Π½ΠΊΠ° хотят ΠΏΠΎ Ρ†Π΅Π»ΠΎΠΌΡƒ ΠΏΠΈΡ€ΠΎΠ³Ρƒ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΠΏΠΈΡ€ΠΎΠ³Π°
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ получаСтся Ρ‚Π°ΠΊ:
3 (Ρ€Π΅Π±Π΅Π½ΠΊΠ°/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°) * 1 (Ρ†Π΅Π»Ρ‹ΠΉ ΠΏΠΈΡ€ΠΎΠ³/ΠΏΠΎΠ»Π½ΠΎΠ΅ ядро) + 1 (Ρ€Π΅Π±Π΅Π½ΠΎΠΊ/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€) * 0.5 (ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΠΈΡ€ΠΎΠ³Π°/ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ядра)
# Бколько ΠΏΠΈΡ€ΠΎΠ³ΠΎΠ² испСчСно?
availableCakesNumber = 1
# Бколько ΠΏΠΈΡ€ΠΎΠ³Π° (максимально) Π΄Π΅Ρ‚ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ?
newMaxRequest = 1 / 3.5 =~ 28%

Raha ny kajikajy dia zaza telo no hahazo ny 28%-n’ny koba fa tsy ny koba manontolo. Ny zaza fahefatra dia hahazo ny 14% amin'ny kernel manontolo, fa tsy ny antsasany. Saingy ho hafa ny zavatra raha manana rafitra multi-core ianao.

Ahoana ny fidirana amin'ny loharanon-karena Kubernetes Pod
Fangatahana CPU - Rafitra Multi-Core (4).

Eo amin'ny sary etsy ambony dia hitanao fa ny ankizy telo dia maniry ny mofo iray manontolo, ary ny iray maniry ny antsasany. Koa satria nanao mofo efatra i Neny, dia samy hahazo izay tiany ny zanany tsirairay avy. Ao amin'ny rafitra multi-core, ny loharanon'ny processeur dia zaraina amin'ny core processeur rehetra misy. Raha voafetra ho latsaky ny core CPU iray feno ny kaontenera iray, dia mbola azony ampiasaina amin'ny 100%.

Ny kajikajy etsy ambony dia nohamafisina mba hahatakarana ny fomba fizarana CPU amin'ny kaontenera. Mazava ho azy, ankoatry ny kaontenera mihitsy, dia misy dingana hafa izay mampiasa loharano CPU ihany koa. Rehefa tsy miasa ny dingana ao anaty fitoeran-javatra iray dia afaka mampiasa ny loharanony ny hafa. CPU: "200m" mifanandrify amin'ny CPU: 0,2, izay midika hoe 20% eo ho eo amin'ny fototra iray.

Andeha isika hiresaka momba izany limit.cpu. Ny CPU izay feran'i Kubernetes dia ampitomboina amin'ny 100. Ny vokatr'izany dia ny habetsahan'ny fotoana azon'ny container ampiasaina isaky ny 100 Β΅s (cpu-period).

limit.cpu mifanaraka amin'ny saina Docker --cpus. Ity dia fitambarana vaovao amin'ny taloha --cpu-period ΠΈ --cpu-quota. Amin'ny alΓ lan'ny fametrahana azy dia manondro hoe firy ny loharanon-karena CPU azo ampiasaina amin'ny kaontenera alohan'ny hanombohan'ny throttling:

  • cpus - fitambarana cpu-period ΠΈ cpu-quota. cpus = 1.5 mitovy amin'ny fametrahana cpu-period = 100000 ΠΈ cpu-quota = 150000;
  • vanim-potoana CPU - fe-potoana CPU CFS scheduler, 100 microseconds default;
  • cpu-quota - isan'ny microseconds ao anatiny cpu-period, izay voafehin'ny fitoeran-javatra.

Inona no mitranga raha mametraka CPU tsy ampy nangatahana ianao?

Raha mila mihoatra noho ny napetrany ny fitoeran-javatra, dia hangalatra ny CPU amin'ny dingana hafa.

Inona no mitranga raha apetrakao ambany loatra ny fetran'ny CPU?

Koa satria azo amboarina ny loharanon'ny CPU, dia handeha ny throttling.

Inona no mitranga raha tsy mamaritra ny fangatahana CPU ianao?

Tahaka ny amin'ny fitadidiana, ny sandan'ny fangatahana dia mitovy amin'ny fetra.

Inona no mitranga raha tsy mamaritra fetra CPU ianao?

Ny kaontenera dia hampiasa CPU betsaka araka izay ilainy. Raha voafaritra ao amin'ny namespace ny politikan'ny CPU default (LimitRange), dia io fetra io ihany koa no ampiasaina ho an'ny container.

Inona no mitranga raha tsy mamaritra na fangatahana na fetra CPU ianao?

Toy ny amin'ny fitadidiana, ity no tranga ratsy indrindra. Tsy fantatry ny mpandrindra ny isan'ny loharanon-karena ilain'ny fitoeranao, ary mety hiteraka olana lehibe amin'ny node izany. Mba hisorohana an'izany dia mila mametraka fetran'ny toerana misy anarana ianao (LimitRange).

Tsarovy: raha mangataka CPU mihoatra noho izay azon'ny node ianao dia tsy ho voalahatra ny Pod. Requests.cpu - tsy ny sanda kely indrindra, fa ny sanda ampy hanombohana ny Pod sy hiasa tsy misy tsy fahombiazana. Raha toa ka tsy manao kajy sarotra ny fampiharana, ny safidy tsara indrindra dia ny fametrahana request.cpu <= 1 ary manokatra kopia maro araka izay ilaina.

Ny habetsahan'ny loharano nangatahana na fetran'ny loharano mety indrindra

Nianatra momba ny famerana ny loharanon-karena informatika izahay. Fotoana izao hamaliana ny fanontaniana hoe: "Firy ny loharano ilain'ny Pod-ko mba hampandehanana ny fampiharana tsy misy olana? Inona ny vola idealy?

Indrisy anefa fa tsy misy valiny mazava amin'ireo fanontaniana ireo. Raha tsy fantatrao ny fomba fiasan'ny rindranasao na ny habetsaky ny CPU na ny fitadidiana ilainy, ny safidy tsara indrindra dia ny manome fitadidiana sy CPU be dia be ny fampiharana ary avy eo manao andrana fampisehoana.

Ho fanampin'ny fitsapana fampisehoana, araho ny fihetsiky ny fampiharana amin'ny fanaraha-maso mandritra ny herinandro. Raha asehon'ny grafika fa mandany loharanon-karena vitsy kokoa noho ny nangatahinao ny fampiharanao, dia azonao atao ny mampihena ny habetsaky ny CPU na ny fitadidiana nangatahana.

Jereo ohatra ity Dashboard Grafana. Mampiseho ny fahasamihafan'ny loharano nangatahana na fetran'ny loharanon-karena sy ny fampiasana loharano ankehitriny.

famaranana

Ny fangatahana sy ny famerana ny loharanon-karena dia manampy amin'ny fitazonana ny cluster Kubernetes ho salama. Ny fanefena fetra mety dia manamaivana ny fandaniana ary mitazona ny fampiharana mandeha amin'ny fotoana rehetra.

Raha fintinina dia misy zavatra vitsivitsy tokony hotadidina:

  1. Ny loharanom-baovao nangatahana dia fanitsiana izay raisina amin'ny fotoana fanombohana (rehefa mikasa ny hampiantrano ny fampiharana i Kubernetes). Mifanohitra amin'izany kosa, zava-dehibe ny famerana ny loharanon-karena amin'ny fotoana fandehanana β€” rehefa efa mandeha eo amin'ny node ny fampiharana.
  2. Raha ampitahaina amin'ny fitadidiana, ny CPU dia loharano voafehy. Raha tsy ampy ny CPU, dia tsy hikatona ny Pod-nao ary hirehitra ny mekanika throttling.
  3. Ny loharanon-karena nangatahana sy ny fetran'ny loharanon-karena dia tsy sanda ambany indrindra sy ambony indrindra! Amin'ny famaritana ireo loharano nangatahana dia azonao antoka fa handeha tsy misy olana ny fampiharana.
  4. Ny fanao tsara dia ny mametraka ny fangatahana fitadidiana mitovy amin'ny fetra fitadidiana.
  5. Ok nangatahana ny fametrahana CPU <=1, raha tsy manao kajy sarotra ny fampiharana.
  6. Raha mangataka loharanon-karena bebe kokoa noho izay misy amin'ny node ianao, dia tsy ho voalahatra amin'io node io mihitsy ny Pod.
  7. Mba hamaritana ny habetsaky ny loharanon-karena nangatahana, ampiasao ny fitiliana sy ny fanaraha-maso ny entana.

Manantena aho fa ity lahatsoratra ity dia hanampy anao hahatakatra ny foto-kevitra fototra momba ny famerana ny loharanon-karena. Ary ho afaka hampihatra izany fahalalana izany amin'ny asanao ianao.

Mirary soa!

Inona koa no vakiana:

  1. SRE Observability: Namespaces and Metric Structure.
  2. 90+ Fitaovana mahasoa ho an'ny Kubernetes: Fametrahana, Fitantanana, Fanaraha-maso, Fiarovana ary maro hafa.
  3. Ny fantsonay Manodidina ny Kubernetes ao amin'ny Telegram.

Source: www.habr.com

Add a comment