TL; DR
- Biex tinkiseb osservabilità għolja ta 'kontenituri u mikroservizzi, zkuk u metriċi primarji mhumiex biżżejjed.
- Għal irkupru aktar mgħaġġel u reżiljenza akbar, l-applikazzjonijiet għandhom japplikaw il-Prinċipju ta' Osservabbiltà Għolja (HOP).
- Fil-livell tal-applikazzjoni, NOP jeħtieġ: illoggjar xieraq, monitoraġġ mill-qrib, kontrolli tas-sanità, u traċċar tal-prestazzjoni/tranżizzjoni.
- Uża l-kontrolli bħala element ta' NOR prontezza Sonda и Ħajja Sonda Kubernetes.
X'inhu Mudell ta' Kontroll tas-Saħħa?
Meta tfassal applikazzjoni kritika għall-missjoni u disponibbli ħafna, huwa importanti ħafna li wieħed jaħseb dwar aspett bħal tolleranza għall-ħsarat. Applikazzjoni hija kkunsidrata tolleranti għall-ħsarat jekk tirkupra malajr mill-falliment. Applikazzjoni sħaba tipika tuża arkitettura ta' mikroservizzi - fejn kull komponent jitqiegħed f'kontenitur separat. U sabiex tiżgura li l-applikazzjoni fuq k8s tkun disponibbli ħafna meta tiddisinja cluster, trid issegwi ċerti mudelli. Fosthom hemm il-Mudell tal-Kontroll tas-Saħħa. Jiddefinixxi kif l-applikazzjoni tikkomunika lil k8s li hija b'saħħitha. Din mhix biss informazzjoni dwar jekk il-pod huwiex qed jaħdem, iżda wkoll dwar kif jirċievi u jirrispondi għat-talbiet. Aktar ma Kubernetes ikun jaf dwar is-saħħa tal-pod, iktar jieħu deċiżjonijiet intelliġenti dwar ir-rotot tat-traffiku u l-ibbilanċjar tat-tagħbija. Għalhekk, il-Prinċipju ta' Osservabbiltà Għolja jippermetti li l-applikazzjoni twieġeb għat-talbiet fil-ħin.
Prinċipju ta' Osservabbiltà Għolja (HOP)
Il-prinċipju ta 'osservabilità għolja huwa wieħed minn
Applikazzjoni sħaba mfassla tajjeb tirreġistra l-avvenimenti ewlenin tagħha billi tuża l-flussi standard I/O STDERR u STDOUT. Sussegwentement jiġi servizz awżiljarju, pereżempju filebeat, logstash jew fluentd, li jwassal zkuk għal sistema ċentralizzata ta’ monitoraġġ (pereżempju Prometheus) u sistema ta’ ġbir taz-zkuk (software ELK). Id-dijagramma t'hawn taħt turi kif taħdem applikazzjoni sħaba skont il-Mudell tat-Test tas-Saħħa u l-Prinċipju ta' Osservabbiltà Għolja.
Kif tapplika l-Mudell tal-Kontroll tas-Saħħa f'Kubernetes?
Barra mill-kaxxa, k8s jimmonitorja l-istatus tal-imżiewed billi juża wieħed mill-kontrolluri (
Fl-eżempju tagħna, k8s jagħmel kontroll tal-funzjonalità. F'dan it-tip ta 'verifika, il-kubelet jiċċekkja kontinwament l-istat tal-proċess fil-kontenitur. Ladarba jifhem li l-proċess waqaf, jerġa 'jibda. Jekk l-iżball jista 'jiġi riżolt billi sempliċiment terġa' tibda l-applikazzjoni, u l-programm huwa ddisinjat biex jagħlaq fuq kwalunkwe żball, allura kontroll tas-saħħa tal-proċess huwa dak kollu li għandek bżonn biex issegwi n-NOP u l-Mudell tat-Test tas-Saħħa. L-unika ħasra hija li mhux l-iżbalji kollha jiġu eliminati billi jerġgħu jibdew. F'dan il-każ, k8s joffri 2 modi aktar profondi biex tidentifika problemi bil-pod:
LivenessProbe
Matul il - Ħajja Sonda kubelet iwettaq 3 tipi ta 'kontrolli: mhux biss jiddetermina jekk il-pod huwiex qed jaħdem, iżda wkoll jekk huwiex lest biex jirċievi u jirrispondi b'mod adegwat għat-talbiet:
- Stabbilixxi talba HTTP lill-pod. Ir-rispons għandu jkun fih kodiċi ta 'rispons HTTP fil-medda minn 200 sa 399. Għalhekk, il-kodiċijiet 5xx u 4xx jindikaw li l-pod qed ikollu problemi, minkejja li l-proċess ikun qed jaħdem.
- Biex tittestja pods b'servizzi mhux HTTP (pereżempju, is-server tal-posta Postfix), trid tistabbilixxi konnessjoni TCP.
- Teżegwixxi kmand arbitrarju għal pod (intern). Il-verifika titqies bħala suċċess jekk il-kodiċi tat-tlestija tal-kmand huwa 0.
Eżempju ta’ kif jaħdem dan. Id-definizzjoni tal-pod li jmiss fiha applikazzjoni NodeJS li tarmi żball 500 fuq talbiet HTTP. Biex niżguraw li l-kontenitur jerġa' jinbeda meta nirċievi żball bħal dan, nużaw il-parametru 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
Din mhix differenti minn kwalunkwe definizzjoni oħra tal-pod, iżda qed inżidu oġġett .spec.containers.livenessProbe
. Parametru httpGet
jaċċetta t-triq li għaliha tintbagħat it-talba HTTP GET (fl-eżempju tagħna dan huwa /
, iżda f'xenarji ta 'ġlieda jista' jkun hemm xi ħaġa simili /api/v1/status
). LivenessProbe ieħor jaċċetta parametru initialDelaySeconds
, li jagħti struzzjonijiet lill-operazzjoni ta' verifika biex tistenna numru speċifikat ta' sekondi. Id-dewmien huwa meħtieġ minħabba li l-kontenitur jeħtieġ iż-żmien biex jibda, u meta jerġa 'jibda ma jkunx disponibbli għal xi żmien.
Biex tapplika dan is-setting għal cluster, uża:
kubectl apply -f pod.yaml
Wara ftit sekondi, tista 'tiċċekkja l-kontenut tal-pod billi tuża l-kmand li ġej:
kubectl describe pods node500
Fl-aħħar tal-output, sib
Kif tistgħu taraw, livenessProbe beda talba HTTP GET, il-kontenitur iġġenera żball 500 (li huwa dak li kien ipprogrammat biex jagħmel), u l-kubelet reġgħet bdiet.
Jekk qed tistaqsi kif ġiet ipprogrammata l-applikazzjoni NideJS, hawn huma l-app.js u Dockerfile li ntużaw:
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" ]
Huwa importanti li wieħed jinnota dan: livenessProbe jerġa' jibda l-kontenitur biss jekk ifalli. Jekk bidu mill-ġdid ma jikkoreġix l-iżball li qed jipprevjeni l-kontenitur milli jaħdem, il-kubelet ma jkunx jista’ jieħu azzjoni biex jikkoreġi l-problema.
prontezza Sonda
readinessProbe jaħdem b'mod simili għal livenessProbes (talbiet GET, komunikazzjonijiet TCP u eżekuzzjoni tal-kmand), ħlief għal azzjonijiet ta' soluzzjoni tal-problemi. Il-kontenitur li fih jinstab il-ħsara ma jerġax jinbeda, iżda jiġi iżolat mit-traffiku li jkun dieħel. Immaġina li wieħed mill-kontenituri qed iwettaq ħafna kalkoli jew qiegħed taħt tagħbija tqila, li jikkawża ż-żieda fil-ħinijiet tar-rispons. Fil-każ ta 'livenessProbe, il-kontroll tad-disponibbiltà tar-rispons jiġi attivat (permezz tal-parametru tal-kontroll timeoutSeconds), u wara l-kubelet jerġa' jibda l-kontenitur. Meta jinbeda, il-kontenitur jibda jwettaq kompiti intensivi fir-riżorsi u jerġa 'jinbeda. Dan jista 'jkun kritiku għal applikazzjonijiet li jeħtieġu veloċità ta' rispons. Pereżempju, karozza waqt li tkun fit-triq qed tistenna rispons mis-server, ir-rispons jittardja - u l-karozza tidħol f'inċident.
Ejja niktbu definizzjoni redinessProbe li se tissettja l-ħin tar-rispons tat-talba GET għal mhux aktar minn żewġ sekondi, u l-applikazzjoni tirrispondi għat-talba GET wara 5 sekondi. Il-fajl pod.yaml għandu jidher bħal dan:
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
Ejja niskjeraw pod b'kubectl:
kubectl apply -f pod.yaml
Ejja nistennew ftit sekondi u mbagħad naraw kif ħadem il-reainessProbe:
kubectl describe pods nodedelayed
Fl-aħħar tal-output tista 'tara li xi wħud mill-avvenimenti huma simili
Kif tistgħu taraw, kubectl ma reġax beda l-pod meta l-ħin tal-kontroll qabeż iż-2 sekondi. Minflok, ħassar it-talba. Il-komunikazzjonijiet deħlin huma diretti mill-ġdid lejn imżiewed oħra li jaħdmu.
Innota li issa li l-pod huwa mniżżel, kubectl jerġa' jgħaddi t-talbiet lejh: it-tweġibiet għal talbiet GET m'għadhomx jittardjaw.
Għal tqabbil, hawn taħt huwa l-fajl app.js modifikat:
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
Qabel il-miġja tal-applikazzjonijiet tal-cloud, zkuk kienu l-mezz primarju ta 'monitoraġġ u verifika tas-saħħa tal-applikazzjoni. Madankollu, ma kien hemm l-ebda mezz biex tittieħed xi azzjoni korrettiva. Iċ-zkuk għadhom utli llum; jeħtieġ li jinġabru u jintbagħtu lil sistema ta 'ġbir taz-zkuk biex jiġu analizzati sitwazzjonijiet ta' emerġenza u jittieħdu deċiżjonijiet. [Dan kollu seta 'jsir mingħajr applikazzjonijiet tal-cloud bl-użu ta' monit, pereżempju, iżda bil-k8s sar ħafna aktar faċli :) - nota tal-editur. ]
Illum, il-korrezzjonijiet iridu jsiru kważi f'ħin reali, u għalhekk l-applikazzjonijiet m'għadhomx għandhom ikunu kaxxi suwed. Le, għandhom juru endpoints li jippermettu lis-sistemi ta' monitoraġġ jitolbu u jiġbru dejta siewja dwar l-istat tal-proċessi sabiex ikunu jistgħu jirrispondu istantanjament jekk ikun meħtieġ. Dan jissejjaħ il-Mudell tad-Disinn tat-Test tal-Prestazzjoni, li jsegwi l-Prinċipju ta 'Osservabbiltà Għolja (HOP).
Kubernetes joffri 2 tipi ta’ kontrolli tas-saħħa b’mod awtomatiku: readinessProbe u livenessProbe. It-tnejn jużaw l-istess tipi ta’ kontrolli (talbiet HTTP GET, komunikazzjonijiet TCP u eżekuzzjoni tal-kmand). Huma differenti f'liema deċiżjonijiet jieħdu bi tweġiba għall-problemi fil-miżwed. livenessProbe jerġa' jibda l-kontenitur bit-tama li l-iżball ma jerġax iseħħ, u ReadinessProbe jiżola l-pod mit-traffiku li jkun dieħel sakemm il-kawża tal-problema tiġi solvuta.
Id-disinn xieraq tal-applikazzjoni għandu jinkludi ż-żewġ tipi ta' verifika u jiżgura li jiġbru biżżejjed data, speċjalment meta tintefa' eċċezzjoni. Għandu juri wkoll l-endpoints meħtieġa tal-API li jipprovdu lis-sistema ta 'monitoraġġ (Prometheus) b'metriċi importanti tas-saħħa.
Sors: www.habr.com