IiNgcebiso eziGqwesileyo zeKubernetes Izikhongozeli: Ukujongwa kweMpilo

IiNgcebiso eziGqwesileyo zeKubernetes Izikhongozeli: Ukujongwa kweMpilo

TL; DR

  • Ukufezekisa ukubonwa okuphezulu kwee-container kunye ne-microservices, iilogi kunye nee-metrics eziphambili azonelanga.
  • Ukuchacha ngokukhawuleza kunye nokunyuka kokuqina, izicelo kufuneka zisebenzise i-High Observability Principle (HOP).
  • Kwinqanaba lesicelo, i-NOP ifuna: ukugawulwa ngokufanelekileyo, ukubeka iliso ngokusondeleyo, ukuhlolwa kwengqondo, kunye nokusebenza / ukulandelwa kwenguqu.
  • Sebenzisa iitshekhi njengelungu le-NOR ReadinessProbe ΠΈ livenessProbe Kubernetes.

Yintoni iSakhelo sokuHlola iMpilo?

Xa uyila i-mission-critical and ifumaneka kakhulu isicelo, kubaluleke kakhulu ukucinga malunga nomba onjengokunyamezela iimpazamo. Isicelo sithathwa njengokunyamezela iimpazamo ukuba sichacha ngokukhawuleza ekungaphumelelini. Isicelo esiqhelekileyo sefu sisebenzisa i-microservices architecture - apho icandelo ngalinye lifakwe kwisitya esahlukileyo. Kwaye ukuze uqiniseke ukuba isicelo kwii-k8s sifumaneka kakhulu xa uyila iqela, kufuneka ulandele iipateni ezithile. Phakathi kwazo kukho iSakhelo sokuHlola iMpilo. Ichaza indlela isicelo esinxibelelana ngayo neek8s ukuba isempilweni. Oku akukona nje ulwazi malunga nokuba i-pod iyasebenza, kodwa malunga nendlela efumana ngayo kwaye iphendule izicelo. Okukhona uKubernetes esazi malunga nempilo yepod, izigqibo ezikrelekrele ezenza malunga nokuhamba kwetrafikhi kunye nokulinganisa umthwalo. Ngaloo ndlela, i-High Observability Principle ivumela isicelo ukuba siphendule izicelo ngexesha elifanelekileyo.

Umgaqo oPhakamileyo wokuQwalasela (HOP)

Umgaqo wokujongwa okuphezulu ngomnye we imigaqo yokuyila izicelo ezinezingxobo. Kwi-architecture ye-microservices, iinkonzo azikhathali ukuba isicelo sabo siqhutywe njani (kwaye ngokuchanekileyo), kodwa into ebalulekileyo yindlela abafumana ngayo iimpendulo kwiinkonzo ezifumanayo. Ngokomzekelo, ukuqinisekiswa komsebenzisi, isitya esinye sithumela isicelo se-HTTP kwenye, silindele impendulo kwifomathi ethile - yiyo yonke loo nto. I-PythonJS inokuphinda iqhube isicelo, kwaye iPython Flask inokuphendula. Izikhongozeli zifana neebhokisi ezimnyama ezinemixholo efihlakeleyo enye kwenye. Nangona kunjalo, umgaqo we-NOP ufuna ukuba inkonzo nganye iveze amanqaku amaninzi e-API abonisa indlela enempilo ngayo, kunye nokulungela kwayo kunye nesimo sokunyamezela impazamo. U-Kubernetes ucela ezi zalathisi ukuze acinge ngamanyathelo alandelayo omzila kunye nokulinganisa umthwalo.

Usetyenziso lwelifu oluyilwe kakuhle lubhala iziganeko zalo eziphambili kusetyenziswa imisinga ye-I/O eqhelekileyo STDERR kunye ne-STDOUT. Okulandelayo kuza inkonzo encedisayo, umzekelo i-filebeat, logstash okanye i-fluentd, ukuhambisa iilogi kwi-centralized monitoring system (umzekelo i-Prometheus) kunye nenkqubo yokuqokelela ilogi (ELK software suite). Umzobo ongezantsi ubonisa indlela isicelo sefu esisebenza ngayo ngokuhambelana nePhatheni yoVavanyo lweMpilo kunye noMgaqo oPhezulu wokuQwalasela.

IiNgcebiso eziGqwesileyo zeKubernetes Izikhongozeli: Ukujongwa kweMpilo

Ungasifaka njani iPhetheni yokuJonga iMpilo eKubernetes?

Ngaphandle kwebhokisi, i-k8s ibeka iliso kwimo yeepods isebenzisa omnye wabalawuli (Imisebenzi, IiReplicaSets, DaemonSets, StatefulSets njl. njl.). Emva kokufumanisa ukuba i-pod iwele ngenxa yesizathu esithile, umlawuli uzama ukuyiqalisa kwakhona okanye ukuyihambisa kwenye indawo. Nangona kunjalo, i-pod inokunika ingxelo yokuba iphezulu kwaye iyasebenza, kodwa yona ngokwayo ayisebenzi. Makhe sinike umzekelo: isicelo sakho sisebenzisa iApache njengomncedisi wewebhu, ufake icandelo kwiipods ezininzi zeqela. Ekubeni ilayibrari yayilungiselelwe ngokungalunganga, zonke izicelo kwisicelo ziphendula ngekhowudi ye-500 (impazamo yomncedisi wangaphakathi). Xa ujonga ukuhanjiswa, ukujonga imeko yeepods kunika umphumo ophumelelayo, kodwa abathengi bacinga ngendlela eyahlukileyo. Le meko inganqwenelekiyo siya kuyichaza ngolu hlobo lulandelayo:

IiNgcebiso eziGqwesileyo zeKubernetes Izikhongozeli: Ukujongwa kweMpilo

Kumzekelo wethu, ii-k8s ziyayenza ukujonga ukusebenza. Kolu hlobo loqinisekiso, i-kubelet ijonga ngokuqhubekayo imeko yenkqubo kwisikhongozeli. Xa eqonda ukuba inkqubo imisiwe, uya kuyiqalisa kwakhona. Ukuba impazamo ingasonjululwa ngokuqalisa kwakhona isicelo, kwaye inkqubo yenzelwe ukuvala kuyo nayiphi na impazamo, ngoko inkqubo yokujonga impilo yonke into oyifunayo ukulandela i-NOP kunye nePatheni yoVavanyo lwezeMpilo. Usizi kuphela kukuba ayizizo zonke iimpazamo ezipheliswayo ngokuqalisa kwakhona. Kule meko, ii-k8s zibonelela ngeendlela ezi-2 ezinzulu zokuchonga iingxaki ngepod: livenessProbe ΠΈ ReadinessProbe.

LivenessProbe

Ngexesha livenessProbe I-kubelet yenza ezi-3 iintlobo zokutshekishwa: ayibonisi kuphela ukuba i-pod iyasebenza, kodwa nokuba ikulungele na ukufumana kwaye iphendule ngokwaneleyo kwizicelo:

  • Misela isicelo se-HTTP kwi-pod. Impendulo kufuneka iqulethe ikhowudi yokuphendula ye-HTTP kuluhlu olusuka kwi-200 ukuya kwi-399. Ngaloo ndlela, iikhowudi ze-5xx kunye ne-4xx zibonisa ukuba i-pod ineengxaki, nangona inkqubo isebenza.
  • Ukuvavanya iipod ngeenkonzo ezingezizo ze-HTTP (umzekelo, iseva yeposi ye-Postfix), kufuneka umise uxhumano lwe-TCP.
  • Yenza umyalelo ongekho ngqiqweni wepod (ngaphakathi). Itshekhi ithathwa njengeyimpumelelo ukuba ikhowudi yokugqibezela umyalelo ngu-0.

Umzekelo wendlela oku kusebenza ngayo. Inkcazo elandelayo yepod iqulethe isicelo seNodeJS esiphosa imposiso engama-500 kwizicelo zeHTTP. Ukuqinisekisa ukuba isikhongozeli siqalwa ngokutsha xa sifumana loo mpazamo, sisebenzisa iparameter yelivenessProbe:

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

Oku akwahlukanga kuyo nayiphi na enye inkcazo yepod, kodwa songeza into .spec.containers.livenessProbe... Ipharamitha httpGet yamkela umendo apho isicelo se-HTTP GET sithunyelwa (kumzekelo wethu oku /, kodwa kwiimeko zokulwa kunokubakho into efana nayo /api/v1/status). Enye i-livenessProbe iyayamkela ipharamitha initialDelaySeconds, eyalela umsebenzi wokuqinisekisa ukuba ulinde inani elithile lemizuzwana. Ulibaziseko luyafuneka kuba isikhongozeli sifuna ixesha lokuqalisa, kwaye xa siqalwa ngokutsha siya kube singafumaneki kangangexesha elithile.

Ukusebenzisa olu seto kwiqela, sebenzisa:

kubectl apply -f pod.yaml

Emva kwemizuzwana embalwa, unokujonga imixholo yepod usebenzisa lo myalelo ulandelayo:

kubectl describe pods node500

Ekupheleni kwemveliso, fumana nantso into.

Njengoko ubona, i-livenessProbe iqalise isicelo se-HTTP GET, isikhongozeli sivelise impazamo engama-500 (eyiyo le nto ibicwangciselwe ukuyenza), kwaye i-kubelet yaphinda yayiqalisa.

Ukuba uyazibuza ukuba isicelo se-NideJS sacwangciswa njani, nantsi i-app.js kunye ne-Dockerfile ezathi zasetyenziswa:

usetyenziso

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

Kubalulekile ukuqaphela oku: i-livenessProbe iya kuphinda iqale kwakhona isikhongozeli ukuba asiphumelelanga. Ukuba ukuqalisa kwakhona akuyilungisi impazamo ethintela isikhongozeli ekusebenzeni, i-kubelet ayizukwazi ukuthatha inyathelo ukulungisa ingxaki.

ReadinessProbe

ReadinessProbe isebenza ngokufanayo ne-livenessProbes (izicelo zeGET, unxibelelwano lwe-TCP kunye nokwenziwa komyalelo), ngaphandle kwamanyathelo okulungisa ingxaki. Isikhongozeli apho ukusilela kufunyenwe khona akuphinda kuqalwe, kodwa kubekwe yodwa kwitrafikhi engenayo. Khawucinge ukuba esinye sezikhongozeli senza izibalo ezininzi okanye siphantsi komthwalo onzima, okubangela ukuba amaxesha okuphendula anyuke. Kwimeko ye livenessProbe, impendulo yobukho betshekhi iyaqhutywa (ngexesha lokuphumaSeconds khangela iparamitha), emva kokuba ikubelet iphinda iqale isikhongozeli. Xa iqalisiwe, isikhongozeli siqalisa ukwenza imisebenzi enobutyebi obunzulu kwaye siphinde siqaliswe kwakhona. Oku kunokuba yimfuneko kwizicelo ezifuna isantya sokuphendula. Ngokomzekelo, imoto ngelixa isendleleni ilindele impendulo evela kumncedisi, impendulo ilibazisekile - kwaye imoto ingena engozini.

Masibhale inkcazo ye-redinessProbe eya kumisela ixesha lokuphendula lesicelo se-GET lingabi ngaphezu kwemizuzwana emibini, kwaye isicelo siya kuphendula kwisicelo se-GET emva kwemizuzwana emi-5. Ifayile ye-pod.yaml kufuneka ijongeke ngolu hlobo:

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

Masibeke ipod nge kubectl:

kubectl apply -f pod.yaml

Masilinde imizuzwana embalwa emva koko sibone ukuba i-readinessProbe isebenze njani:

kubectl describe pods nodedelayed

Ekupheleni kwesiphumo unokubona ukuba ezinye zeziganeko ziyafana Le.

Njengoko ubona, i-kubectl ayizange iqalise kwakhona i-pod xa ixesha lokujonga lidlula imizuzwana emi-2. Kunoko, wasirhoxisa eso sicelo. Unxibelelwano olungenayo luthunyelwa kwezinye, iipods ezisebenzayo.

Qaphela ukuba ngoku i-pod ikhutshiwe, iindlela ze-kubectl zicela kuyo kwakhona: iimpendulo kwizicelo ze-GET azisalibaziseka.

Ukuthelekisa, ngezantsi yifayile ye-app.js elungisiweyo:

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
Ngaphambi kokufika kwezicelo zefu, iilogi yayiyeyona ndlela iphambili yokubeka iliso kunye nokujonga impilo yesicelo. Noko ke, kwakungekho ndlela yokuthabatha naliphi na inyathelo lolungiso. Izigodo zisaluncedo nanamhlanje; kufuneka ziqokelelwe kwaye zithunyelwe kwinkqubo yokuqokelela ilog ukuze kuhlalutywe iimeko ezingxamisekileyo kunye nokwenza izigqibo. [Konke oku kunokwenziwa ngaphandle kwezicelo zefu usebenzisa i-monit, umzekelo, kodwa nge-k8s yaba lula kakhulu :) - inqaku lomhleli. ]

Namhlanje, izilungiso kufuneka zenziwe phantse ngexesha lokwenyani, ngoko ke izicelo akusafuneki ukuba zibe ziibhokisi ezimnyama. Hayi, kufuneka babonise isiphelo esivumela iinkqubo zokubeka esweni ukuba zibuze kwaye ziqokelele idatha exabisekileyo malunga nemeko yeenkqubo ukwenzela ukuba baphendule ngokukhawuleza ukuba kuyimfuneko. Oku kubizwa ngokuba yiPhatheni yoYilo loVavanyo lweNtsebenzo, elandela uMmiselo oPhezulu wokuQwalasela (HOP).

I-Kubernetes inikezela ngeendidi ezi-2 zokujonga impilo ngokungagqibekanga: ReadinessProbe kunye ne-livenessProbe. Bobabini basebenzisa iintlobo ezifanayo zokuhlola (izicelo ze-HTTP GET, unxibelelwano lwe-TCP kunye nokwenziwa komyalelo). Bayahluka kwizigqibo abazenzayo ekuphenduleni iingxaki kwi-pods. i-livenessProbe iphinda iqale isikhongozeli ngethemba lokuba impazamo ayisayi kuphinda yenzeke, kwaye i-readinessProbe yahlula i-pod kwi-traffic engenayo de unobangela wengxaki usonjululwe.

Uyilo olufanelekileyo lwesicelo kufuneka lubandakanye zombini iindidi zokujonga kunye nokuqinisekisa ukuba baqokelela idatha eyaneleyo, ngakumbi xa kuphoswa ngaphandle. Kufuneka kwakhona ibonise isiphelo se-API esiyimfuneko esibonelela ngenkqubo yokubeka iliso (i-Prometheus) kunye neemetriki zempilo ezibalulekileyo.

umthombo: www.habr.com

Yongeza izimvo