Hiki ke pilikia nā hoʻokolohua ola ma Kubernetes

Nānā. unuhi.: Ua ʻike pinepine ka ʻenekinia alakaʻi mai Zalando, Henning Jacobs, i nā pilikia ma waena o nā mea hoʻohana Kubernetes i ka hoʻomaopopo ʻana i ke kumu o nā ʻimi ola (a me ka mākaukau) a me kā lākou hoʻohana pono ʻana. No laila, ua hōʻiliʻili ʻo ia i kona mau manaʻo i loko o kēia memo capacious, e lilo i ʻāpana o ka palapala K8s.

Hiki ke pilikia nā hoʻokolohua ola ma Kubernetes

ʻO nā nānā olakino, i ʻike ʻia ma Kubernetes ʻo nā ʻimi ola (ʻo ia hoʻi, ʻoiaʻiʻo, "nā ho'āʻo ola" - ma kahi o transl.), hiki ke pilikia loa. Manaʻo wau e pale aku iā lākou inā hiki: ʻo nā mea ʻokoʻa wale nō i ka wā e pono ai lākou a ʻike pono ʻoe i nā kikoʻī a me nā hopena o kā lākou hoʻohana. E kamaʻilio kēia hoʻolaha e pili ana i nā loiloi ola a me ka mākaukau, a e haʻi pū iā ʻoe i nā hihia pono a ʻaʻole pono ʻoe e hoʻohana iā lākou.

Ua haʻi aku koʻu hoa hana ʻo Sandor ma Twitter i nā hewa maʻamau i loaʻa iā ia, me nā mea e pili ana i ka hoʻohana ʻana i ka mākaukau mākaukau / liveness probes:

Hiki ke pilikia nā hoʻokolohua ola ma Kubernetes

Ua hoʻonohonoho hewa ʻia livenessProbe hiki ke hoʻonui i nā kūlana kiʻekiʻe (pani hau hau + pahu lōʻihi / manawa hoʻomaka noi) a alakaʻi i nā hopena maikaʻi ʻole e like me ka hāʻule ʻana o ka hilinaʻi. (e nana hoi kaʻu ʻatikala hou e pili ana i ka kaupalena ʻana i ka helu o nā noi ma ka hui K3s+ACME). ʻOi aku ka ʻino i ka wā e hui pū ʻia ai ka ʻimi ola me kahi nānā olakino, ʻo ia kahi waihona waho: e hoʻomaka hou ka hemahema DB i kāu mau pahu a pau!

ʻŌlelo nui "Mai hoʻohana i nā ʻimi ola" i kēia hihia ʻaʻole ia e kōkua nui, no laila e nānā kākou i ke ʻano o ka mākaukau a me nā loiloi ola.

Nānā: ʻO ka hapa nui o ka hoʻāʻo ma lalo nei i hoʻokomo mua ʻia i loko o ka palapala hoʻomohala kūloko o Zalando.

Mākaukau a me Liveness nānā

Hāʻawi ʻo Kubernetes i ʻelua mau hana koʻikoʻi i kapa ʻia nā ʻimi ola a me nā ʻimi mākaukau. Hana lākou i kekahi mau hana i kēlā me kēia manawa—e like me ka hoʻouna ʻana i kahi noi HTTP, ka wehe ʻana i kahi pilina TCP, a i ʻole ka hoʻokō ʻana i kahi kauoha i loko o ka ipu—e hōʻoia i ka hana ʻana o ka noi e like me ka mea i manaʻo ʻia.

Hoʻohana ʻo Kubernetes ʻimi mākaukaue hoʻomaopopo i ka wā e mākaukau ai ka pahu e ʻae i ke kaʻa. Manaʻo ʻia kahi pod no ka hoʻohana ʻana inā mākaukau nā ipu a pau. ʻO ka hoʻohana ʻana i kēia ʻano hana ʻo ia ka mālama ʻana i nā pods i hoʻohana ʻia i hope no nā lawelawe Kubernetes (a ʻoi aku hoʻi ʻo Ingress).

Nā ʻimi ola kōkua i nā Kubernetes e hoʻomaopopo i ka manawa e hoʻomaka hou ai i ka ipu. No ka laʻana, ʻae ʻia kahi hōʻoia iā ʻoe e hoʻopaʻa i kahi paʻa i ka wā e paʻa ai kahi noi ma kahi hoʻokahi. ʻO ka hoʻomaka hou ʻana i ka ipu ma kēia mokuʻāina e kōkua i ka hoʻokuʻu ʻana i ka noi mai ka ʻāina ʻoiai nā hewa, akā hiki ke alakaʻi i nā hemahema cascading (e ʻike i lalo).

Inā ʻoe e hoʻāʻo e kau i kahi hoʻopiʻi noiʻi i hāʻule i ka nānā ʻana i ke ola / mākaukau, e hoʻopaʻa ʻia kāna ʻōwili ʻana ke kali ʻo Kubernetes i ke kūlana. Ready mai nā pahu a pau.

Pākuhi:

Eia kekahi laʻana o ka ʻimi mākaukau e nānā ana i kahi ala /health ma o HTTP me nā hoʻonohonoho paʻamau (wā mawaena: 10 Kekona, manawa hoʻomaha: 1 kekona, paepae holomua: 1, paepae hemahema:3):

# часть общего описания deployment'а/стека
podTemplate:
  spec:
    containers:
    - name: my-container
      # ...
      readinessProbe:
        httpGet:
          path: /health
          port: 8080

koi

  1. No nā lawelawe liʻiliʻi me HTTP endpoint (REST, etc.) e wehewehe mau i kahi noiʻi mākaukau, nāna e nānā inā ua mākaukau ke noi (pod) e ʻae i ke kaʻa.
  2. E hōʻoia i ka mākaukau mākaukau uhi i ka loaʻa ʻana o ke awa kikowaena pūnaewele maoli:
    • ka hoʻohana ʻana i nā awa no nā kumu hoʻokele, i kapa ʻia ʻo "admin" a i ʻole "management" (no ka laʻana, 9090), no readinessProbe, e hōʻoia i ka hoʻihoʻi ʻana i ka OK wale nō inā ua mākaukau ka port HTTP mua (e like me 8080) e ʻae i ke kaʻa*;

      *Ua ʻike au i hoʻokahi hihia ma Zalando kahi i hiki ʻole ai kēia, ʻo ia hoʻi. readinessProbe Ua nānā au i ke awa "hoʻokele", akā ʻaʻole i hoʻomaka ka server ponoʻī e hana ma muli o nā pilikia e hoʻouka ana i ka cache.

    • ʻO ka hoʻopili ʻana i kahi mākaʻikaʻi mākaukau i kahi awa ʻokoʻa hiki ke alakaʻi i ka ʻike ʻole ʻana o ka overload ma ke awa nui i ka nānā olakino (ʻo ia hoʻi, ua piha ka wai puna ma ka server, akā ke hōʻike nei ka nānā olakino ua maikaʻi nā mea āpau. ).
  3. E hōʻoia i kēlā hiki i ka ʻimi mākaukau ke hoʻomaka/ka neʻe ʻana i ka waihona;
    • ʻO ke ala maʻalahi loa e hoʻokō ai i kēia, ʻo ke kelepona ʻana i ka server HTTP wale nō ma hope o ka pau ʻana o ka hoʻomaka ʻana (no ka laʻana, ka neʻe ʻana i kahi waihona mai Alanui lele a laila.); ʻo ia hoʻi, ma kahi o ka hoʻololi ʻana i ke kūlana nānā olakino, mai hoʻomaka wale i ka kikowaena pūnaewele a pau ka neʻe ʻana o ka waihona.

      * Hiki iā ʻoe ke holo i ka neʻe ʻana o ka waihona mai nā pahu init ma waho o ka pod. Ke makemake nei au i nā noi ponoʻī, ʻo ia hoʻi, nā mea i ʻike ʻia e ka pahu noi pehea e lawe ai i ka waihona i loko o ka mokuʻāina makemake ʻole me ka hoʻonohonoho ʻole ʻana o waho.

  4. E hoʻohana httpGet no ka hoʻomākaukau ʻana ma o nā helu hoʻopaʻa olakino maʻamau (no ka laʻana, /health).
  5. E hoʻomaopopo i nā ʻāpana nānā paʻamau (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • ʻo nā koho paʻamau e lilo ka pod mākaukau ʻole ma hope o 30 kekona (3 ʻaʻole i hoʻopaʻa ʻia i ka sanity nānā).
  6. E hoʻohana i kahi awa ʻokoʻa no "admin" a i ʻole "hoʻokele" inā ʻae ka ʻenehana (e laʻa.
    • aka, mai poina e pili ana i ka helu 2.
  7. Inā pono, hiki ke hoʻohana ʻia ka ʻimi hoʻomākaukau e hoʻomaʻamaʻa / hoʻouka i ka cache a hoʻihoʻi i kahi code status 503 a hiki i ka mahana o ka ipu:
    • Paipai pū wau iā ʻoe e heluhelu i ka helu hou startupProbe, ʻike ʻia ma ka mana 1.16 (Ua kākau mākou e pili ana iā ia ma ka ʻōlelo Lūkini maanei - kokoke. unuhi.).

Kāpena

  1. Mai hilinaʻi i nā hilinaʻi waho (e like me nā hale kūʻai ʻikepili) i ka wā e holo ana i nā hoʻāʻo mākaukau/ola - hiki ke alakaʻi i nā hemahema.
    • E like me ka laʻana, e lawe i kahi lawelawe REST stateful me 10 pods e pili ana i hoʻokahi waihona Postgres: ke hilinaʻi ka nānā ʻana i kahi pilina hana i ka DB, hiki ke hāʻule nā ​​pods 10 āpau inā loaʻa kahi lohi ma ka ʻaoʻao pūnaewele/DB - maʻamau. ʻoi aku ka ʻino o nā mea a pau ma mua o ka hiki;
    • E ʻoluʻolu e nānā ʻo Spring Data i ka pili waihona ma ka paʻamau*;

      * ʻO kēia ka hana maʻamau o Spring Data Redis (ma ka liʻiliʻi ʻo ia ka manawa hope aʻu i nānā ai), i alakaʻi ai i kahi "catastrophic" hāʻule: i ka wā i loaʻa ʻole ai ʻo Redis no kahi manawa pōkole, ua "hāʻule nā ​​​​pods".

    • ʻO ka "waho" ma kēia ʻano hiki ke manaʻo i nā pods ʻē aʻe o ka noi hoʻokahi, ʻo ia hoʻi, ʻaʻole pono e hilinaʻi ka helu i ke kūlana o nā pods ʻē aʻe o ka puʻupuʻu hoʻokahi e pale ai i nā ulia cascading:
      • Hiki ke ʻokoʻa nā hualoaʻa no nā noi me ka mokuʻāina i puʻunaue ʻia (e laʻana, ka hoʻopaʻa ʻana i loko o ka memo i loko o nā pods).
  2. Mai hoʻohana i ka ʻimi ola no nā pods (ʻokoʻa nā hihia inā pono lākou a ua ʻike piha ʻoe i nā kikoʻī a me nā hopena o kā lākou hoʻohana):
    • Hiki i ka ʻimi ola ke kōkua i ka hoʻihoʻi ʻana i nā ipu i kau ʻia, akā no ka mea ua loaʻa iā ʻoe ka mana piha ma luna o kāu noi, ʻaʻole pono e hana ʻia nā mea e like me nā kaʻina hana a me nā deadlocks: ʻo ka koho maikaʻi loa ʻo ka hoʻopau ʻana i ka noi a hoʻihoʻi i ke kūlana paʻa mua;
    • ʻO ka hoʻopiʻi ola ʻole e hoʻomaka hou ka ipu, a laila e hoʻonui ai i nā hopena o nā hewa pili i ka hoʻouka ʻana: ʻo ka hoʻomaka hou ʻana i ka ipu e hopena i ka downtime (ma ka liʻiliʻi loa no ka lōʻihi o ka hoʻomaka ʻana o ka noi, e ʻōlelo i 30-kekona kekona), e hana hewa hou. , hoʻonui i ka ukana ma nā pahu ʻē aʻe a me ka hoʻonui ʻana i ka hiki ʻole o kā lākou hāʻule, etc.;
    • ʻO nā loiloi ola i hui pū ʻia me kahi hilinaʻi o waho ka hui ʻino loa, e hoʻoweliweli ana i nā hemahema cascading: kahi lohi iki ma ka ʻaoʻao waihona e alakaʻi i ka hoʻomaka hou ʻana o kāu mau ipu āpau!
  3. Nā ʻāpana o ke ola a me ka mākaukau pono e okoa:
    • hiki iā ʻoe ke hoʻohana i ka ʻimi ola me ka nānā olakino like, akā ʻoi aku ka paepae pane kiʻekiʻe (failureThreshold), no ka laʻana, hāʻawi i ke kūlana mākaukau ʻole ma hope o 3 ho'āʻo a noʻonoʻo ua hāʻule ka ʻimi ola ma hope o 10 mau hoʻāʻo;
  4. Mai hoʻohana i nā loiloi exec, no ka mea pili lākou i nā pilikia i ʻike ʻia e alakaʻi i ke ʻano o nā kaʻina zombie:

Hōʻuluʻulu

  • E hoʻohana i nā ʻimi mākaukau no ka hoʻoholo ʻana i ka wā e mākaukau ai kahi pod no ka loaʻa ʻana o ke kaʻa.
  • E hoʻohana i nā ʻimi ola i ka wā e pono ai.
  • ʻO ka hoʻohana pono ʻole ʻana i ka mākaukau/liveness probes hiki ke alakaʻi i ka hōʻemi ʻana i ka loaʻa a me nā hemahema.

Hiki ke pilikia nā hoʻokolohua ola ma Kubernetes

Nā mea hou aku e pili ana i ke kumuhana

Hōʻano hou i ka helu 1 mai 2019-09-29

E pili ana i nā pahu init no ka neʻe ʻana o ka waihona: Hoʻohui ʻia ka footnote.

Hoʻomanaʻo mai ʻo EJ iaʻu e pili ana i ka PDB: ʻo kekahi o nā pilikia me ka nānā ʻana i ke ola ʻo ka nele o ka hui ʻana ma waena o nā pods. Ua loaʻa iā Kubernetes Nā Puke Kūʻai Kūʻē Pod (PDB) e kaupalena i ka helu o nā hāʻule like ʻole e hiki ke loaʻa i kahi noi, akā naʻe, ʻaʻole i noʻonoʻo nā loiloi i ka PDB. Ma ke kūpono, hiki iā mākou ke haʻi iā K8 e "Hoʻomaka hou i hoʻokahi pod inā hāʻule kāna hoʻāʻo, akā mai hoʻomaka hou iā lākou a pau e pale aku i nā mea ʻino."

Ua hoʻokomo maikaʻi ʻo Bryan: “E hoʻohana i ka ʻimi ola ke ʻike pono ʻoe i ka mea ʻO ka mea maikaʻi loa e hana ai, ʻo ia ke pepehi i ka noi"(eia hou, mai lawe ʻia ʻoe).

Hiki ke pilikia nā hoʻokolohua ola ma Kubernetes

Hōʻano hou i ka helu 2 mai 2019-09-29

E pili ana i ka heluhelu ʻana i ka palapala ma mua o ka hoʻohana ʻana: Ua hana au i ka noi e pili ana (noi hiʻohiʻona) e hoʻohui i nā palapala e pili ana i nā ʻimi ola.

PS mai ka unuhi

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

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