Best Practices pro Kubernetes Containers: Health SCUTULATUM

Best Practices pro Kubernetes Containers: Health SCUTULATUM

TL, DR

  • Ad magnas observationes assequendas continentia et microservices, ligna et metrica primaria non satis sunt.
  • Ut citius recuperatio et invicta aucta, applicationes ad Maximum Observabilitatem Principii applicarent (HOP).
  • Ad applicationis gradum, NOP requirit: propria logging, magna vigilantia, sanitas inhibet, et effectus / transitus repetens.
  • Usus checks ut elementum NOR readinessProbe ΠΈ livenessProbe Kubernetes.

Quid est Salus Moderare Formula?

Cum missio-critica et prompta applicatio designet, magni momenti est cogitare de tali aspectu tamquam culpa tolerantiae. Applicatio culpae tolerans censetur si cito a defectu convaluerit. Applicatio typica nubes microservices architecturae adhibet, ubi unaquaeque pars in vase separato ponitur. Et ut certa applicationis in k8s valde praesto sit cum botrum designes, certa exemplaria sequi debes. Inter eos est Formula valetudinis. Ita definit applicatio k8s communicat sanum esse. Haec non solum informationes circa an vasculum currit, sed etiam quomodo petitionibus accipit et respondet. Magis Kubernetes scit de sanitate leguminis, eo consilio smarter quod circa negotiationem fuso et onere conpensationem facit. Sic Principium Observabilitas Excelsi applicationem permittit ut opportune respondeant petitionibus.

Princeps Observabilitas Principii (HOP)

Principium altae observabilitatis est principiis designans continentis applicationes. In architectura microservices, officia non curant quomodo petitio eorum discursum est (et merito), sed quae res est quomodo responsa accipiant ab officiis accipiendis. Exempli gratia, ut usorem authenticitatis signo muniant, unus continens petitionem HTTP alteri mittit, exspectans responsionem in forma certa - omnia. PythonJS potest etiam rogando procedere, et Python Flask respondere potest. Vasa sunt sicut capsulae nigrae cum contentis inter se absconditis. Nihilominus, principium NOP, unumquodque officium requirit ut multiplices API terminos ostendat, qui indicant quam sanus sit, ac promptitudo et culpa tolerantiae status. Kubernetes ab his indicibus petit ut per gradus proximos cogitaret ad elaborandum et onere conparandum.

Nubes bene disposita applicationis res praecipuas suas eventus utens vexillum I/O rivi STDERR et STDOUT. Subit ministerium auxiliarium, exempli gratia: filebeat, logstash vel disertus, ligna tradens systemati vigilanti centrali (exempli gratia Prometheus) et ratio collectionis (ELK suite software). Figura infra ostendit quomodo nubes applicationis operatur secundum Exemplum Salutis Testi et Principii Excelsi Observabilitatis.

Best Practices pro Kubernetes Containers: Health SCUTULATUM

Quomodo perscriptio Salutem perscriptio in Kubernetes applicanda est?

Ex archa, k8s monitores statum siliquis utentes uno moderatoris (deployments, ReplicaSets, DaemonSets, StatefulSets etc., etc.). Vasculum cognito quod aliqua de causa incidit, moderator eum silere vel movere ad aliam nodi conatur. Vasculum autem referre licet sursum et currit, sed ipsum non operatur. Exemplum demus: applicatione tua utitur Apache ut servo telae, componentes plures siliquas botri instituisti. Cum bibliotheca perperam configuraretur, omnes petitiones ad applicationem cum codice D respondentes (servo interno errore). Cum partus annotando, siliquis condicionem inhibito prospere eventum dat, sed clientes aliter sentiunt. Hanc commodi condicionem sic describemus:

Best Practices pro Kubernetes Containers: Health SCUTULATUM

In exemplo nostro, k8s facit functionality reprehendo. In hoc genere verificationis, kubelet statum processus in continente continenter coercet. Postquam intellexerit processum finiri, sileo eum. Si error solvi potest per applicationem simpliciter restarting, et programma ad quemlibet errorem claudendum destinatur, tunc processus sanitatis perscriptio est omne opus NOP et Testi Sanitatis Pattern sequi. Sola misericordia est, quia non omnes errores restarting eliminantur. Hoc in casu, k8s praebet 2 vias profundiores ut difficultates cum legumine cognoscas: livenessProbe ΠΈ readinessProbe.

LivenessProbe

in livenessProbe kubelet facit 3 genera compescuum: non solum determinat an vasculum currit, sed etiam an paratus sit ad petitiones recipiendas et adaequate respondere;

  • HTTP peticionem eriges ad vasculum. Responsio debet continere responsum HTTP in actis ab 200 ad 399. Ita signum 5xx et 4xx notum est vasculum habere problemata, etiamsi processus currit.
  • Siliquas probare cum servitiis non-HTTP (exempli gratia, servo epistularum Postfixi), debes nexum TCP constituere.
  • Judicium arbitrarium pro vasculo (interne). Perscriptio felix consideratur si mandatum codicem perfectio 0 est.

Exemplum quomodo haec opera. Sequens vasculum definitio continet applicationis NodeJS qui 500 errorem in petitionibus HTTP iacit. Ut fac ut receptaculum in tali errore recipiatur, utimur Probe parametri;

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

Hoc non differt ab aliqua alia definitione pod, sed adjicimus objectum .spec.containers.livenessProbe. Parameter httpGet accipit iter ad quod petitio mittitur HTTP GET (in exemplo nostro hoc est /, sed in certamine missiones possunt esse aliquid simile /api/v1/status). Alius accipit a modulo livenessProbe initialDelaySecondsquae operationem verificationis exspectandam numero secundorum docet. Mora opus est quia continens tempus incipit incipere, et si restarted per aliquod tempus perpendat.

Ad occasum botri adhibe, utere;

kubectl apply -f pod.yaml

Post paucis secundis, contenta vasculi inhibere potes utendo mandato sequenti:

kubectl describe pods node500

In fine output, invenio Hoc illud est quod.

Ut videre potes, livenessProbe petitionem HTTP incepit, continens errorem 500 generatum (quod programma faciendum erat), et kubelet illud relegebat.

Si miraris quomodo applicationis NideJS programmata sit, hic est app.js et Dockerfile qui adhibita sunt;

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

Gravis est hoc notare: livenessProbe tantum sileo continens si deficit. Si sileo errorem non corrigit, qui continens ne currit, kubelet agere non poterit ut problema corrigere possit.

readinessProbe

readinessProbe similiter operatur ad livenessProbes (precationes GET, TCP communicationes et exsecutionem mandat), nisi ad actiones fermentum. Continens in quo detegitur defectus non restarted, sed a commercii advenientis segregatur. Finge unum e vasis multum calculi faciendo vel sub onere gravi, causans responsionem tempora augere. In casu livenessProbe, responsio promptitudinis perscriptio Urguet (per timeout secundae parametri reprimendam), postquam kubelet receptaculum reprimit. Cum incepit, continens intensiva munerum ope- ram praestare incipit et denuo relegitur. Hoc criticum esse potest in applicationibus quae celeritate responsionis indigent. Exempli gratia, currus dum in via responsum a servo exspectat, responsionis tardatur - et currus accidens incidit.

'Scribamus definitionem pro redinessProbe quae responsio postulatio GET non plus quam duo secunda tempus dabit, et applicatio ad petitionem GET post 5 secundis respondebit. Fasciculus pod.yaml simile hoc debet respicere:

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

Explicemus vasculum cum kubectl;

kubectl apply -f pod.yaml

Exspectemus duas secundas et vide quomodo promptitudinisProbe laboraverunt:

kubectl describe pods nodedelayed

In fine output videre potes quosdam eventuum esse similes hoc unum.

Ut videre potes, kubectl vasculum non sileo cum perscriptio temporis 2 secundis exceditur. Sed ille petitionem resignavit. Communicationes ineuntes ad alias siliquas laborantes rediguntur.

Nota nunc quod vasculum ablatum est, kubectl itinera petita iterum: responsiones ad petitiones GET non diutius tardantur.

Ad comparationem, inferius lima app.js modificata est:

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
Ante adventum nebulae applicationes, tigna prima media erant ad sanationem vigilantiam et inhibitionem applicationis. Sed nullo modo ut aliqua emenda actio. Tigna adhuc hodie utilia sunt, colligenda et missa sunt ad systema collectionis stipendii ad analysndas condiciones exigentias et decisiones faciendas. [Haec omnia sine nube adhibita monita fieri poterant, exempli gratia, sed cum k8s multo facilius facta est :) - nota editoris. ]

Hodie, correctiones fere tempore reali faciendae sunt, ideo applicationes non amplius ut scrinia nigra sint. Imo, fines ostendere debent qui vigilantia systemata quaerendi et pretiosas notitias circa statum processuum colligendi permittunt, ut statim respondere possint, si opus sit. Hoc nomen euismod Test Design Pattern, quod Maximum Observabilitatem Principium sequitur (HOP).

Kubernetes praebet 2 genera sanitatis per defaltam compescit: readinessProbe and livenessProbe. Uterque eisdem generibus checks (HTTP peticionibus GET, communicationibus TCP et executioni mandas). Quales decisiones differunt in siliquis quaestionibus respondens. livenessProbe restarts continens in spe quod error non iterum fiet, et promptitudo Probe vasculum ab advenientis negotiationis dissociat, donec causa quaestionis resolvatur.

Propria applicationis ratio utraque genera reprimendi et curandi debet comprehendere ut notitias satis colligerent, praesertim cum exceptione proiciatur. Debet etiam monstrare necessarias API terminos, qui vigilantia systema (Prometheus) magnis metris sanitatis praebent.

Source: www.habr.com