Nga Mahi Pai mo nga Ipu Kubernetes: Nga Tirohanga Hauora

Nga Mahi Pai mo nga Ipu Kubernetes: Nga Tirohanga Hauora

TL; DR

  • Hei whakatutuki i te tino kitea o nga ipu me nga ratonga moroiti, kaore i te rawaka nga raarangi me nga inenga tuatahi.
  • Kia tere ake te whakaora me te kaha ake, me whakamahi nga tono i te Kaupapa Tirohanga Teitei (HOP).
  • I te taumata tono, me hiahia a NOP: te takiuru tika, te aro turuki tata, te arowhai i te maatatanga, me te tirotiro mahi/whakawhitinga.
  • Whakamahia nga arowhai hei huānga o NOR hihikoProbe и livenessProbe Kubernetes.

He aha te tauira Tirohanga Hauora?

I te wa e hoahoa ana i tetahi tono tino nui me te tino watea, he mea tino nui ki te whakaaro mo tetahi ahuatanga penei i te aro ki te he. Ko te tono ka kiia he hee mena ka tere te ora mai i te kore. Ko te tono kapua angamaheni e whakamahi ana i te hoahoanga microservices - ka tuu ia waahanga ki roto i tetahi ipu motuhake. A kia mohio ai kei te tino waatea te tono i runga i nga k8s ina hoahoa koe i tetahi tautau, me whai koe i etahi tauira. Kei roto i a raatau ko te Tauira Tirohanga Hauora. Ka whakatauhia me pehea te korero a te tono ki nga k8 he hauora. Ehara tenei i nga korero anake mo te rere o te pod, engari me pehea te whiwhi me te whakautu ki nga tono. Ko te nui ake o te mohiotanga a Kubernetes mo te hauora o te pona, ko nga whakatau pai ake mo te arataki waka me te whakataurite uta. No reira, ka taea e te Kaupapa Tirohanga Teitei te tono ki te whakautu i nga tono i runga i te waa.

Tikanga Tirotiro Teitei (HOP)

Ko te maataapono o te tirohanga teitei ko tetahi o nga maataapono mo te hoahoa i nga tono ipu. I roto i te hoahoanga microservices, kare nga ratonga e aro ki te whakahaeretanga o ta raatau tono (me te tika ano), engari ko te mea nui me pehea te whiwhi whakautu mai i nga ratonga whiwhi. Hei tauira, ki te whakamotuhēhē i te kaiwhakamahi, ka tukuna e tetahi ipu he tono HTTP ki tetahi atu, me te tumanako he whakautu i roto i tetahi whakatakotoranga - heoi ano. Ka taea hoki e PythonJS te tukatuka i te tono, ka taea e Python Flask te whakautu. He rite nga ipu ki nga pouaka pango me nga mea huna ki a raua ano. Heoi, ko te kaupapa NOP e hiahia ana ia ratonga ki te whakaatu i nga tohu mutunga API maha e tohu ana i te ahua o te hauora, tae atu ki tona reri me te mana o te he. Ka tono a Kubernetes i enei tohu kia taea ai e koe te whakaaro mo nga huarahi e whai ake nei mo te ararere me te whakataurite kawenga.

Ko te tono kapua kua tino hoahoatia ka tuhi i ona kaupapa matua ma te whakamahi i nga awa I/O paerewa STDERR me STDOUT. Whai muri ka puta mai he ratonga awhina, hei tauira filebeat, logstash, fluentd ranei, te tuku rakau ki te punaha aroturuki matua (hei tauira Prometheus) me te punaha kohinga poro (ELK software suite). Ko te hoahoa i raro nei e whakaatu ana i te mahi a te tono kapua i runga i te Tauira Whakamātautau Hauora me te Kaupapa Tirohanga Teitei.

Nga Mahi Pai mo nga Ipu Kubernetes: Nga Tirohanga Hauora

Me pehea te tono i te Tauira Tirotiro Hauora ki Kubernetes?

I waho o te pouaka, ka aro turukihia e te k8s te mana o nga pene ma te whakamahi i tetahi o nga kaiwhakahaere (Nga Whakataunga, Tautuhi Tauira, Nga huinga Daemon, Tautuhinga Stateful etc., etc.). I te kitenga kua hinga te pona mo etahi take, ka ngana te kaiwhakahaere ki te whakaara ano, ki te neke ranei ki tetahi atu pona. Heoi ano, ka kii mai pea he putunga kei te mahi, engari kaore ano i te mahi. Me hoatu he tauira: ka whakamahia e to tono a Apache hei tuumau tukutuku, i whakaurua e koe te waahanga ki runga i etahi putunga kapoi. I te mea i he te whirihora o te whare pukapuka, ka whakautu nga tono katoa ki te tono me te waehere 500 (he hapa o te tūmau o roto). I te wa e tirotirohia ana te tuku, ko te tirotiro i te mana o nga pene ka puta he hua angitu, engari he rereke nga whakaaro o nga kaihoko. Ka whakaahuahia e matou tenei ahuatanga kino e whai ake nei:

Nga Mahi Pai mo nga Ipu Kubernetes: Nga Tirohanga Hauora

I roto i ta maatau tauira, kei te mahi a k8s arowhai mahi. I tenei momo manatoko, ka tirotirohia e te kubelet te ahua o te tukanga i roto i te ipu. Kia mohio ia kua mutu te mahi, ka timata ano ia. Mena ka taea te whakatau i te hapa ma te whakaara ano i te tono, a kua hangaia te papatono ki te kati i runga i tetahi hapa, katahi ko te mahi tirotiro hauora ko nga mea katoa e hiahia ana koe ki te whai i te NOP me te Tauira Whakamātautau Hauora. Ko te pouri anake kaore e whakakorehia nga hapa katoa ma te whakaara ano. I tenei keehi, ka tukuna e k8s nga huarahi hohonu e 2 ki te tautuhi i nga raru o te pona: livenessProbe и hihikoProbe.

LivenessProbe

I te wa livenessProbe E toru nga momo arowhai e mahia ana e kubelet: ehara i te mea ka whakatau noa mena kei te rere te pona, engari mena kua reri ki te whiwhi me te whakautu tika ki nga tono:

  • Whakaturia he tono HTTP ki te pene. Ko te whakautu me whakauru he waehere whakautu HTTP i roto i te awhe mai i te 200 ki te 399. Na, ko nga tohu 5xx me te 4xx he tohu kei te raruraru te pod, ahakoa kei te rere te tukanga.
  • Hei whakamatautau i nga pods me nga ratonga HTTP-kore (hei tauira, te tūmau mēra Postfix), me whakarite hononga TCP.
  • Whakahaerehia he whakahau noa mo te pene (roto). Ko te haki ka kiia he angitu mena he 0 te waehere whakaoti whakahau.

He tauira mo tenei mahi. Kei roto i te whakamaaramatanga pod e whai ake nei he tono NodeJS e maka ana he hapa 500 ki runga i nga tono HTTP. Kia mohio kei te whakaara ano te ipu i te wa e whiwhi ana he hapa penei, ka whakamahia e matou te tawhā livenessProbe:

apiVersion: v1
kind: Pod
metadata:
 name: node500
spec:
 containers:
   - image: magalix/node500
     name: node500
     ports:
       - containerPort: 3000
         protocol: TCP
     livenessProbe:
       httpGet:
         path: /
         port: 3000
       initialDelaySeconds: 5

Kaore tenei i te rereke mai i etahi atu whakamaramatanga pod, engari ka taapirihia he ahanoa .spec.containers.livenessProbe. Tawhā httpGet ka whakaae ki te huarahi e tukuna ai te tono HTTP GET (i roto i ta maatau tauira ko tenei /, engari i roto i nga ahuatanga whawhai tera pea he ahua penei /api/v1/status). Ko tetahi atu livenessProbe ka whakaae ki tetahi tawhā initialDelaySeconds, e tohutohu ana i te mahi manatoko kia tatari mo te maha o nga hēkona. Me whakaroa na te mea me wa ki te timata te ipu, a ka timata ano ka kore e waatea mo etahi wa.

Hei hoatu i tenei tautuhinga ki te tautau, whakamahia:

kubectl apply -f pod.yaml

I muri i etahi hēkona, ka taea e koe te tirotiro i nga ihirangi o te pod ma te whakamahi i te whakahau e whai ake nei:

kubectl describe pods node500

I te mutunga o te putanga, kimihia koia tena.

Kei te kite koe, na livenessProbe i timata he tono HTTP GET, na te ipu i puta he hapa 500 (koinei te mea i whakamaheretia hei mahi), ka timata ano te kubelet.

Mena kei te whakaaro koe me pehea te whakatakotoranga o te tono NideJS, koinei te app.js me Dockerfile i whakamahia:

app.js

var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(500, { "Content-type": "text/plain" });
    res.end("We have run into an errorn");
});

server.listen(3000, function() {
    console.log('Server is running at 3000')
})

Dockerfile

FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]

He mea nui kia mohio koe ki tenei: ka whakaara ano a livenessProbe i te ipu mena ka rahua. Ki te kore e whakatikahia te hapa e aukati ana i te rere o te ipu, ka kore e taea e te kubelet te mahi ki te whakatika i te raru.

hihikoProbe

He rite te mahi a readinessProbe ki te livenessProbes (nga tono GET, nga korero TCP me te whakahaere whakahau), engari mo nga mahi rapurongoā. Ko te ipu ka kitea te rahunga kaore i te whakaara ano, engari kua wehea mai i nga waka taumai. Whakaarohia kei te mahi tetahi o nga ipu i te maha o nga tatauranga, kei raro ranei i nga kawenga taumaha, ka piki ake nga wa whakautu. I roto i te take o livenessProbe, ka puta te arowhai mo te wateatanga (ma te tawhā taki timeoutSeconds), ka mutu ka whakaara ano te kubelet i te ipu. Ka timata, ka timata te ipu ki te mahi i nga mahi whakakaha rawa, ka timata ano. He mea nui tenei mo nga tono e hiahia ana kia tere te whakautu. Hei tauira, he motuka i runga i te huarahi e tatari ana mo te whakautu mai i te kaimau, ka roa te whakautu - ka uru te motuka ki tetahi aitua.

Me tuhi he whakamaramatanga redinessProbe ka whakatau i te wa whakautu tono GET kia kaua e neke ake i te rua hēkona, ka whakautu te tono ki te tono GET i muri i te 5 hēkona. Me penei te ahua o te konae pod.yaml:

apiVersion: v1
kind: Pod
metadata:
 name: nodedelayed
spec:
 containers:
   - image: afakharany/node_delayed
     name: nodedelayed
     ports:
       - containerPort: 3000
         protocol: TCP
     readinessProbe:
       httpGet:
         path: /
         port: 3000
       timeoutSeconds: 2

Tukuna he putunga me te kubectl:

kubectl apply -f pod.yaml

Tatari kia rua hēkona ka kite i te mahi a te ReadinessProbe:

kubectl describe pods nodedelayed

I te mutunga o te putanga ka kite koe he rite etahi o nga huihuinga tenei.

Kei te kite koe, kaore a kubectl i whakaara ano i te putunga ina neke atu te wa tirotiro i te 2 hēkona. Engari, ka whakakorea e ia te tono. Ko nga korero taumai ka tukuna atu ki etahi atu, nga putunga mahi.

Kia maumahara inaianei kua utaina te pod, ka tono ano nga ara kubectl ki a ia: kua kore e whakaroa nga whakautu ki nga tono GET.

Hei whakataurite, kei raro ko te konae app.js kua whakarereketia:

var http = require('http');

var server = http.createServer(function(req, res) {
   const sleep = (milliseconds) => {
       return new Promise(resolve => setTimeout(resolve, milliseconds))
   }
   sleep(5000).then(() => {
       res.writeHead(200, { "Content-type": "text/plain" });
       res.end("Hellon");
   })
});

server.listen(3000, function() {
   console.log('Server is running at 3000')
})

TL; DR
I mua i te taenga mai o nga tono kapua, ko nga rakau te huarahi tuatahi mo te aro turuki me te tirotiro i te hauora o te tono. Heoi, karekau he huarahi hei whakatikatika. Kei te whai hua tonu nga pororakau i enei ra, me kohi me te tuku ki te punaha kohinga rakau hei tātari i nga ahuatanga ohorere me te whakatau whakatau. [Ka taea enei mea katoa me te kore tono kapua ma te whakamahi monit, hei tauira, engari me nga k8 ka tino ngawari ake :) - tuhipoka a te ētita. ]

I tenei ra, me whakatika tata i roto i nga waa tuuturu, no reira kaore he pouaka pango i nga tono. Kao, me whakaatu nga tohu mutunga ka taea e nga punaha aroturuki te uiui me te kohi raraunga utu nui mo te ahua o nga tukanga kia taea ai e ratou te whakautu wawe ina tika. Ka kiia tenei ko te Tauira Hoahoa Whakamātautau Mahi, e whai ana i te Maataupono Tirotiro Nui (HOP).

Ka tukuna e Kubernetes nga momo arowhai hauora e 2 ma te taunoa: ReadinessProbe me livenessProbe. He rite nga momo arowhai e rua (nga tono HTTP GET, nga korero TCP me te mahi whakahau). He rereke nga whakatau ka mahia e ratou hei whakautu i nga raruraru kei roto i nga pene. Ka whakaara ano a livenessProbe i te ipu i runga i te tumanako ka kore e puta ano te he, a ka wehea e ReadinessProbe te pona mai i nga waka taumai kia tau ra ano te take o te raru.

Ko te hoahoa tono e tika ana me whakauru nga momo arowhai e rua me te whakarite kia nui nga raraunga ka kohia, ina koa ka tukuna he tuunga. Me whakaatu ano i nga tohu mutunga API e tika ana e whakarato ana i te punaha aroturuki (Prometheus) me nga waahanga hauora nui.

Source: will.com

Tāpiri i te kōrero