ʻElima hala i ka wā e kau ana i ka noi mua ma Kubernetes

ʻElima hala i ka wā e kau ana i ka noi mua ma KubernetesFail na Aris Dreamer

Manaʻo ka poʻe he nui ia e hoʻololi i ka noi iā Kubernetes (e hoʻohana ana iā Helm a i ʻole ka lima) - a laila e hauʻoli. Akā ʻaʻole maʻalahi nā mea a pau.

hui Mail.ru Cloud Solutions unuhi ʻia kahi ʻatikala na DevOps engineer Julian Gindy. Hōʻike ʻo ia i nā pitfalls o kāna hui i ka wā o ka neʻe ʻana i ʻole ʻoe e hehi i ka rake like.

KaʻAnuʻu ʻAkahi: Hoʻonohonoho i nā noi a me nā palena Pod

E hoʻomaka kākou ma ka hoʻonohonoho ʻana i kahi kaiapuni maʻemaʻe kahi e holo ai kā mākou pods. He maikaʻi ʻo Kubernetes i ka hoʻonohonoho pod a me ka failover. Akā ua ʻike ʻia ʻaʻole hiki i ka mea hoʻonohonoho i kekahi manawa ke kau i kahi pod inā paʻakikī ke koho i ka nui o nā kumuwaiwai e pono ai e hana maikaʻi. ʻO kēia kahi e puka mai ai nā noi no nā kumuwaiwai a me nā palena. Nui ka hoʻopaʻapaʻa e pili ana i ke ala maikaʻi loa i ka hoʻonohonoho ʻana i nā noi a me nā palena. I kekahi manawa me he mea lā he ʻoi aku kēia ma mua o ka ʻepekema. Eia kā mākou hoʻokokoke.

Nā noi pod ʻo ia ka waiwai nui i hoʻohana ʻia e ka mea hoʻonohonoho e hoʻokomo pono i ka pod.

Mai Nā palapala Kubernetes: ʻO ka ʻanuʻu kānana e wehewehe i kahi pūʻulu o nā node kahi e hoʻonohonoho ʻia ai kahi Pod. No ka laʻana, nānā ka kānana PodFitsResources e ʻike inā lawa nā kumu waiwai o kahi node e hoʻokō i nā noi waiwai kikoʻī mai kahi pod.

Hoʻohana mākou i nā noi noi ma ke ʻano e hiki ai iā mākou ke koho i ka nui o nā kumuwaiwai i kaʻoiaʻiʻo Pono ka polokalamu e hana pono. Ma kēia ala e hiki ai i ka mea hoʻonohonoho ke kau maoli i nā nodes. I ka wā mua, makemake mākou e hoʻonui i nā noi e hōʻoia i ka lawa o nā kumuwaiwai no kēlā me kēia Pod, akā ua ʻike mākou ua piʻi nui ka manawa hoʻonohonoho, a ʻaʻole i hoʻonohonoho pono ʻia kekahi Pods, me he mea lā ʻaʻohe noi kumu no lākou.

I kēia hihia, ʻo ka mea hoʻonohonoho hoʻonohonoho e "ʻoki" pinepine i nā pods a ʻaʻole hiki ke hoʻonohonoho hou iā lākou no ka mea ʻaʻole ʻike ka mokulele hoʻokele i ka nui o nā kumuwaiwai e pono ai ka noi, ʻo ia kahi mea nui o ka algorithm hoʻonohonoho.

Nā palena pod he palena ʻoi aku ka maopopo no kahi pod. Hōʻike ia i ka nui o nā kumuwaiwai a ka hui e hoʻokaʻawale i ka ipu.

Eia hou, mai palapala kūhelu: Inā he 4 GiB ka palena hoʻomanaʻo o kahi pahu, a laila e hoʻokō ka kubelet (a me ka manawa holo pahu). Mālama ka wā holo i ka pahu mai ka hoʻohana ʻana ma mua o ka palena waiwai i ʻōlelo ʻia. No ka laʻana, i ka wā e ho'āʻo ai kahi kaʻina hana i loko o kahi pahu e hoʻohana i ka nui o ka hoʻomanaʻo i ʻae ʻia, hoʻopau ka kernel system i ke kaʻina hana me kahi hewa "out of memory" (OOM).

Hiki i kahi pahu ke hoʻohana i nā kumuwaiwai ʻoi aku ma mua o ka noi waiwai i kuhikuhi ʻia, akā ʻaʻole hiki ke hoʻohana i nā mea ʻoi aku ma mua o ka palena. He paʻakikī kēia waiwai e hoʻonohonoho pono, akā he mea nui loa ia.

ʻO ke kūpono, makemake mākou e hoʻololi i nā koi waiwai o kahi pod i ka wā o ke ola o kahi kaʻina me ka ʻole o ke keʻakeʻa ʻana i nā kaʻina hana ʻē aʻe i loko o ka ʻōnaehana - ʻo ia ke kumu o ka hoʻonohonoho ʻana i nā palena.

ʻO ka mea pōʻino, ʻaʻole hiki iaʻu ke hāʻawi i nā kuhikuhi kikoʻī e pili ana i nā waiwai e hoʻonoho ai, akā ʻo mākou iho e pili ana i kēia mau lula:

  1. Ke hoʻohana nei i kahi mea hana hoʻāʻo hoʻouka, hoʻohālikelike mākou i kahi pae kumu o ke kaʻa a nānā i ka hoʻohana ʻana i nā kumuwaiwai pod (memo a me ka processor).
  2. E hoʻonoho i nā noi pod i kahi waiwai haʻahaʻa haʻahaʻa (me ka palena waiwai ma kahi o 5 mau manawa o ka waiwai o nā noi) a nānā. Ke haʻahaʻa loa nā noi, ʻaʻole hiki ke hoʻomaka ke kaʻina hana, e hana pinepine ai i nā hewa holo cryptic Go.

ʻIke au i nā palena kumu waiwai kiʻekiʻe e paʻakikī ai ka hoʻonohonoho ʻana no ka mea pono ka pod i kahi node i hoʻopaʻa ʻia me nā kumu waiwai i loaʻa.

E noʻonoʻo i kahi kūlana i loaʻa iā ʻoe kahi kikowaena pūnaewele māmā me kahi palena waiwai kiʻekiʻe loa, e like me 4 GB o ka hoʻomanaʻo. Pono paha kēia kaʻina hana e hoʻonui ʻia i waho, a pono e hoʻonohonoho ʻia kēlā me kēia pod hou ma kahi node me ka liʻiliʻi o 4 GB o ka hoʻomanaʻo i loaʻa. Inā ʻaʻohe node o ia ʻano, pono e hoʻokomo ka pūʻulu i kahi node hou e hoʻoponopono ai i kēia pod, a hiki ke lōʻihi. He mea nui e hoʻokō i kahi ʻokoʻa liʻiliʻi ma waena o nā noi waiwai a me nā palena e hōʻoia i ka wikiwiki a me ka maʻalahi.

KaʻAnuʻu ʻElua: Hoʻonohonoho i nā hoʻāʻo ola a me ka mākaukau

ʻO kēia kekahi kumuhana maʻalahi e kūkākūkā pinepine ʻia ma ke kaiāulu Kubernetes. He mea nui ka hoʻomaopopo maikaʻi ʻana i nā hoʻokolohua Liveness a me Readiness ʻoiai lākou e hāʻawi i kahi mīkini no ka hana paʻa o ka polokalamu a hoʻemi i ka manawa hoʻomaha. Eia nō naʻe, hiki iā lākou ke hoʻopilikia koʻikoʻi i ka hana o kāu noi inā ʻaʻole i hoʻonohonoho pono ʻia. Aia ma lalo kahi hōʻuluʻulu o ke ʻano o nā laʻana ʻelua.

Ola hōʻike inā e holo ana ka pahu. Inā hāʻule, hoʻopau ke kubelet i ka ipu a hoʻomaka ke kulekele hoʻomaka hou. Inā ʻaʻole i hoʻolako ʻia ka pahu me kahi Liveness Probe, a laila e kūleʻa ke kūlana paʻamau - e like me ka ʻōlelo ʻana ma Nā palapala Kubernetes.

Pono e maʻalahi nā ʻimi liveness, ʻo ia hoʻi, ʻaʻole hoʻopau i ka nui o nā kumuwaiwai, no ka mea e holo pinepine lākou a pono e haʻi iā Kubernetes e holo ana ka noi.

Inā hoʻonoho ʻoe i ke koho e holo i kēlā me kēia kekona, e hoʻohui kēia i 1 noi i kēlā me kēia kekona, no laila e makaʻala e koi ʻia nā kumuwaiwai hou aʻe no ka hoʻoponopono ʻana i kēia kaʻa.

Ma kā mākou hui, hoʻāʻo ʻo Liveness i nā ʻāpana koʻikoʻi o kahi noi, ʻoiai inā ʻaʻole i loaʻa piha ka ʻikepili (no ka laʻana, mai kahi waihona mamao a i ʻole cache).

Ua hoʻonohonoho mākou i kahi "ola" hope i nā noi e hoʻihoʻi wale i kahi code pane 200. He hōʻailona kēia e holo ana ke kaʻina hana a hiki ke hoʻokele i nā noi (akā ʻaʻole naʻe ke kalepa).

E hoʻāʻo Mākaukau hōʻike inā ua mākaukau ka pahu e lawelawe i nā noi. Inā hāʻule ka ʻimi hoʻomākaukau, hoʻoneʻe ka mea hoʻoponopono hope i ka IP address o ka pod mai nā wahi hopena o nā lawelawe āpau e pili ana i ka pod. Ua ʻōlelo ʻia kēia ma ka palapala Kubernetes.

Hoʻopau nā noiʻi mākaukau i nā kumuwaiwai hou aʻe, no ka mea pono lākou e pā i ke kua i ke ʻano e hōʻike ai ua mākaukau ka noi e ʻae i nā noi.

Nui nā hoʻopaʻapaʻa ma ke kaiāulu e pili ana i ke komo pololei ʻana i ka waihona. Ma ka noʻonoʻo ʻana i ke poʻo (he pinepine nā loiloi, akā hiki ke hoʻomalu ʻia), ua hoʻoholo mākou no kekahi mau noi, helu ʻia ka mākaukau e lawelawe i nā kaʻa ma hope o ka nānā ʻana ua hoʻihoʻi ʻia nā moʻolelo mai ka waihona. ʻO nā hoʻāʻo mākaukau i hoʻolālā maikaʻi ʻia i hōʻoia i nā pae kiʻekiʻe o ka loaʻa a hoʻopau ʻia i ka wā hoʻomaha i ka wā hoʻolālā.

Inā hoʻoholo ʻoe e nīnau i ka waihona no ka hoʻāʻo ʻana i ka mākaukau o kāu noi, e hōʻoia i ka maʻalahi e like me ka hiki. E lawe kākou i kēia nīnau:

SELECT small_item FROM table LIMIT 1

Eia kahi laʻana o ka hoʻonohonoho ʻana i kēia mau waiwai ʻelua ma Kubernetes:

livenessProbe: 
 httpGet:   
   path: /api/liveness    
   port: http 
readinessProbe:  
 httpGet:    
   path: /api/readiness    
   port: http  periodSeconds: 2

Hiki iā ʻoe ke hoʻohui i kekahi mau koho hoʻonohonoho hou:

  • initialDelaySeconds - ehia mau kekona e hala ma waena o ka hoʻomaka ʻana o ka ipu a me ka hoʻomaka ʻana o ka hoʻomaka ʻana o nā mea noiʻi.
  • periodSeconds - ka manawa kali ma waena o nā holo hāpana.
  • timeoutSeconds - ka helu o nā kekona ma hope o ka manaʻo ʻia o ka pod he pilikia. Hoʻopau manawa maʻamau.
  • failureThreshold ʻo ia ka helu o nā hemahema hoʻāʻo ma mua o ka hoʻouna ʻia ʻana o kahi hōʻailona hoʻomaka hou i ka pod.
  • successThreshold ʻo ia ka helu o nā hoʻāʻo kūleʻa ma mua o ka hoʻololi ʻana o ka pod i ke kūlana mākaukau (ma hope o ka hāʻule ʻana i ka wā e hoʻomaka ai a hoʻi hou ka pod).

KaʻAnuʻu ʻEkolu: Hoʻonohonoho i nā Kulekele Pūnaewele Default o Pod

Loaʻa iā Kubernetes kahi kiʻi "flat" network topography, ma ke ʻano maʻamau e kamaʻilio pololei nā pods a pau me kekahi. I kekahi mau hihia ʻaʻole makemake ʻia kēia.

ʻO kahi pilikia palekana e hiki ai i ka mea hoʻouka ke hoʻohana i hoʻokahi noi pilikia e hoʻouna i nā kaʻa i nā pods āpau ma ka pūnaewele. E like me nā wahi he nui o ka palekana, pili ke kumu o ka pono liʻiliʻi ma ʻaneʻi. Ma ke kūpono, pono e wehewehe pono nā kulekele pūnaewele i nā pilina ma waena o nā pods i ʻae ʻia a ʻaʻole hoʻi.

Eia kekahi laʻana, he kulekele maʻalahi kēia e hōʻole ana i nā kaʻa komo āpau no kahi inoa inoa.

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:  
 name: default-deny-ingress
spec:  
 podSelector: {}  
 policyTypes:  
   - Ingress

ʻIke ʻia o kēia hoʻonohonoho:

ʻElima hala i ka wā e kau ana i ka noi mua ma Kubernetes
(https://miro.medium.com/max/875/1*-eiVw43azgzYzyN1th7cZg.gif)
Nāʻike hou maanei.

KaʻAnuʻu ʻEhā: ʻO ka hana maʻamau me nā Hook a me nā ipu Init

ʻO kekahi o kā mākou pahuhopu nui ʻo ia ka hoʻolako ʻana i nā hoʻolaha ma Kubernetes me ka ʻole o ka manawa hoʻomaha no nā mea hoʻomohala. He paʻakikī kēia no ka mea he nui nā koho no ka pani ʻana i nā noi a me ka hoʻokuʻu ʻana i kā lākou mau kumuwaiwai i hoʻohana ʻia.

Ua puka mai nā pilikia kūikawā me Nginx. Ua ʻike mākou i ka wā e kau ana i kēia mau Pods ma ke kaʻina, ua hoʻopau ʻia nā pilina ikaika ma mua o ka hoʻopau ʻana.

Ma hope o ka noiʻi nui ʻana ma ka Pūnaewele, ua ʻike ʻia ʻaʻole kali ʻo Kubernetes i nā pilina Nginx e hoʻopau iā lākou iho ma mua o ka pani ʻana i ka pod. Me ke kōkua o ka makau pre-stop, ua hoʻokō mākou i kēia mau hana a hoʻopau loa i ka downtime:

lifecycle: 
 preStop:
   exec:
     command: ["/usr/local/bin/nginx-killer.sh"]

Akā nginx-killer.sh:

#!/bin/bash
sleep 3
PID=$(cat /run/nginx.pid)
nginx -s quit
while [ -d /proc/$PID ]; do
   echo "Waiting while shutting down nginx..."
   sleep 10
done

ʻO kekahi paradigm maikaʻi loa ka hoʻohana ʻana i nā pahu init e mālama i ka hoʻomaka ʻana o nā noi kikoʻī. He mea maikaʻi loa kēia inā loaʻa iā ʻoe kahi kaʻina neʻe ʻana i ka waihona waiwai waiwai e pono e holo ma mua o ka hoʻomaka ʻana o ka noi. Hiki iā ʻoe ke kuhikuhi i kahi palena waiwai kiʻekiʻe no kēia kaʻina hana me ka ʻole o ka hoʻonohonoho ʻana i kēlā palena no ka noi nui.

ʻO kekahi papahana maʻamau e komo i nā mea huna i loko o ka pahu init, e hāʻawi ana i kēia mau hōʻoia i ka module nui, e pale ai i ka ʻae ʻole ʻia i nā mea huna mai ka module noi nui ponoʻī.

E like me ka mea maʻamau, he ʻōlelo mai ka palapala: E holo pono nā pahu init i ke code mea hoʻohana a i ʻole nā ​​mea pono e hoʻopilikia i ka palekana o ke kiʻi ipu o ka noi. Ma ka hoʻokaʻawale ʻana i nā mea hana pono ʻole, kaupalena ʻoe i ka ʻili hoʻouka o ke kiʻi pahu o ka noi.

KaʻAnuʻu ʻElima: Hoʻonohonoho Kernel

ʻO ka hope, e kamaʻilio kākou e pili ana i kahi ʻenehana ʻoi aku ka holomua.

He kahua maʻalahi loa ʻo Kubernetes e hiki ai iā ʻoe ke holo i nā haʻahaʻa hana inā ʻoe e ʻike pono. Loaʻa iā mākou kekahi mau palapala noi maikaʻi loa i koʻikoʻi waiwai. Ma hope o ka hoʻāʻo ʻana i ka ukana nui, ʻike mākou ua paʻakikī kekahi o nā noi i ka mālama ʻana i ka ukana i manaʻo ʻia i ka wā e paʻa ai nā hoʻonohonoho Kubernetes paʻamau.

Eia naʻe, ʻae ʻo Kubernetes iā ʻoe e holo i kahi pahu pono e hoʻololi wale i nā ʻāpana kernel no kahi pod kikoʻī. Eia ka mea a mākou i hoʻohana ai e hoʻololi i ka helu kiʻekiʻe o nā pili wehe.

initContainers:
  - name: sysctl
     image: alpine:3.10
     securityContext:
         privileged: true
      command: ['sh', '-c', "sysctl -w net.core.somaxconn=32768"]

ʻO kēia kahi ʻenehana ʻoi aʻe i pono ʻole pinepine ʻia. Akā inā paʻakikī kāu noi e hoʻokō i kahi ukana kaumaha, hiki iā ʻoe ke hoʻāʻo e hoʻololi i kekahi o kēia mau hoʻonohonoho. ʻIke hou aku e pili ana i kēia kaʻina hana a me ka hoʻonohonoho ʻana i nā waiwai like ʻole - e like me nā manawa a pau ma ka palapala oihana.

I ka hopena

ʻOiai e like paha ʻo Kubernetes i kahi hoʻonā i waho o ka pahu, aia kekahi mau ʻanuʻu koʻikoʻi e pono e hana ʻia e mālama pono i nā noi.

I loko o ka neʻe ʻana i Kubernetes, he mea nui e hahai i ka "pōkole hoʻāʻo hoʻouka": holo i ka noi, hoʻāʻo iā ia ma lalo o ka hoʻouka ʻana, e nānā i nā anana a me nā ʻano scaling, hoʻoponopono i ka hoʻonohonoho e pili ana i kēia ʻikepili, a laila e hana hou i kēia pōʻai.

E noʻonoʻo e pili ana i ke kaʻa i manaʻo ʻia a e hoʻāʻo e hele ma mua o ia e ʻike i nā ʻāpana e haki mua. Me kēia ʻano hoʻohālikelike, hiki i kekahi o nā ʻōlelo aʻoaʻo i hoʻopaʻa ʻia ke lawa no ka holomua. A i ʻole e koi ʻia paha ka hoʻopilikino hohonu.

E nīnau mau iā ʻoe iho i kēia mau nīnau:

  1. ʻEhia mau kumuwaiwai e ʻai ai nā noi a pehea e loli ai kēia nui?
  2. He aha nā koi hoʻonui maoli? ʻEhia ka nui o nā kaʻa e mālama ai ka app ma ka awelika? Pehea e pili ana i ka huakaʻi kiʻekiʻe?
  3. Ehia mau manawa e pono ai ka lawelawe e hoʻonui? Pehea ka wikiwiki o nā pods hou e pono ai ke ala a holo no ka loaʻa ʻana o ke kaʻa?
  4. Pehea ka nani o ka pani ʻana i nā pods? He mea pono anei ia? Hiki paha ke hoʻokō i ka hoʻolaha me ka ʻole o ka downtime?
  5. Pehea e hōʻemi ai i nā pilikia palekana a kaupalena i ka pōʻino mai nā pods i hoʻopaʻa ʻia? Loaʻa nā ʻae a i ʻole ke komo ʻana i nā lawelawe ʻaʻole pono lākou?

Hāʻawi ʻo Kubernetes i kahi kahua kupaianaha e hiki ai iā ʻoe ke hoʻohana i nā hoʻomaʻamaʻa maikaʻi loa e kau i nā tausani o nā lawelawe i loko o kahi hui. Eia naʻe, ʻokoʻa nā noi āpau. I kekahi manawa pono ka hoʻokō ʻana i kahi hana hou aʻe.

ʻO ka mea pōmaikaʻi, hāʻawi ʻo Kubernetes i nā hoʻonohonoho pono e hoʻokō i nā pahuhopu ʻenehana āpau. Ma ka hoʻohana ʻana i ka hui pū ʻana o nā noi waiwai a me nā palena, Liveness and Readiness probes, init containers, network policy, and custom kernel tuning, hiki iā ʻoe ke hoʻokō i ka hana kiʻekiʻe me ka hoʻomanawanui hewa a me ka scalability wikiwiki.

He aha hou aʻe e heluhelu ai:

  1. ʻO nā hana maikaʻi loa a me nā hana maikaʻi loa no ka holo ʻana i nā pahu a me nā Kubernetes i nā kaiapuni hana.
  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