Fomba fanao tsara indrindra ho an'ny kaontenera Kubernetes: Fanamarinana ara-pahasalamana

Fomba fanao tsara indrindra ho an'ny kaontenera Kubernetes: Fanamarinana ara-pahasalamana

TL, DR

  • Mba hahatongavana amin'ny fanaraha-maso ambony ny kaontenera sy ny microservices dia tsy ampy ny logs sy ny metrika voalohany.
  • Mba hamerenana haingana kokoa sy hampitombo ny faharetana, ny fampiharana dia tokony hampihatra ny High Observability Principle (HOP).
  • Eo amin'ny sehatry ny fampiharana, ny NOP dia mitaky: fanoratana araka ny tokony ho izy, fanaraha-maso akaiky, fanaraha-maso ny fahadiovana, ary ny fanaraha-maso ny fahombiazan'ny / tetezamita.
  • Ampiasao ny fanamarinana ho singa NOR fahavononanaProbe ΠΈ livenessProbe Kubernetes.

Inona no atao hoe mΓ΄dely fanamarinana ara-pahasalamana?

Rehefa mamolavola fampiharana manakiana iraka sy tena misy, dia zava-dehibe ny mieritreritra ny lafiny toy ny fandeferana fahadisoana. Ny fampiharana dia heverina ho mandefitra amin'ny fahadisoana raha sitrana haingana noho ny tsy fahombiazana. Ny fampiharana rahona mahazatra dia mampiasa maritrano microservices - izay ametrahana ny singa tsirairay ao anaty fitoeran-javatra misaraka. Ary mba hahazoana antoka fa tena misy ny fampiharana amin'ny k8s rehefa mamolavola cluster ianao dia mila manaraka lamina sasany. Anisan'izany ny Template Check Health. Izy io dia mamaritra ny fomba ifandraisan'ny fampiharana amin'ny k8s fa mahasalama izy io. Ity dia tsy fampahalalana momba ny hoe mandeha ny pod, fa koa ny fomba fandraisana sy famaliany ny fangatahana. Arakaraky ny hahafantaran'ny Kubernetes momba ny fahasalaman'ny pod, ny fanapahan-kevitra marani-tsaina kokoa raisiny momba ny lalan'ny fifamoivoizana sy ny fifandanjana entana. Noho izany, ny High Observability Principle dia mamela ny fampiharana hamaly ireo fangatahana ara-potoana.

Fitsipika avo lenta (HOP)

Ny fitsipiky ny fijerena ambony dia iray amin'ireo fitsipika ho an'ny famolavolana fampiharana containerized. Ao amin'ny maritrano microservices, ny serivisy dia tsy miraharaha ny fomba fikarakarana ny fangatahan'izy ireo (ary marina izany), fa ny zava-dehibe dia ny fomba fandraisany valiny avy amin'ny serivisy fandraisana. Ohatra, mba hanamarinana mpampiasa iray, misy container iray mandefa fangatahana HTTP amin'ny iray hafa, manantena valiny amin'ny endrika iray - izay ihany. Ny PythonJS dia afaka manamboatra ny fangatahana ihany koa, ary afaka mamaly ny Python Flask. Ny kaontenera dia toy ny boaty mainty miaraka amin'ny atiny miafina. Na izany aza, ny fitsipiky ny NOP dia mitaky ny serivisy tsirairay mba hampiseho ireo teboka API marobe izay manondro ny fahasalamany, ary koa ny fahavononany sy ny fandeferana amin'ny fahadisoana. Mangataka ireo tondro ireo i Kubernetes mba hieritreretana ny dingana manaraka amin'ny fandalovana sy fampifandanjana entana.

Ny rindranasa rahona voarafitra tsara dia mirakitra ny hetsika lehibeny amin'ny fampiasana ny stream I/O mahazatra STDERR sy STDOUT. Manaraka izany dia misy serivisy fanampiny, ohatra ny filebeat, logstash na fluentd, manatitra lozisialy amin'ny rafitra fanaraha-maso afovoany (ohatra Prometheus) ary rafitra fanangonana log (ELK software suite). Ny kisary etsy ambany dia mampiseho ny fomba fiasan'ny fampiharana rahona araka ny Lalam-panadinana ara-pahasalamana sy ny fitsipiky ny fanaraha-maso ambony.

Fomba fanao tsara indrindra ho an'ny kaontenera Kubernetes: Fanamarinana ara-pahasalamana

Ahoana ny fampiharana ny lamina fanaraha-maso ara-pahasalamana ao amin'ny Kubernetes?

Avy ao anaty boaty, k8s dia manara-maso ny satan'ny pods amin'ny fampiasana ny iray amin'ireo mpanara-maso (Deployments, ReplicaSets, DaemonSets, StatefulSets sns., sns.). Rehefa nahita fa nianjera ny pod noho ny antony iray, dia manandrana mamerina azy na mamindra azy amin'ny node hafa ny mpanara-maso. Na izany aza, ny pod iray dia mety mitatitra fa mandeha sy mandeha izy io, saingy tsy mandeha ny tenany. Andeha isika hanome ohatra: mampiasa Apache ho mpizara tranonkala ny fampiharanao, nametraka ilay singa amin'ny pod maromaro amin'ny cluster ianao. Satria diso ny fanamboarana ny tranomboky, ny fangatahana rehetra amin'ny fampiharana dia mamaly amin'ny code 500 (fahadisoan'ny mpizara anatiny). Rehefa manamarina ny fanaterana, ny fanamarinana ny satan'ny pods dia manome vokatra mahomby, saingy hafa ny fiheveran'ny mpanjifa. Holazainay toy izao manaraka izao ity toe-javatra tsy mahafinaritra ity:

Fomba fanao tsara indrindra ho an'ny kaontenera Kubernetes: Fanamarinana ara-pahasalamana

Amin'ny ohatra ataontsika dia manao ny k8s fanamarinana fampiasa. Amin'ity karazana fanamarinana ity, ny kubelet dia manamarina tsy an-kijanona ny toetry ny dingana ao anaty container. Raha vao takany fa nitsahatra ny dingana, dia hamerina izany izy. Raha azo voavaha ny lesoka amin'ny alΓ lan'ny fanombohana fotsiny ny fampiharana, ary ny programa dia natao hanakatona ny fahadisoana rehetra, dia ny fanaraha-maso ara-pahasalamana ihany no ilainao hanaraka ny NOP sy ny Lalam-panadinana ara-pahasalamana. Ny hany mampalahelo dia tsy ny fahadisoana rehetra dia esorina amin'ny alΓ lan'ny famerenana indray. Amin'ity tranga ity, ny k8s dia manolotra fomba 2 lalindalina kokoa hamantarana ny olana amin'ny pod: livenessProbe ΠΈ fahavononanaProbe.

LivenessProbe

Mandritra ny livenessProbe Kubelet dia manao karazana fisavana 3: tsy vitan'ny hoe mamaritra raha mandeha ny pod, fa koa raha vonona handray sy hamaly tsara ny fangatahana:

  • Mametraha fangatahana HTTP amin'ny pod. Ny valiny dia tsy maintsy misy kaody valin'ny HTTP ao anatin'ny 200 ka hatramin'ny 399. Noho izany, ny code 5xx sy 4xx dia manambara fa manana olana ny pod, na dia mandeha aza ny dingana.
  • Mba hitsapana pods amin'ny serivisy tsy HTTP (ohatra, ny mpizara mailaka Postfix), dia mila mametraka fifandraisana TCP ianao.
  • Manaova baiko tsy misy dikany ho an'ny pod (anatiny). Heverina fa mahomby ny fanamarinana raha 0 ny kaody famaranana baiko.

Ohatra iray amin'ny fomba fiasa izany. Ny famaritana pod manaraka dia misy rindranasa NodeJS izay manipy lesoka 500 amin'ny fangatahana HTTP. Mba hahazoana antoka fa miverina indray ny fitoeran-javatra rehefa mahazo fahadisoana toy izany, dia mampiasa ny mari-pamantarana livenessProbe izahay:

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

Tsy misy hafa amin'ny famaritana pod hafa izany, fa manampy zavatra izahay .spec.containers.livenessProbe. fikirana httpGet manaiky ny lalana handefasana ny fangatahana HTTP GET (amin'ny ohatra asehontsika dia ity /, fa amin'ny toe-javatra miady dia mety hisy zavatra toy izany /api/v1/status). LivenessProbe iray hafa dia manaiky masontsivana initialDelaySeconds, izay manome toromarika ny hetsika fanamarinana hiandry segondra vitsivitsy. Ilaina ny fanemorana satria mila fotoana hanombohana ilay kaontenera, ary rehefa averina indray dia tsy ho hita mandritra ny fotoana fohy.

Mba hampiharana ity toe-javatra ity amin'ny kluster dia ampiasao:

kubectl apply -f pod.yaml

Aorian'ny segondra vitsy dia azonao atao ny manamarina ny votoatin'ny pod amin'ny fampiasana ity baiko manaraka ity:

kubectl describe pods node500

Amin'ny faran'ny vokatra, tadiavo izay no.

Araka ny hitanao dia nanomboka fangatahana HTTP GET ny livenessProbe, niteraka hadisoana 500 ny container (izay nokasaina hatao), ary naverin'ny kubelet izany.

Raha manontany tena ianao hoe ahoana no nandrafetana ny fampiharana NideJS, ity ny app.js sy Dockerfile nampiasaina:

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

Zava-dehibe ny manamarika izao: ny livenessProbe dia hamerina ny kaontenera raha tsy mahomby. Raha tsy manitsy ny lesoka manakana ny kaontenera tsy handeha ny famerenana indray, dia tsy ho afaka handray fepetra hanitsiana ilay olana ny kubelet.

fahavononanaProbe

ReadinessProbe dia miasa mitovy amin'ny livenessProbes (fangatahana GET, fifandraisana TCP ary fanatanterahana baiko), afa-tsy amin'ny hetsika famahana olana. Ny kaontenera ahitana ny tsy fahombiazana dia tsy averina, fa mitoka-monina amin'ny fifamoivoizana miditra. Alaivo sary an-tsaina hoe manao kajy be dia be ny iray amin'ireo kaontenera na eo ambanin'ny enta-mavesatra, ka mitombo ny fotoana famaliana. Amin'ny trangan'ny livenessProbe, ny fisavana ny fisian'ny valinteny dia mipoitra (amin'ny alΓ lan'ny mari-pamantarana fanamarinana timeoutSeconds), aorian'izay dia averin'ny kubelet ny fitoeran-javatra. Rehefa natomboka, dia manomboka manao asa be loharanon-karena ny kaontenera ary averina averina indray. Mety ho zava-dehibe ho an'ny fampiharana mila hafainganan'ny valiny izany. Ohatra, ny fiara iray teny an-dalana dia miandry valiny avy amin'ny mpizara, ny valiny dia tara - ary ny fiara dia niharan'ny loza.

Andeha hanoratra famaritana redinessProbe izay hametraka ny fotoana famaliana ny fangatahana GET ho tsy mihoatra ny roa segondra, ary ny fampiharana dia hamaly ny fangatahana GET rehefa afaka 5 segondra. Ny rakitra pod.yaml dia tokony ho toy izao:

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

Andao hametraka pod miaraka amin'ny kubectl:

kubectl apply -f pod.yaml

Andeha hiandry segondra vitsy dia hojerentsika ny fomba fiasan'ny ReadinessProbe:

kubectl describe pods nodedelayed

Any amin'ny faran'ny vokatra dia hitanao fa mitovy ny hetsika sasany Ity iray ity.

Araka ny hitanao dia tsy namerina ny pod ny kubectl rehefa nihoatra ny 2 segondra ny fotoana fanamarinana. Nofoanany kosa ilay fangatahana. Ny fifandraisana miditra dia alefa any amin'ny pods hafa miasa.

Mariho fa izao efa nesorina ny pod, ny kubectl dia mangataka aminy indray: tsy mihemotra intsony ny valin'ny fangatahana GET.

Ho fampitahana, eto ambany ny rakitra app.js novaina:

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
Talohan'ny nahatongavan'ny rindranasa rahona, dia ny logs no fitaovana voalohany hanaraha-maso sy hijerena ny fahasalaman'ny fampiharana. Na izany aza, tsy nisy fomba nandraisany fepetra fanitsiana. Mbola ilaina ny logs amin'izao fotoana izao; mila angonina izy ireo ary alefa any amin'ny rafitra fanangonam-bokatra mba handinihana ny toe-javatra maika sy handraisana fanapahan-kevitra. [Izany rehetra izany dia azo atao raha tsy misy rindranasa rahona amin'ny fampiasana monit, ohatra, fa tamin'ny k8s dia lasa mora kokoa izany :) - naotin'ny mpamoaka lahatsoratra. ]

Amin'izao fotoana izao, ny fanitsiana dia tsy maintsy atao saika amin'ny fotoana tena izy, ka tsy voatery ho boaty mainty intsony ny fampiharana. Tsia, tokony hampiseho teboka izy ireo izay ahafahan'ny rafitra fanaraha-maso manontany sy manangona angona sarobidy momba ny toetry ny dingana mba hahafahan'izy ireo mamaly avy hatrany raha ilaina. Izany dia antsoina hoe Performance Test Design Pattern, izay manaraka ny High Observability Principle (HOP).

Kubernetes dia manolotra karazana fisavana ara-pahasalamana 2 amin'ny alΓ lan'ny default: ReadinessProbe sy livenessProbe. Samy mampiasa karazana fisavana mitovy (fangatahana HTTP GET, fifandraisana TCP ary famonoana baiko). Tsy mitovy izy ireo amin'ny fanapahan-kevitra raisiny ho valin'ny olana ao amin'ny pods. LivenessProbe dia mamerina indray ny kaontenera amin'ny fanantenana fa tsy hiverina intsony ny fahadisoana, ary ny readyProbe dia manasaraka ny pod amin'ny fifamoivoizana miditra mandra-pahavitan'ny olana.

Ny famolavolana fampiharana mety dia tokony ahitana ireo karazana fanamarinana roa ireo ary miantoka fa manangona angona ampy izy ireo, indrindra rehefa misy fanavahana. Tokony hampiseho ihany koa ireo teboka API ilaina izay manome ny rafitra fanaraha-maso (Prometheus) miaraka amin'ny metrika ara-pahasalamana manan-danja.

Source: www.habr.com

Add a comment