Momwe mungapezere zothandizira za Kubernetes Pod

Momwe mungapezere zothandizira za Kubernetes PodMphotho yolembedwa ndi Tohad

Mukayamba ndi Kubernetes, ndizofala kuiwala za kukhazikitsa zida zotengera. Pakadali pano, ndikwanira kuwonetsetsa kuti chithunzi cha Docker chikugwira ntchito ndipo chitha kutumizidwa kugulu la Kubernetes.

Koma pambuyo pake ntchitoyo iyenera kutumizidwa mgulu lazopanga limodzi ndi mapulogalamu ena. Kuti muchite izi, muyenera kugawa zida za chidebecho ndikuwonetsetsa kuti zilipo zokwanira kuti pulogalamuyo igwire ntchito, komanso kuti mapulogalamu ena omwe akuyendetsa sangakumane ndi mavuto.

timu Kubernetes aaS kuchokera ku Mail.ru adamasulira nkhani yokhudza zotengera (CPU & MEM), zopempha ndi malire azinthu. Muphunzira zaubwino wa zokonda izi ndi zomwe zingachitike ngati simuziyika.

Zida zamakompyuta

Tili ndi mitundu iwiri yazinthu zomwe zili ndi mayunitsi otsatirawa:

  • Central processing unit (CPU) - cores;
  • Memory (MEM) - mabayiti.

Zothandizira zimayikidwa pachidebe chilichonse. Pafayilo yotsatira ya Pod YAML, muwona gawo lazinthu zomwe zili ndi zomwe mwapemphedwa komanso malire:

  • Pempho la Pod Resources = kuchuluka kwa zinthu zomwe zafunsidwa pazotengera zonse;
  • Pod Resource Limit = Chiwerengero cha malire onse a 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

Chitsanzo cha Zofunsidwa ndi Zochepa

m'munda resources.requested kuchokera ku mafotokozedwe Pod ndi chimodzi mwazinthu zomwe zimagwiritsidwa ntchito kupeza mfundo zomwe mukufuna. Mutha kukonzekera kale kutumiza kwa Pod kwa izo. Kodi node yoyenera mumaipeza bwanji?

Kubernetes imakhala ndi zigawo zingapo, kuphatikiza master node kapena master node (Kubernetes Control Plane). Master node ili ndi njira zingapo: kube-apiserver, kube-controller-manager ndi kube-scheduler.

Ndondomeko ya kube-scheduler ili ndi udindo wowunika ma pod omwe angopangidwa kumene ndikupeza malo ogwira ntchito omwe amagwirizana ndi zopempha zonse, kuphatikiza kuchuluka kwazinthu zomwe zafunsidwa. Mndandanda wamanode omwe adapezeka ndi kube-scheduler adayikidwa. Pod imakonzedwa pa node yokhala ndi zigoli zambiri.

Momwe mungapezere zothandizira za Kubernetes PodKodi Pod yofiirira iyikidwa kuti?

Pachithunzichi mutha kuwona kuti kube-scheduler akuyenera kukonza Pod yatsopano yofiirira. Gulu la Kubernetes lili ndi mfundo ziwiri: A ndi B. Monga mukuonera, kube-scheduler sangathe kukonza Pod pa node A - zomwe zilipo (zosafunsidwa) sizikugwirizana ndi zopempha za Pod yofiirira. Chifukwa chake, kukumbukira kwa 1 GB kofunsidwa ndi Pod yofiirira sikukwanira pa node A, popeza kukumbukira komwe kulipo ndi 0,5 GB. Koma node B ili ndi zothandizira zokwanira. Zotsatira zake, kube-scheduler aganiza kuti kopita kwa Purple Pod ndi node B.

Tsopano tikudziwa momwe zomwe zapemphedwa zimakhudzira kusankha kwa node kuyendetsa Pod. Koma zotsatira za zinthu zocheperako ndi zotani?

Malire azinthu ndi malire omwe CPU/MEM singadutse. Komabe, gwero la CPU ndi losinthika, kotero zotengera zomwe zimafikira malire awo a CPU sizingapangitse Pod kutuluka. M'malo mwake, CPU throttling idzayamba. Ngati malire ogwiritsira ntchito MEM afikira, chidebecho chidzayimitsidwa chifukwa cha OOM-Killer ndikuyambiranso ngati chiloledwa ndi RestartPolicy.

Anapempha ndi pazipita chuma mwatsatanetsatane

Momwe mungapezere zothandizira za Kubernetes PodKulumikizana kwazinthu pakati pa Docker ndi Kubernetes

Njira yabwino yofotokozera momwe zopempha zothandizira ndi malire azinthu zimagwirira ntchito ndikuyambitsa ubale pakati pa Kubernetes ndi Docker. Mu chithunzi pamwambapa mutha kuwona momwe minda ya Kubernetes ndi mbendera zoyambira za Docker zimayenderana.

Memory: pempho ndi malire

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

Monga tafotokozera pamwambapa, kukumbukira kumayesedwa ndi ma byte. Kutengera Kubernetes zolemba, tikhoza kufotokoza kukumbukira ngati nambala. Kawirikawiri ndi chiwerengero, mwachitsanzo 2678 - ndiko kuti, 2678 bytes. Mukhozanso kugwiritsa ntchito suffixes G ΠΈ Gi, chinthu chachikulu ndikukumbukira kuti sali ofanana. Choyamba ndi decimal ndipo chachiwiri ndi binary. Monga chitsanzo chotchulidwa muzolemba za k8s: 128974848, 129e6, 129M, 123Mi - iwo ali pafupifupi ofanana.

Kubernetes njira limits.memory zimagwirizana ndi mbendera --memory kuchokera ku Docker. Ngati request.memory Palibe muvi wa Docker chifukwa Docker sagwiritsa ntchito gawoli. Mutha kufunsa, kodi izi ndizofunikira? Inde kufunikira. Monga ndanena kale, gawoli likufunika kwa Kubernetes. Kutengera zomwe zachokera, kube-scheduler amasankha pa node yoti akonzere Pod.

Kodi chimachitika ndi chiyani ngati muyika kukumbukira kosakwanira pa pempho?

Ngati chidebecho chafika malire a kukumbukira kofunsidwa, ndiye Pod imayikidwa mu gulu la Pods lomwe limayima pamene palibe kukumbukira kokwanira mu node.

Kodi chimachitika ndi chiyani mukakhazikitsa malire okumbukira?

Ngati chidebecho chikudutsa malire a kukumbukira, chidzathetsedwa chifukwa cha OOM-Kuphedwa. Ndipo iyambiranso ngati nkotheka kutengera RestartPolicy pomwe mtengo wokhazikika uli Always.

Kodi chimachitika ndi chiyani ngati simunatchule zomwe mwapempha?

Kubernetes atenga mtengo wamalire ndikuwuyika ngati mtengo wokhazikika.

Kodi chingachitike ndi chiyani ngati simutchula malire a kukumbukira?

Chidebecho chilibe zoletsa; imatha kugwiritsa ntchito kukumbukira momwe ikufunira. Ngati ayamba kugwiritsa ntchito kukumbukira zonse zomwe zilipo za node, ndiye kuti OOM idzamupha. Chotengeracho chidzayambiranso ngati n'kotheka kutengera RestartPolicy.

Chimachitika ndi chiyani ngati simutchula malire a kukumbukira?

Izi ndizovuta kwambiri: wokonza mapulani sadziwa kuchuluka kwa zinthu zomwe chidebecho chimafuna, ndipo izi zitha kuyambitsa mavuto akulu pamfundoyi. Pamenepa, zingakhale bwino kukhala ndi malire osasintha pa malo a mayina (okhazikitsidwa ndi LimitRange). Palibe malire osakhazikika - Pod ilibe malire, imatha kugwiritsa ntchito kukumbukira momwe ikufuna.

Ngati kukumbukira kofunsidwa kuli kochulukirapo kuposa momwe node ingapereke, Pod sidzakonzedwa. Ndikofunika kukumbukira zimenezo Requests.memory - osati mtengo wocheperako. Uku ndikulongosola kuchuluka kwa kukumbukira kokwanira kuti chidebecho chiziyenda mosalekeza.

Nthawi zambiri tikulimbikitsidwa kukhazikitsa mtengo womwewo request.memory ΠΈ limit.memory. Izi zimatsimikizira kuti Kubernetes sadzakonza Pod pa mfundo yomwe ili ndi kukumbukira kokwanira kuyendetsa Pod koma osakwanira kuyendetsa. Kumbukirani: Kubernetes Pod kukonzekera kumangoganizira requests.memoryndi limits.memory sichiganizira.

CPU: pempho ndi malire

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

Ndi CPU zonse zimakhala zovuta kwambiri. Kubwerera ku chithunzi cha ubale pakati pa Kubernetes ndi Docker, mutha kuwona request.cpu zimayenderana --cpu-shares, pomwe limit.cpu zimagwirizana ndi mbendera cpus ku Docker.

CPU yomwe Kubernetes amapempha imachulukitsidwa ndi 1024, gawo la ma CPU ozungulira. Ngati mukufuna kupempha 1 maziko onse, muyenera kuwonjezera cpu: 1monga momwe tawonetsera pamwambapa.

Kupempha kernel yathunthu (gawo = 1024) sizikutanthauza kuti chidebe chanu chidzachilandira. Ngati makina anu osungira ali ndi core imodzi yokha ndipo mukuyendetsa chidebe chimodzi, ndiye kuti zotengera zonse ziyenera kugawana CPU yomwe ilipo pakati pawo. Kodi izi zimachitika bwanji? Tiyeni tione chithunzichi.

Momwe mungapezere zothandizira za Kubernetes Pod
Kufunsira kwa CPU - Single Core System

Tiyerekeze kuti muli ndi zotengera zamtundu umodzi wapakati. Amayi (Kubernetes) adaphika chitumbuwa (CPU) ndipo akufuna kugawa pakati pa ana (zotengera). Ana atatu akufuna chitumbuwa chathunthu (gawo = 1024), mwana wina akufuna theka la chitumbuwa (512). Amayi akufuna kuchita chilungamo ndipo amawerengera mosavuta.

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

Kutengera kuwerengera, ana atatu adzalandira 28% ya pachimake, osati pachimake chonse. Mwana wachinayi adzalandira 14% ya kernel yonse, osati theka. Koma zinthu zikhala zosiyana ngati muli ndi ma multi-core system.

Momwe mungapezere zothandizira za Kubernetes Pod
Kufunsira kwa CPU - Multi-Core (4) System

Mu chithunzi pamwambapa mukhoza kuona kuti ana atatu akufuna chitumbuwa chonse, ndipo mmodzi akufuna theka. Popeza amayi anaphika ma pie anayi, aliyense wa ana awo adzapeza zochuluka mmene angafunire. Mu dongosolo lamitundu yambiri, zothandizira purosesa zimagawidwa pama processor cores onse omwe amapezeka. Ngati chidebe chili chochepera pamtundu umodzi wathunthu wa CPU, chikhoza kuzigwiritsa ntchito pa 100%.

Kuwerengera pamwambapa ndi kosavuta kuti mumvetsetse momwe CPU imagawidwira pakati pa zotengera. Zachidziwikire, kupatula zotengerazo, palinso njira zina zomwe zimagwiritsanso ntchito zida za CPU. Zochita mu chidebe chimodzi sizigwira ntchito, ena amatha kugwiritsa ntchito gwero lake. CPU: "200m" zimayenderana CPU: 0,2, zomwe zikutanthauza pafupifupi 20% ya pachimake chimodzi.

Tsopano tiyeni tikambirane limit.cpu. CPU yomwe Kubernetes amaletsa imachulukitsidwa ndi 100. Zotsatira zake ndi kuchuluka kwa nthawi yomwe chidebe chimatha kugwiritsa ntchito 100 Β΅s iliyonse (cpu-period).

limit.cpu zimagwirizana ndi mbendera ya Docker --cpus. Izi ndizophatikiza zatsopano zakale --cpu-period ΠΈ --cpu-quota. Poyiyika, tikuwonetsa kuchuluka kwa zida za CPU zomwe chidebecho chingagwiritse ntchito kwambiri chisanayambe kugunda:

  • cpus - kuphatikiza cpu-period ΠΈ cpu-quota. cpus = 1.5 zofanana ndi kukhazikitsa cpu-period = 100000 ΠΈ cpu-quota = 150000;
  • CPU-nthawi - nthawi CPU CFS scheduler, kusakhulupirika 100 microseconds;
  • cpu-gawo - kuchuluka kwa ma microseconds mkati cpu-period, yomwe imamangidwa ndi chidebe.

Kodi chimachitika ndi chiyani mukayika CPU yosakwanira yofunsidwa?

Ngati chidebecho chikufuna zambiri kuposa chomwe chayika, chimaba CPU kuchokera kuzinthu zina.

Kodi chimachitika ndi chiyani mukayika malire a CPU otsika kwambiri?

Popeza gwero la CPU ndi losinthika, throttling imayatsidwa.

Kodi chimachitika ndi chiyani ngati simutchula pempho la CPU?

Mofanana ndi kukumbukira, mtengo wopempha ndi wofanana ndi malire.

Kodi chimachitika ndi chiyani ngati simutchula malire a CPU?

Chidebecho chidzagwiritsa ntchito CPU yochuluka momwe ikufunikira. Ngati ndondomeko ya CPU yokhazikika (LimitRange) yatanthauzidwa mu malo a mayina, ndiye kuti malirewo amagwiritsidwanso ntchito pa chidebecho.

Kodi chimachitika ndi chiyani ngati simutchula pempho kapena malire a CPU?

Monga ndi kukumbukira, izi ndizovuta kwambiri. Wokonza ndandanda sakudziwa kuti ndi zinthu zingati zomwe chidebe chanu chimafuna, ndipo izi zitha kuyambitsa mavuto akulu pa node. Kuti mupewe izi, muyenera kukhazikitsa malire osasinthika a malo a mayina (LimitRange).

Kumbukirani: ngati mupempha CPU yochulukirapo kuposa momwe ma node angapereke, Pod sidzakonzedwa. Requests.cpu - osati mtengo wocheperako, koma mtengo wokwanira kuyambitsa Pod ndikugwira ntchito popanda zolephera. Ngati pulogalamuyo sichita mawerengedwe ovuta, njira yabwino ndikuyika request.cpu <= 1 ndi kuyambitsa zofanizira zambiri momwe zingafunikire.

Kuchuluka kwazinthu zomwe mwapemphedwa kapena malire azinthu

Tinaphunzira za kuchepa kwa zipangizo zamakompyuta. Tsopano ndi nthawi yoti tiyankhe funso: "Kodi Pod yanga imafuna zinthu zingati kuti igwiritse ntchito pulogalamuyi popanda vuto? Kodi ndalama zoyenera ndi ziti?

Tsoka ilo, palibe mayankho omveka bwino a mafunsowa. Ngati simukudziwa momwe pulogalamu yanu imagwirira ntchito kapena kuchuluka kwa CPU kapena kukumbukira komwe kumafunikira, njira yabwino ndikupatseni kukumbukira kwambiri ndi CPU ndikuyesa kuyesa magwiridwe antchito.

Kuphatikiza pa mayeso a magwiridwe antchito, yang'anirani momwe pulogalamuyo ikuyendera pakuwunika kwa sabata. Ngati ma graph akuwonetsa kuti pulogalamu yanu ikugwiritsa ntchito zinthu zochepa kuposa zomwe mudapempha, mutha kuchepetsa kuchuluka kwa CPU kapena kukumbukira komwe mwafunsidwa.

Monga chitsanzo onani izi Grafana dashboard. Imawonetsa kusiyana pakati pa zomwe mwapemphedwa kapena malire azinthu zomwe zimagwiritsidwa ntchito pano.

Pomaliza

Kupempha ndi kuchepetsa zothandizira kumathandiza kuti gulu lanu la Kubernetes likhale lathanzi. Kukonzekera koyenera kumachepetsa mtengo ndipo kumapangitsa kuti mapulogalamu azigwira ntchito nthawi zonse.

Mwachidule, pali zinthu zingapo zomwe muyenera kukumbukira:

  1. Zomwe zafunsidwa ndi kasinthidwe komwe kumaganiziridwa panthawi yoyambira (pamene Kubernetes akukonzekera kuchititsa pulogalamuyi). Mosiyana ndi izi, kuchepetsa zothandizira ndizofunikira panthawi yogwiritsira ntchito-pamene ntchitoyo ikugwira ntchito pa node.
  2. Poyerekeza ndi kukumbukira, CPU ndi chida choyendetsedwa. Ngati palibe CPU yokwanira, Pod yanu siitseka ndipo makina ogwedeza adzayatsidwa.
  3. Zomwe zafunsidwa ndi malire azinthu sizochepera komanso zopambana! Pofotokoza zofunikira zomwe mwapemphedwa, mumawonetsetsa kuti pulogalamuyo idzayenda popanda mavuto.
  4. Kuchita bwino ndikukhazikitsa pempho la kukumbukira lofanana ndi malire a kukumbukira.
  5. Ok kukhazikitsa ndapempha CPU <=1, ngati ntchitoyo sichita mawerengedwe ovuta.
  6. Ngati mupempha zothandizira zambiri kuposa zomwe zilipo pa node, Pod sidzakonzedwanso kumalo amenewo.
  7. Kuti mudziwe kuchuluka koyenera kwazinthu zomwe mwapemphedwa / malire azinthu, gwiritsani ntchito kuyezetsa katundu ndi kuwunika.

Ndikukhulupirira kuti nkhaniyi ikuthandizani kumvetsetsa lingaliro lofunikira la kuchepa kwa zinthu. Ndipo mudzatha kugwiritsa ntchito chidziwitsochi pa ntchito yanu.

Kupambana!

Zomwe mungawerenge:

  1. Kuwonetsetsa kwa SRE: Maina ndi Mapangidwe a Metric.
  2. Zida 90+ zothandiza za Kubernetes: kutumiza, kasamalidwe, kuwunika, chitetezo ndi zina zambiri.
  3. Njira yathu Yozungulira Kubernetes mu Telegraph.

Source: www.habr.com

Kuwonjezera ndemanga