Njira Zabwino Kwambiri Zotengera Kubernetes: Kuwunika Zaumoyo

Njira Zabwino Kwambiri Zotengera Kubernetes: Kuwunika Zaumoyo

TL; DR

  • Kuti mukwaniritse mawonekedwe apamwamba a zotengera ndi ma microservices, zipika ndi ma metric oyambira sizokwanira.
  • Kuti muchira msanga komanso kuti mukhale olimba mtima, ofunsira ayenera kugwiritsa ntchito mfundo ya High Observability Principle (HOP).
  • Pa mlingo wa ntchito, NOP imafuna: kudula mitengo moyenera, kuyang'anitsitsa mosamala, kuyang'ana bwino, ndi kufufuza ntchito / kusintha.
  • Gwiritsani ntchito cheke ngati chinthu cha NOR ReadinessProbe ΠΈ livenessProbe Kubernetes.

Kodi Health Check Template ndi chiyani?

Popanga ntchito yofunika kwambiri komanso yopezeka kwambiri, ndikofunikira kuganizira mbali ngati kulolerana kolakwa. Ntchito imatengedwa kuti ndi yololera zolakwika ngati ichira msanga kuchokera pakulephera. Kugwiritsa ntchito mtambo wamba kumagwiritsa ntchito kamangidwe ka microservices - pomwe gawo lililonse limayikidwa mu chidebe chosiyana. Ndipo kuti muwonetsetse kuti kugwiritsa ntchito pa k8s kulipo kwambiri mukapanga gulu, muyenera kutsatira njira zina. Zina mwa izo ndi Health Check Template. Imatanthauzira momwe pulogalamuyo imalumikizirana ndi ma k8 kuti ndi yathanzi. Izi sizongodziwa ngati pod ikugwira ntchito, komanso momwe imalandirira ndikuyankhira zopempha. Kubernetes akamadziwa zambiri za thanzi la pod, zisankho zanzeru zomwe amapanga pamayendedwe apamsewu komanso kusanja katundu. Choncho, High Observability Principle imalola kuti pulogalamuyo iyankhe zopempha panthawi yake.

High Observability Principle (HOP)

Mfundo yowonekera kwambiri ndi imodzi mwa mfundo zopangira mapulogalamu osungidwa m'mitsuko. Pakupanga ma microservices, mautumiki samasamala momwe zopempha zawo zimagwiritsidwira ntchito (ndipo moyenerera), koma chofunikira ndi momwe amalandirira mayankho kuchokera kuzinthu zomwe amalandira. Mwachitsanzo, kutsimikizira wogwiritsa ntchito, chidebe chimodzi chimatumiza pempho la HTTP kwa wina, kuyembekezera kuyankha mwanjira inayake - ndizo zonse. PythonJS imathanso kukonza pempholi, ndipo Python Flask ikhoza kuyankha. Zotengera zili ngati mabokosi akuda okhala ndi zinthu zobisika. Komabe, mfundo ya NOP imafuna kuti utumiki uliwonse uwonetsere mapeto angapo a API omwe amasonyeza kuti ali ndi thanzi labwino, komanso kukonzekera kwake ndi kulekerera zolakwika. Kubernetes amapempha zizindikilozi kuti aganizire njira zotsatirazi zoyendetsera ndikuwongolera katundu.

Pulogalamu yamtambo yopangidwa mwaluso imalemba zochitika zake zazikulu pogwiritsa ntchito mitsinje wamba ya I/O STDERR ndi STDOUT. Kenako pamabwera ntchito yothandizira, mwachitsanzo filebeat, logstash kapena momveka bwino, kutumiza zipika ku dongosolo loyang'anira lapakati (mwachitsanzo Prometheus) ndi dongosolo lotolera zipika (ELK software suite). Chithunzi chomwe chili pansipa chikuwonetsa momwe pulogalamu yamtambo imagwirira ntchito molingana ndi Health Test Pattern ndi High Observability Principle.

Njira Zabwino Kwambiri Zotengera Kubernetes: Kuwunika Zaumoyo

Momwe mungagwiritsire ntchito Health Check Pattern ku Kubernetes?

Kunja kwa bokosilo, k8s imayang'anira momwe ma pods alili pogwiritsa ntchito owongolera (Mapulogalamu, ReplicaSets, DaemonSets, StatefulSets etc., etc.). Atazindikira kuti potoyo yagwa pazifukwa zina, wowongolera amayesa kuyiyambitsanso kapena kuisunthira kumalo ena. Komabe, pod ikhoza kunena kuti ikugwira ntchito, koma iyo yokha sikugwira ntchito. Tiyeni tipereke chitsanzo: pulogalamu yanu imagwiritsa ntchito Apache ngati seva yapaintaneti, mudayika gawolo pamapoto angapo agululo. Popeza laibulale idakonzedwa molakwika, zopempha zonse ku pulogalamuyi zimayankha ndi code 500 (zolakwika zamkati za seva). Mukayang'ana kubereka, kuyang'ana momwe ma pods alili kumapereka zotsatira zabwino, koma makasitomala amaganiza mosiyana. Tidzafotokoza mkhalidwe wosayenerawu motere:

Njira Zabwino Kwambiri Zotengera Kubernetes: Kuwunika Zaumoyo

Mu chitsanzo chathu, k8s amachita cheke magwiridwe antchito. Pakutsimikizira kwamtunduwu, kubelet imayang'ana mosalekeza momwe ndondomekoyi ikuyendera. Akamvetsetsa kuti ntchitoyi yasiya, adzayambiranso. Ngati cholakwikacho chitha kuthetsedwa mwa kungoyambitsanso pulogalamuyo, ndipo pulogalamuyo idapangidwa kuti itseke cholakwika chilichonse, ndiye kuti njira yowunika thanzi ndiyomwe muyenera kutsatira NOP ndi Health Test Pattern. Chomvetsa chisoni ndichakuti si zolakwika zonse zomwe zimachotsedwa poyambiranso. Pankhaniyi, k8s imapereka njira ziwiri zozama zodziwira zovuta ndi pod: livenessProbe ΠΈ ReadinessProbe.

LivenessProbe

Pa nthawiyi livenessProbe kubelet amachita macheke amitundu itatu: sikuti amangozindikira ngati pod ikuyenda, komanso ngati ili wokonzeka kulandira ndikuyankha mokwanira zopempha:

  • Konzani pempho la HTTP ku pod. Yankho liyenera kukhala ndi kachidindo ka HTTP kuchokera ku 200 mpaka 399. Choncho, ma code 5xx ndi 4xx amasonyeza kuti pod ikukumana ndi mavuto, ngakhale kuti ntchitoyi ikugwira ntchito.
  • Kuti muyese ma pod ndi mautumiki omwe si a HTTP (mwachitsanzo, seva ya makalata ya Postfix), muyenera kukhazikitsa mgwirizano wa TCP.
  • Perekani lamulo losasinthika la pod (mkati). Cheke imatengedwa kuti ndi yopambana ngati nambala yomaliza ya lamulo ndi 0.

Chitsanzo cha momwe izi zimagwirira ntchito. Tanthauzo lotsatira la pod lili ndi pulogalamu ya NodeJS yomwe imaponya zolakwika 500 pa zopempha za HTTP. Kuonetsetsa kuti chidebecho chikuyatsidwanso mukalandira cholakwika chotere, timagwiritsa ntchito parameter ya 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

Izi sizosiyana ndi tanthauzo lina lililonse la pod, koma tikuwonjezera chinthu .spec.containers.livenessProbe. Parameter httpGet amavomereza njira yomwe pempho la HTTP GET limatumizidwa (mu chitsanzo chathu izi ndi /, koma muzochitika zankhondo pakhoza kukhala zina /api/v1/status). Wina livenessProbe amavomereza parameter initialDelaySeconds, yomwe imalangiza ntchito yotsimikizira kuti idikire masekondi angapo. Kuchedwetsako ndikofunikira chifukwa chidebecho chimafunika nthawi kuti chiyambike, ndipo chikayambiranso sichidzapezeka kwakanthawi.

Kuti mugwiritse ntchito izi ku cluster, gwiritsani ntchito:

kubectl apply -f pod.yaml

Pambuyo pa masekondi angapo, mutha kuyang'ana zomwe zili mu pod pogwiritsa ntchito lamulo ili:

kubectl describe pods node500

Pamapeto pa zotsatira, pezani ndi zomwe.

Monga mukuwonera, livenessProbe idayambitsa pempho la HTTP GET, chidebecho chidapanga cholakwika 500 (chomwe chidakonzedwa kuti chichite), ndipo kubelet adayambitsanso.

Ngati mukuganiza kuti pulogalamu ya NideJS idakonzedwa bwanji, nayi app.js ndi Dockerfile zomwe zidagwiritsidwa ntchito:

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

Ndikofunika kuzindikira izi: livenessProbe ingoyambitsanso chidebe ngati sichikanika. Ngati kuyambiransoko sikukonza cholakwika chomwe chikulepheretsa chidebe kuti chizigwira ntchito, kubelet sangathe kuchitapo kanthu kuti akonze vutoli.

ReadinessProbe

ReadinessProbe imagwira ntchito mofananamo ndi livenessProbes (zopempha GET, TCP communications and command execution), kupatulapo zothetsa mavuto. Chidebe chomwe kulephera kuzindikirika sichikuyambiranso, koma chili kutali ndi magalimoto obwera. Tangoganizani kuti chimodzi mwazotengerazo chikuwerengera zambiri kapena chili ndi katundu wolemetsa, zomwe zimapangitsa kuti nthawi yoyankha ichuluke. Pankhani ya livenessProbe, cheke kupezeka kwa mayankho kumayambika (kudzera pa timeoutSeconds cheke parameter), kenako kubelet imayambiranso chidebe. Ikangoyamba, chidebecho chimayamba kugwira ntchito zofunikira kwambiri ndikuyambiranso. Izi zitha kukhala zofunika kwambiri pamapulogalamu omwe amafunikira liwiro loyankha. Mwachitsanzo, galimoto ili pamsewu ikuyembekezera yankho kuchokera kwa seva, yankho likuchedwa - ndipo galimotoyo imalowa pangozi.

Tiyeni tilembe tanthauzo la redinessProbe lomwe lingakhazikitse nthawi yoyankhira GET kuti isapitirire masekondi awiri, ndipo pulogalamuyo iyankha pempho la GET pakadutsa masekondi 5. Fayilo ya pod.yaml iyenera kuwoneka motere:

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

Tiyeni titumize pod ndi kubectl:

kubectl apply -f pod.yaml

Tiyeni tidikire kwa masekondi angapo ndikuwona momwe ReadinessProbe idagwirira ntchito:

kubectl describe pods nodedelayed

Pamapeto pa zotuluka mungathe kuona kuti zochitika zina ndizofanana Ic.

Monga mukuwonera, kubectl sanayambitsenso pod pomwe nthawi yoyang'ana idadutsa masekondi awiri. M’malo mwake, anakana pempholo. Mauthenga obwera amatumizidwa ku ma pod ena, ogwira ntchito.

Dziwani kuti podayo idatsitsidwa, njira za kubectl zikufunsiranso: mayankho ku zopempha za GET sachedwanso.

Poyerekeza, pansipa pali fayilo yosinthidwa ya 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
Kusanabwere kwa mapulogalamu amtambo, zipika zinali njira zowunikira ndikuwunika thanzi la ntchito. Komabe, panalibe njira yochitirapo kanthu kowongolera. Mitengo ikadali yothandiza mpaka pano; imayenera kusonkhanitsidwa ndikutumizidwa ku kachitidwe kotolera zipika kuti iwunike zadzidzidzi komanso kupanga zisankho. [Zonsezi zikhoza kuchitika popanda kugwiritsa ntchito mtambo pogwiritsa ntchito monit, mwachitsanzo, koma ndi k8s zinakhala zosavuta :) - zolemba za mkonzi. ]

Masiku ano, kukonzanso kuyenera kupangidwa pafupifupi nthawi yeniyeni, kotero kuti ntchito siziyeneranso kukhala mabokosi akuda. Ayi, awonetse malekezero omwe amalola kalondolondo kuti afufuze ndi kusonkhanitsa deta yofunikira yokhudzana ndi kayendetsedwe ka kayendetsedwe kake kuti athe kuyankha nthawi yomweyo ngati kuli kofunikira. Izi zimatchedwa Performance Test Design Pattern, yomwe imatsatira High Observability Principle (HOP).

Kubernetes imapereka mitundu iwiri yowunika zaumoyo mwachisawawa: ReadinessProbe ndi livenessProbe. Onse amagwiritsa ntchito macheke amtundu womwewo (zopempha za HTTP GET, kulumikizana kwa TCP ndi kulamula). Amasiyana zisankho zomwe amapanga poyankha zovuta zomwe zili m'matumba. livenessProbe imayambitsanso chidebecho ndi chiyembekezo kuti cholakwikacho sichichitikanso, ndipo ReadinessProbe imalekanitsa pod ndi magalimoto omwe akubwera mpaka chomwe chayambitsa vutoli chitathetsedwa.

Kupanga koyenera kwa pulogalamuyo kuyenera kukhala ndi mitundu yonse iwiri yowunikira ndikuwonetsetsa kuti asonkhanitsa deta yokwanira, makamaka ngati pali chosiyana. Iyeneranso kuwonetsa mathero ofunikira a API omwe amapereka njira yowunikira (Prometheus) ndi ma metric ofunikira azaumoyo.

Source: www.habr.com

Kuwonjezera ndemanga