Pehea e komo ai i nā kumuwaiwai Kubernetes Pod

Pehea e komo ai i nā kumuwaiwai Kubernetes PodKa uku na Tohad

Ke hoʻomaka me Kubernetes, maʻamau ka poina e pili ana i ka hoʻonohonoho ʻana i nā kumuwaiwai pahu. I kēia manawa, lawa ia e hōʻoia i ka hana ʻana o ke kiʻi Docker a hiki ke kau ʻia i ka hui Kubernetes.

Akā ma hope, pono e kau ʻia ka noi i loko o kahi pūʻulu hana me nā noi ʻē aʻe. No ka hana ʻana i kēia, pono ʻoe e hoʻokaʻawale i nā kumuwaiwai no ka ipu a e hōʻoia i ka lawa ʻana o lākou e hoʻomaka a holo i ka noi, a ʻaʻole e loaʻa nā pilikia e holo ana nā polokalamu ʻē aʻe.

hui Kubernetes aaS mai Mail.ru unuhi ʻatikala e pili ana i nā kumuwaiwai pahu (CPU & MEM), nā noi a me nā palena waiwai. E aʻo ʻoe i nā pōmaikaʻi o kēia mau hoʻonohonoho a me ka hopena inā ʻaʻole ʻoe e hoʻonohonoho iā lākou.

Heluhelu waiwai

Loaʻa iā mākou ʻelua ʻano waiwai me kēia mau ʻāpana:

  • ʻĀpana hana kikowaena (CPU) - cores;
  • Hoʻomanaʻo (MEM) - bytes.

Hōʻike ʻia nā kumuwaiwai no kēlā me kēia pahu. Ma ka waihona Pod YAML aʻe, e ʻike ʻoe i kahi ʻāpana waiwai i loaʻa nā kumuwaiwai i noi ʻia a kaupalena ʻia:

  • Noi ʻia Pod Resources = huina o nā kumuwaiwai i noi ʻia o nā ipu a pau;
  • Palena Punawai Pod = Ka huina o na palena Kumuwai Pod a pau.

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

Ka Laʻana o nā kumuwaiwai i noi ʻia a i kaupalena ʻia

kahua resources.requested mai ka kikoʻī ʻo Pod kekahi o nā mea i hoʻohana ʻia e ʻimi i ka node i makemake ʻia. Hiki iā ʻoe ke hoʻolālā i ka hoʻolālā Pod no ia. Pehea ʻoe e ʻike ai i kahi node kūpono?

Loaʻa i nā Kubernetes kekahi mau ʻāpana, me kahi kumu kumu a i ʻole kumu kumu (Kubernetes Control Plane). He nui nā kaʻina hana o ka haku node: kube-apiserver, kube-controller-manager a me kube-scheduler.

ʻO ke kaʻina hana kube-scheduler ke kuleana no ka nānā ʻana i nā pods hou i hana ʻia a me ka ʻimi ʻana i nā node limahana e kūpono i nā noi pod āpau, me ka helu o nā kumuwaiwai i noi ʻia. Hoʻonohonoho ʻia ka papa inoa o nā nodes i loaʻa e kube-scheduler. Hoʻonohonoho ʻia ka pod ma ka node me nā helu kiʻekiʻe loa.

Pehea e komo ai i nā kumuwaiwai Kubernetes PodMa hea kahi e waiho ai ka Pod poni?

Ma ke kiʻi hiki iā ʻoe ke ʻike i ka kube-scheduler e hoʻonohonoho i kahi Pod poni hou. Loaʻa i ka pūʻulu Kubernetes ʻelua node: A a me B. E like me kāu e ʻike ai, ʻaʻole hiki i ka kube-scheduler ke hoʻonohonoho i kahi Pod ma ka node A - ʻaʻole kūpono nā kumuwaiwai i loaʻa (ʻaʻole i noi ʻia) me nā noi o ka Pod poni. No laila, ʻaʻole kūpono ka 1 GB o ka hoʻomanaʻo i noi ʻia e ka Pod poni ma ka node A, no ka mea ʻo 0,5 GB ka hoʻomanaʻo i loaʻa. Akā, lawa nā kumuwaiwai node B. ʻO ka hopena, hoʻoholo ʻo kube-scheduler ʻo ka wahi o ka Pod poni ʻo ka node B.

I kēia manawa ua ʻike mākou pehea e pili ai nā kumuwaiwai i noi ʻia i ke koho o ka node e holo i ka Pod. Akā he aha ka hopena o nā kumu waiwai marginal?

ʻO ka palena waiwai he palena ʻaʻole hiki i ka CPU/MEM ke hele. Eia nō naʻe, hiki ke maʻalahi ka punawai CPU, no laila ʻaʻole e hoʻokuʻu ka Pod i nā pahu i hiki i ko lākou palena CPU. Akā, e hoʻomaka ana ka throttling CPU. Inā hiki i ka palena hoʻohana MEM, e pani ʻia ka pahu ma muli o OOM-Killer a hoʻomaka hou inā ʻae ʻia e ka hoʻonohonoho RestartPolicy.

Ua noi ʻia a ʻoi aku ka nui o nā kumuwaiwai i nā kikoʻī

Pehea e komo ai i nā kumuwaiwai Kubernetes PodKūkākūkā waiwai ma waena o Docker a me Kubernetes

ʻO ke ala maikaʻi loa e wehewehe ai i ka hana ʻana o nā noi waiwai a me nā palena waiwai ʻo ka hoʻolauna ʻana i ka pilina ma waena o Kubernetes a me Docker. Ma ke kiʻi ma luna, hiki iā ʻoe ke ʻike pehea e pili ai nā kahua Kubernetes a me nā hae hoʻomaka Docker.

Hoʻomanaʻo: noi a palena

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

E like me ka mea i ʻōlelo ʻia ma luna, ua ana ʻia ka hoʻomanaʻo i nā bytes. Ma muli o Nā palapala Kubernetes, hiki iā mākou ke kuhikuhi i ka hoʻomanaʻo ma ke ʻano he helu. ʻO ka maʻamau he helu helu, no ka laʻana 2678 - ʻo ia hoʻi, 2678 bytes. Hiki iā ʻoe ke hoʻohana i nā suffix G и Gi, ʻo ka mea nui e hoʻomanaʻo ʻaʻole like lākou. ʻO ka mua he decimal a ʻo ka lua he binary. E like me ka laʻana i ʻōlelo ʻia ma ka palapala k8s: 128974848, 129e6, 129M, 123Mi - ua like like lākou.

Koho Kubernetes limits.memory pili i ka hae --memory mai Docker. I ka hihia o request.memory ʻAʻohe pua no Docker no ka mea ʻaʻole hoʻohana ʻo Docker i kēia kahua. E nīnau paha ʻoe, pono anei kēia? ʻAe pono. E like me kaʻu i ʻōlelo ai ma mua, pono ke kahua no Kubernetes. Ma muli o ka ʻike mai ia mea, hoʻoholo ka kube-scheduler i ka node e hoʻonohonoho ai i ka Pod.

He aha ka hopena inā hoʻonoho ʻoe ʻaʻole lawa ka hoʻomanaʻo no kahi noi?

Inā ua hōʻea ka pahu i nā palena o ka hoʻomanaʻo i noi ʻia, a laila hoʻokomo ʻia ka Pod i kahi pūʻulu Pods e kū i ka wā ʻaʻole lawa ka hoʻomanaʻo i ka node.

He aha ka hopena inā hoʻonoho ʻoe i ka palena hoʻomanaʻo haʻahaʻa loa?

Inā ʻoi aku ka pahu i ka palena hoʻomanaʻo, e hoʻopau ʻia ma muli o OOM-Killed. A e hoʻomaka hou inā hiki ma muli o RestartPolicy kahi o ka waiwai paʻamau Always.

He aha ka hopena inā ʻaʻole ʻoe e wehewehe i ka hoʻomanaʻo i noi ʻia?

E lawe ʻo Kubernetes i ka waiwai palena a hoʻonoho iā ia ma ke ʻano he kumu paʻamau.

He aha ka hopena inā ʻaʻole ʻoe e kuhikuhi i kahi palena hoʻomanaʻo?

ʻAʻohe palena o ka pahu; hiki iā ia ke hoʻohana i ka nui o ka hoʻomanaʻo e like me kona makemake. Inā hoʻomaka ʻo ia e hoʻohana i nā hoʻomanaʻo āpau i loaʻa o ka node, a laila pepehi ʻo OOM iā ia. E hoʻomaka hou ka pahu inā hiki ma muli o RestartPolicy.

He aha ka hopena inā ʻaʻole ʻoe e kuhikuhi i nā palena hoʻomanaʻo?

ʻO kēia ka hihia ʻino loa: ʻaʻole ʻike ka mea hoʻonohonoho i ka nui o nā kumuwaiwai e pono ai ka ipu, a hiki i kēia ke hoʻopilikia i ka node. I kēia hihia, ʻoi aku ka maikaʻi o ka loaʻa ʻana o nā palena paʻamau ma ka inoa inoa (i hoʻonohonoho ʻia e LimitRange). ʻAʻohe palena palena - ʻaʻohe palena o ka Pod, hiki iā ia ke hoʻohana i ka hoʻomanaʻo e like me kona makemake.

Inā ʻoi aku ka nui o ka hoʻomanaʻo i noi ʻia ma mua o ka hiki ke hāʻawi ʻia, ʻaʻole e hoʻonohonoho ʻia ka Pod. He mea nui e hoʻomanaʻo i kēlā Requests.memory - ʻaʻole ka waiwai liʻiliʻi. He wehewehe kēia o ka nui o ka hoʻomanaʻo e lawa ai ka holo mau ʻana o ka pahu.

Manaʻo pinepine ʻia e hoʻonohonoho i ka waiwai like no request.memory и limit.memory. Mālama kēia ʻaʻole e hoʻonohonoho ʻo Kubernetes i kahi Pod ma kahi node i lawa ka hoʻomanaʻo e holo ai i ka Pod akā ʻaʻole lawa ka holo ʻana. E hoʻomanaʻo: ʻO ka hoʻolālā Kubernetes Pod wale nō e noʻonoʻo requests.memorya me ka limits.memory aole noonoo.

CPU: noi a palena

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

Me kahi CPU he mea paʻakikī loa nā mea a pau. Ke hoʻi nei i ke kiʻi o ka pilina ma waena o Kubernetes a me Docker, hiki iā ʻoe ke ʻike i kēlā request.cpu соответствует --cpu-shares, ʻoiai limit.cpu pili i ka hae cpus ma Docker.

Hoʻonui ʻia ka CPU a Kubernetes e noi ai i ka 1024, ka hapa o nā pōʻai CPU. Inā makemake ʻoe e noi i 1 kiko piha, pono ʻoe e hoʻohui cpu: 1e like me ka mea i hoikeia maluna.

ʻO ke noi ʻana i kahi kernel piha (ka like = 1024) ʻaʻole ia he manaʻo e loaʻa i kāu pahu. Inā hoʻokahi wale nō kumu o kāu mīkini hoʻokipa a ke holo nei ʻoe ma mua o hoʻokahi pahu, a laila pono nā pahu āpau e kaʻana like i ka CPU i loaʻa ma waena o lākou. Pehea e hana ai kēia? E nānā kākou i ke kiʻi.

Pehea e komo ai i nā kumuwaiwai Kubernetes Pod
Noi CPU - Pūnaehana Koko Hoʻokahi

E noʻonoʻo kākou he ʻōnaehana hoʻokipa hoʻokahi kāu e holo ana i nā ipu. Ua kālua ʻo Māmā (Kubernetes) i kahi pai (CPU) a makemake ʻo ia e māhele i waena o nā keiki (nā pahu). Makemake 'ekolu keiki i ka pai pai holo'oko'a (proportion = 1024), makemake kekahi keiki i ka hapalua pai (512). Makemake ʻo Māmā e kūpono a hana i kahi helu maʻalahi.

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

Ma muli o ka helu ʻana, e loaʻa i nā keiki ʻekolu he 28% o ke kumu, ʻaʻole ke kumu holoʻokoʻa. E loaʻa i ka hā o ke keiki he 14% o ka ʻeke piha, ʻaʻole ka hapalua. Akā ʻokoʻa nā mea inā loaʻa iā ʻoe kahi ʻōnaehana multi-core.

Pehea e komo ai i nā kumuwaiwai Kubernetes Pod
Noi CPU - Pūnaehana Nui-Core (4).

Ma ke kiʻi ma luna, hiki iā ʻoe ke ʻike i ʻekolu keiki makemake i kahi pai holoʻokoʻa, a makemake kekahi i ka hapalua. Ma muli o ka ʻai ʻana o ka makuahine i ʻehā pai, e loaʻa i kēlā me kēia o kāna mau keiki ka nui e like me kā lākou makemake. I loko o kahi ʻōnaehana multi-core, ua puʻunaue ʻia nā kumuwaiwai mea hana ma waena o nā core processor i loaʻa. Inā kaupalena ʻia kahi pahu i ka liʻiliʻi ma mua o hoʻokahi kumu CPU piha, hiki iā ia ke hoʻohana iā ia ma 100%.

Hoʻomaʻamaʻa ʻia nā helu ma luna e hoʻomaopopo i ke ʻano o ka puʻunaue ʻana o ka CPU ma waena o nā ipu. ʻOiaʻiʻo, ma waho aʻe o nā ipu ponoʻī, aia kekahi mau kaʻina hana e hoʻohana pū ai i nā kumuwaiwai CPU. Ke hoʻohana ʻia nā kaʻina hana i loko o ka pahu hoʻokahi, hiki i nā mea ʻē aʻe ke hoʻohana i kāna kumuwaiwai. CPU: "200m" соответствует CPU: 0,2, ʻo ia hoʻi ma kahi o 20% o hoʻokahi kumu.

I kēia manawa e kamaʻilio kākou limit.cpu. Hoʻonui ʻia ka CPU i kaupalena ʻia e Kubernetes me 100. ʻO ka hopena ka nui o ka manawa e hiki ai i ka ipu ke hoʻohana i kēlā me kēia 100 µs (cpu-period).

limit.cpu pili i ka hae Docker --cpus. He hui hou keia o na mea kahiko --cpu-period и --cpu-quota. Ma ka hoʻonohonoho ʻana, hōʻike mākou i ka nui o nā kumuwaiwai CPU i loaʻa i ka ipu e hoʻohana nui ai ma mua o ka hoʻomaka ʻana o ka throttling:

  • pahu pane - hui cpu-period и cpu-quota. cpus = 1.5 like me ka hoonoho ana cpu-period = 100000 и cpu-quota = 150000;
  • CPU-manawa - manawa CPU CFS mea hoʻonohonoho, paʻamau 100 microseconds;
  • cpu-quota - ka helu o nā microseconds i loko cpu-period, ka mea i paa i ka ipu.

He aha kāu e hoʻokomo ai i ka CPU i noi ʻia?

Inā makemake ka pahu ma mua o ka mea i hoʻokomo ʻia, e ʻaihue ia i ka CPU mai nā kaʻina hana ʻē aʻe.

He aha ka hopena inā hoʻonoho ʻoe i ka palena CPU haʻahaʻa loa?

No ka mea hiki ke hoʻololi ʻia ka punawai CPU, e ʻā ke throttling.

He aha ka hopena inā ʻaʻole ʻoe e kuhikuhi i kahi noi CPU?

E like me ka hoʻomanaʻo, ua like ka waiwai noi me ka palena.

He aha ka hopena inā ʻaʻole ʻoe e kuhikuhi i kahi palena CPU?

E hoʻohana ka ipu i ka CPU e like me ka mea e pono ai. Inā wehewehe ʻia kahi kulekele CPU paʻamau (LimitRange) i ka inoa inoa, a laila hoʻohana ʻia kēia palena no ka ipu.

He aha ka hopena inā ʻaʻole ʻoe e kuhikuhi i kahi noi a i ʻole ka palena CPU?

E like me ka hoʻomanaʻo ʻana, ʻo kēia ke kūlana ʻino loa. ʻAʻole ʻike ka mea hoʻonohonoho i ka nui o nā kumuwaiwai e pono ai kāu pahu, a hiki i kēia ke kumu i nā pilikia koʻikoʻi ma ka node. No ka pale ʻana i kēia, pono ʻoe e kau i nā palena paʻamau no nā inoa inoa (LimitRange).

E hoʻomanaʻo: inā noi ʻoe i ka CPU hou aʻe ma mua o ka hiki i nā nodes ke hāʻawi, ʻaʻole e hoʻonohonoho ʻia ka Pod. Requests.cpu - ʻaʻole ka waiwai liʻiliʻi, akā he waiwai kūpono e hoʻomaka ai i ka Pod a hana me ka hemahema. Inā ʻaʻole hana ka noi i nā helu paʻakikī, ʻo ke koho maikaʻi loa ʻo ia ke hoʻokomo request.cpu <= 1 a hoʻomaka i nā kope he nui e like me ka mea e pono ai.

Ka nui kūpono o nā kumuwaiwai i noi ʻia a i ʻole ka palena waiwai

Ua aʻo mākou e pili ana i ka palena o nā kumuwaiwai helu. ʻO ka manawa kēia e pane ai i ka nīnau: "Ehia mau kumuwaiwai e pono ai kaʻu Pod e holo i ka noi me ka pilikia ʻole? He aha ka huina kūpono?

ʻO ka mea pōʻino, ʻaʻohe pane maopopo i kēia mau nīnau. Inā ʻaʻole ʻoe ʻike i ka hana ʻana o kāu noi a i ʻole ka nui o ka CPU a i ʻole ka hoʻomanaʻo e pono ai, ʻo ka koho maikaʻi loa ka hāʻawi ʻana i ka noi i ka nui o ka hoʻomanaʻo a me ka CPU a laila holo i nā hoʻokolohua hana.

Ma waho aʻe o nā hoʻokolohua hana, e nānā i ke ʻano o ka noi i ka nānā ʻana no hoʻokahi pule. Inā hōʻike nā kiʻi i ka liʻiliʻi o kāu noi ma mua o kāu i noi ai, hiki iā ʻoe ke hoʻemi i ka nui o ka CPU a i ʻole ka hoʻomanaʻo i noi ʻia.

Ma keʻano he laʻana e nānā i kēia Grafana dashboard. Hōʻike ia i ka ʻokoʻa ma waena o nā kumuwaiwai i noi ʻia a i ʻole ka palena waiwai a me ka hoʻohana ʻana i kēia manawa.

hopena

ʻO ka noi ʻana a me ka hoʻopaʻa ʻana i nā kumuwaiwai e kōkua i ka mālama pono ʻana i kāu pūʻulu Kubernetes. ʻO ka hoʻonohonoho palena kūpono e hōʻemi i nā kumukūʻai a mālama i nā noi e holo i nā manawa a pau.

I ka pōkole, aia kekahi mau mea e hoʻomanaʻo:

  1. ʻO nā kumuwaiwai i noi ʻia he hoʻonohonoho i mālama ʻia i ka manawa hoʻomaka (ke hoʻolālā ʻo Kubernetes e hoʻokipa i ka noi). I ka hoʻokaʻawale ʻana, he mea koʻikoʻi ke kaupalena ʻana i nā kumuwaiwai i ka wā holo—ke holo mua ka noi ma ka node.
  2. Ke hoʻohālikelike ʻia me ka hoʻomanaʻo, ʻo ka CPU kahi kumuwaiwai i hoʻoponopono ʻia. Inā ʻaʻole lawa ka CPU, ʻaʻole e pani ʻia kāu Pod a e hoʻā ke ʻano throttling.
  3. ʻO nā kumu waiwai i noi ʻia a me ka palena waiwai ʻaʻole nā ​​waiwai liʻiliʻi a kiʻekiʻe loa! Ma ka wehewehe ʻana i nā kumuwaiwai i noi ʻia, hōʻoia ʻoe e holo ka noi me ka pilikia ʻole.
  4. ʻO kahi hana maikaʻi ka hoʻonohonoho ʻana i ka noi hoʻomanaʻo e like me ka palena hoʻomanaʻo.
  5. Ua noi ʻia e hoʻokomo CPU <=1, inā ʻaʻole hana ka noi i nā helu paʻakikī.
  6. Inā noi ʻoe i nā kumuwaiwai hou aʻe ma mua o ka loaʻa ʻana ma kahi node, ʻaʻole e hoʻonohonoho ʻia ka Pod i kēlā node.
  7. No ka hoʻoholo ʻana i ka nui kūpono o nā kumu waiwai/palena waiwai i noi ʻia, e hoʻohana i ka hoʻāʻo ʻana a me ka nānā ʻana.

Manaʻo wau e kōkua kēia ʻatikala iā ʻoe e hoʻomaopopo i ka manaʻo kumu o ka palena waiwai. A hiki iā ʻoe ke hoʻohana i kēia ʻike i kāu hana.

Pomaikai!

He aha hou aʻe e heluhelu ai:

  1. SRE ʻIke: Namespaces a me Metric Structure.
  2. 90+ Mea Hana Pono no nā Kubernetes: Hoʻolālā, Hoʻokele, Nānā, Palekana a me nā mea hou aku.
  3. ʻO kā mākou kahawai a puni Kubernetes ma Telegram.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka