Mekhoa e Molemo ka ho Fetisisa ea Lijana tsa Kubernetes: Litlhahlobo tsa Bophelo bo Botle

Mekhoa e Molemo ka ho Fetisisa ea Lijana tsa Kubernetes: Litlhahlobo tsa Bophelo bo Botle

TL; DR

  • Ho fihlela ponahalo e phahameng ea lijana le li-microservices, li-log le metrics ea mantlha ha lia lekana.
  • Bakeng sa ho fola ka potlako le matla a eketsehileng a ho tiea, likopo li lokela ho sebelisa Molao-motheo oa High Observability (HOP).
  • Boemong ba ts'ebeliso, NOP e hloka: ho rema lifate ka nepo, ho beha leihlo haufi-ufi, tlhahlobo ea bohloeki, le ts'ebetso ea phetoho.
  • Sebelisa licheke e le karolo ea NOR ReadinessProbe и livenessProbe Kubernetes.

Template ea Tlhahlobo ea Bophelo ke Eng?

Ha ho etsoa moralo oa ts'ebeliso ea bohlokoa le e fumanehang haholo, ho bohlokoa haholo ho nahana ka karolo e joalo ka mamello ea liphoso. Kopo e nkoa e le e mamellang liphoso haeba e ka hlaphoheloa kapele ho se atleheng. Sesebelisoa se tloaelehileng sa leru se sebelisa meralo ea li-microservices - moo karolo e 'ngoe le e' ngoe e behiloeng ka sejaneng se arohaneng. E le ho etsa bonnete ba hore ts'ebeliso ea li-k8 e fumaneha haholo ha u rala sehlopha, u hloka ho latela mekhoa e itseng. E 'ngoe ea tsona ke Template ea Tlhahlobo ea Bophelo bo Botle. E hlalosa hore na kopo e buisana joang le k8s hore e phetse hantle. Sena ha se tlhahisoleseding feela mabapi le hore na pod e ntse e sebetsa, empa hape le hore na e amohela joang le ho arabela likōpo. Ha Kubernetes a tseba haholoanyane ka bophelo bo botle ba pod, liqeto tse bohlale tseo e li etsang mabapi le ho tsamaisa sephethephethe le ho leka-lekanya thepa. Ka hona, Molao-motheo oa High Observability o lumella kopo ho arabela likōpo ka nako e loketseng.

Molao-motheo oa High Observability (HOP)

Molao-motheo oa ho shebella holimo ke o mong oa melao-motheo ea ho rala lisebelisoa tse nang le lisebelisoa. Ka meralo ea li-microservices, lits'ebeletso ha li tsotelle hore na kopo ea bona e sebetsoa joang ('me ho nepahetse), empa se bohlokoa ke hore na ba fumana likarabo joang ho tsoa lits'ebeletso tse amoheloang. Mohlala, ho netefatsa mosebelisi, setshelo se le seng se romella kopo ea HTTP ho e mong, se lebelletse karabo ka mokhoa o itseng - ke phetho. PythonJS e ka boela ea sebetsana le kopo, 'me Python Flask e ka araba. Lijana li tšoana le mabokose a matšo a nang le litaba tse patehileng ho tse ling. Leha ho le joalo, molao-motheo oa NOP o hloka hore tšebeletso e 'ngoe le e' ngoe e pepese lintlha tse ngata tsa API tse bontšang hore na li phetse hantle hakae, hammoho le ho itokisa le boemo ba ho mamella liphoso. Kubernetes o kopa matšoao ana ho nahana ka mehato e latelang ea ho tsamaisa le ho leka-lekanya mojaro.

Sesebelisoa sa maru se entsoeng hantle se boloka liketsahalo tsa mantlha se sebelisa melaetsa e tloaelehileng ea I/O STDERR le STDOUT. Ka mor'a moo ho tla tšebeletso e thusang, mohlala filebeat, logstash kapa ho bua ka mokhoa o phollatsi, ho isa lits'oants'o tsamaisong e bohareng ea tlhokomelo (mohlala Prometheus) le tsamaiso ea pokello ea log (ELK software suite). Sets'oants'o se ka tlase se bonts'a hore na ts'ebeliso ea leru e sebetsa joang ho latela Sebopeho sa Teko ea Bophelo bo Botle le Molao-motheo oa High Observability.

Mekhoa e Molemo ka ho Fetisisa ea Lijana tsa Kubernetes: Litlhahlobo tsa Bophelo bo Botle

Mokhoa oa ho sebelisa mokhoa oa ho hlahloba bophelo bo botle ho Kubernetes?

Ka ntle ho lebokose, k8s e hlokomela boemo ba li-pods e sebelisa e mong oa balaoli (Litšenyehelo, ReplicaSets, DaemonSets, StatefulSets joalo-joalo, joalo-joalo). Ha a se a fumane hore pod e oele ka lebaka le itseng, molaoli o leka ho e qala bocha kapa ho e isa sebakeng se seng. Leha ho le joalo, pod e ka tlaleha hore e ntse e sebetsa, empa ka boeona ha e sebetse. Ha re fane ka mohlala: sesebelisoa sa hau se sebelisa Apache joalo ka seva sa webo, u kentse karolo ho li-pods tse 'maloa tsa sehlopha. Kaha laeborari e ne e hlophisoa ka phoso, likopo tsohle tsa kopo li arabela ka khoutu 500 (phoso ea seva ea ka hare). Ha u hlahloba ho pepa, ho hlahloba boemo ba li-pods ho fana ka sephetho se atlehileng, empa bareki ba nahana ka tsela e fapaneng. Re tla hlalosa boemo bona bo sa rateheng ka tsela e latelang:

Mekhoa e Molemo ka ho Fetisisa ea Lijana tsa Kubernetes: Litlhahlobo tsa Bophelo bo Botle

Mohlala oa rona, k8s e etsa joalo hlahloba tshebetso. Mofuteng ona oa netefatso, kubelet e lula e lekola boemo ba ts'ebetso ka sejaneng. Hang ha a utloisisa hore ts'ebetso e emisitse, o tla e qala hape. Haeba phoso e ka rarolloa ka ho qala kopo hape, 'me lenaneo le etselitsoe ho koala phoso leha e le efe, joale tlhahlobo ea bophelo bo botle ba ts'ebetso ke eona feela eo ue hlokang ho latela NOP le Mohlala oa Tlhahlobo ea Bophelo. Ho soabisang feela ke hore ha se liphoso tsohle tse felisitsoeng ka ho qala bocha. Tabeng ena, k8s e fana ka litsela tse 2 tse tebileng tsa ho khetholla mathata ka pod: livenessProbe и ReadinessProbe.

LivenessProbe

Nakong ea livenessProbe kubelet e etsa mefuta e 3 ea licheke: ha e tsebe feela hore na pod e ntse e sebetsa, empa hape le hore na e se e loketse ho amohela le ho araba likopo ka ho lekana:

  • Etsa kopo ea HTTP ho pod. Karabo e tlameha ho ba le khoutu ea karabo ea HTTP ho tloha ho 200 ho ea ho 399. Kahoo, li-code 5xx le 4xx li bontša hore pod e na le mathata, le hoja ts'ebetso e ntse e sebetsa.
  • Ho hlahloba li-pods ka lits'ebeletso tseo e seng tsa HTTP (mohlala, seva sa poso sa Postfix), o hloka ho theha khokahano ea TCP.
  • Etsa taelo e sa reroang bakeng sa pod (ka hare). Cheke e nkoa e atlehile haeba khoutu ea ho tlatsa taelo e le 0.

Mohlala oa kamoo sena se sebetsang kateng. Tlhaloso e latelang ea pod e na le ts'ebeliso ea NodeJS e kenyang phoso ea 500 ho likopo tsa HTTP. Ho etsa bonnete ba hore sets'oants'o se qalisoa hape ha se fumana phoso e joalo, re sebelisa parameter ea 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

Sena ha se fapane le tlhaloso efe kapa efe ea pod, empa re eketsa ntho .spec.containers.livenessProbe. Paramethara httpGet e amohela tsela eo kopo ea HTTP GET e romelloang ho eona (mohlala oa rona sena ke /, empa maemong a ntoa ho ka ba le ntho e joalo /api/v1/status). LivenessProbe e 'ngoe e amohela paramethara initialDelaySeconds, e laelang ts'ebetso ea ho netefatsa hore e eme palo e itseng ea metsotsoana. Ho hlokahala tieho hobane sets'oants'o se hloka nako ho qala, 'me ha se qala hape se tla be se le sieo ka nako e itseng.

Ho sebelisa setlankana sena sehlopheng, sebelisa:

kubectl apply -f pod.yaml

Kamora metsotsoana e seng mekae, o ka sheba litaba tsa pod o sebelisa taelo e latelang:

kubectl describe pods node500

Qetellong ea tlhahiso, fumana ke seo.

Joalokaha u bona, livenessProbe e qalile kopo ea HTTP GET, sets'oants'o se hlahisitse phoso 500 (e leng seo se neng se reretsoe ho se etsa), 'me kubelet e ile ea qala hape.

Haeba u ntse u ipotsa hore na ts'ebeliso ea NideJS e hlophisitsoe joang, ke tsena app.js le Dockerfile tse ileng tsa sebelisoa:

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" ]

Ho bohlokoa ho ela hloko sena: livenessProbe e tla qala sets'oants'o ha feela e hloleha. Haeba ho qala bocha ho sa lokise phoso e thibelang setshelo ho sebetsa, kubelet e ke ke ea khona ho nka khato ho lokisa bothata.

ReadinessProbe

ReadinessProbe e sebetsa ka mokhoa o ts'oanang le livenessProbes (likopo tsa GET, likhokahano tsa TCP le ts'ebetso ea taelo), ntle le liketso tsa ho rarolla mathata. Setshelo seo ho hloleha ho lemohuoang ho sona ha se qalelle bocha, empa se arotsoe ho sephethephethe se tlang. Ak'u nahane hore e 'ngoe ea lijana e etsa lipalo tse ngata kapa e tlas'a moroalo o boima, e leng se etsang hore nako ea karabo e eketsehe. Tabeng ea livenessProbe, tlhahlobo ea ho fumaneha ha karabelo e hlahisoa (ka nako ea ho hlahloba paramethara ea nakoSeconds), ka mor'a moo kubelet e qala setshelo hape. Ha e qala, setshelo se qala ho etsa mesebetsi e matla ea lisebelisoa 'me se qala hape. Sena se ka ba sa bohlokoa bakeng sa lits'ebetso tse hlokang lebelo la karabo. Ka mohlala, koloi ha e ntse e le tseleng e emetse karabo ho tswa ho seva, karabo e lieha - 'me koloi e kena kotsing.

Ha re ngoleng tlhaloso ea redinessProbe e tla beha nako ea karabo ea kopo ea GET hore e se fete metsotsoana e 'meli, 'me kopo e tla arabela kopo ea GET ka mor'a metsotsoana e 5. Faele ea pod.yaml e lokela ho shebahala tjena:

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

Ha re sebeliseng pod ka kubectl:

kubectl apply -f pod.yaml

Ha re emeng metsotsoana e seng mekae ebe re bona hore na ReadinessProbe e sebelitse joang:

kubectl describe pods nodedelayed

Qetellong ea tlhahiso u ka bona hore liketsahalo tse ling li tšoana Eona ena.

Joalokaha u bona, kubectl ha ea ka ea qala pod hape ha nako ea ho hlahloba e feta metsotsoana e 2. Ho e-na le hoo, o ile a hlakola kōpo eo. Lipuisano tse kenang li fetisetsoa ho li-pods tse ling, tse sebetsang.

Hlokomela hore kaha joale pod e theotsoe, litsela tsa kubectl li e kopa hape: likarabo ho likopo tsa GET ha li sa lieha.

Ha u bapisa, ka tlase ke file e fetotsoeng ea app.js:

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
Pele ho hlaha lits'ebetso tsa leru, li-log e ne e le mokhoa oa mantlha oa ho beha leihlo le ho lekola bophelo ba kopo. Leha ho le joalo, ho ne ho se na mokhoa oa ho nka khato leha e le efe ea ho lokisa. Lifate li ntse li le molemo le kajeno; li hloka ho bokelloa le ho romelloa tsamaisong ea pokello ea li-log bakeng sa ho hlahloba maemo a tšohanyetso le ho etsa liqeto. [Sena sohle se ka etsoa ntle le lits'ebetso tsa leru ho sebelisa monit, mohlala, empa ka k8s e ile ea e-ba bonolo haholoanyane :) - molaetsa oa mohlophisi. ]

Kajeno, litokiso li tlameha ho etsoa hoo e ka bang ka nako ea sebele, kahoo likopo ha li sa tlameha ho ba mabokose a matšo. Che, ba lokela ho bonts'a lintlha tsa ho qetela tse lumellang litsamaiso tsa ho beha leihlo ho botsa le ho bokella lintlha tsa bohlokoa mabapi le boemo ba lits'ebetso e le hore ba ka araba hanghang ha ho hlokahala. Sena se bitsoa Paterone ea Moralo oa Teko ea Ts'ebetso, e latelang Molao-motheo oa High Observability (HOP).

Kubernetes e fana ka mefuta e 2 ea tlhahlobo ea bophelo bo botle ka ho sa feleng: ReadinessProbe le livenessProbe. Ka bobeli li sebelisa mefuta e tšoanang ea licheke (likopo tsa HTTP GET, puisano ea TCP le ts'ebetso ea taelo). Ba fapana ka liqeto tseo ba li etsang ho arabela mathata a li-pods. livenessProbe e tsosolosa setshelo ka tšepo ea hore phoso e ke ke ea etsahala hape, 'me ReadinessProbe e arola pod ho tsoa ho sephethephethe se kenang ho fihlela sesosa sa bothata se rarollotsoe.

Moralo o nepahetseng oa ts'ebeliso o tlameha ho kenyelletsa mefuta e 'meli ea tlhahlobo le ho netefatsa hore ba bokella data e lekaneng, haholo ha ho na le mokhelo. E boetse e lokela ho bonts'a lintlha tse hlokahalang tsa API tse fanang ka tsamaiso ea ho shebella (Prometheus) ka metrics ea bohlokoa ea bophelo bo botle.

Source: www.habr.com

Eketsa ka tlhaloso