Cleachdaidhean as Fheàrr airson Gabhadairean Kubernetes: Sgrùdaidhean Slàinte

Cleachdaidhean as Fheàrr airson Gabhadairean Kubernetes: Sgrùdaidhean Slàinte

TL; DR

  • Gus faicsinneachd àrd de shoithichean agus meanbh-sheirbheisean a choileanadh, chan eil logaichean agus prìomh mheatairean gu leòr.
  • Airson faighinn seachad air nas luaithe agus barrachd tapachd, bu chòir do thagraidhean am Prionnsapal Àrd-amhairc (HOP) a chur an sàs.
  • Aig ìre tagraidh, feumaidh NOP: logadh ceart, sgrùdadh dlùth, sgrùdaidhean slàintealachd, agus lorg coileanaidh / gluasaid.
  • Cleachd seicichean mar eileamaid de NOR ullachaidhProbe и Rannsachadh beòthalachd Cubernetes.

Dè a th’ ann an Teamplaid Sgrùdadh Slàinte?

Nuair a bhios tu a’ dealbhadh tagradh a tha deatamach do mhisean agus a tha ri fhaighinn gu mòr, tha e glè chudromach smaoineachadh air taobh mar fulangas locht. Thathas den bheachd gu bheil tagradh a’ fulang le lochdan ma thig e air ais gu sgiobalta bho fhàiligeadh. Bidh tagradh sgòthan àbhaisteach a’ cleachdadh ailtireachd microservices - far a bheil gach pàirt air a chuir ann an soitheach air leth. Agus gus dèanamh cinnteach gu bheil an tagradh air k8s ri fhaighinn gu mòr nuair a bhios tu a’ dealbhadh cruinneachadh, feumaidh tu pàtrain sònraichte a leantainn. Nam measg tha an Teamplaid Sgrùdadh Slàinte. Tha e a’ mìneachadh mar a bhios an tagradh a’ conaltradh ri k8s gu bheil e fallain. Chan e a-mhàin fiosrachadh a tha seo a thaobh a bheil am pod a’ ruith, ach cuideachd mu mar a gheibh e agus mar a fhreagras e iarrtasan. Mar as motha a bhios fios aig Kubernetes mu shlàinte a’ phoit, is ann as glice a bhios e a’ dèanamh co-dhùnaidhean mu bhith a’ gluasad trafaic agus a’ cothromachadh luchdan. Mar sin, tha am Prionnsabal Àrd Amharc a’ leigeil leis an tagradh freagairt a thoirt do iarrtasan ann an deagh àm.

Prionnsabal Àrd-amhairc (HOP)

Is e am prionnsapal de dh’ amharc àrd aon de prionnsapalan airson a bhith a’ dealbhadh thagraidhean container. Ann an ailtireachd microservices, chan eil dragh aig seirbheisean ciamar a tha an t-iarrtas aca air a làimhseachadh (agus gu ceart), ach is e an rud a tha cudromach mar a gheibh iad freagairtean bho na seirbheisean a tha a’ faighinn. Mar eisimpleir, gus neach-cleachdaidh a dhearbhadh, bidh aon shoitheach a’ cur iarrtas HTTP gu fear eile, an dùil ri freagairt ann an cruth sònraichte - sin a h-uile càil. Faodaidh PythonJS an t-iarrtas a phròiseasadh cuideachd, agus faodaidh Python Flask freagairt. Tha soithichean mar bhogsaichean dubha le susbaint falaichte ri chèile. Ach, tha prionnsapal NOP ag iarraidh air gach seirbheis grunn phuingean crìochnachaidh API a nochdadh a tha a’ nochdadh cho fallain sa tha e, a bharrachd air cho deònach sa tha e agus inbhe fulangas lochdan. Bidh Kubernetes ag iarraidh na comharran sin gus smaoineachadh tro na h-ath cheumannan airson slighe agus cothromachadh luchdan.

Bidh tagradh sgòthan air a dheagh dhealbhadh a’ clàradh a phrìomh thachartasan a’ cleachdadh na sruthan I/O àbhaisteach STDERR agus STDOUT. An ath rud thig seirbheis taice, mar eisimpleir filebeat, logstash no fileanta, a’ lìbhrigeadh logaichean gu siostam sgrùdaidh meadhanaichte (mar eisimpleir Prometheus) agus siostam cruinneachadh logaichean (sreath bathar-bog ELK). Tha an diagram gu h-ìosal a’ sealltainn mar a tha tagradh sgòthan ag obair a rèir Pàtran Deuchainn Slàinte agus Prionnsabal Àrd Amharcachd.

Cleachdaidhean as Fheàrr airson Gabhadairean Kubernetes: Sgrùdaidhean Slàinte

Mar a chuireas tu am Pàtran Sgrùdaidh Slàinte an sàs ann an Kubernetes?

A-mach às a’ bhogsa, bidh k8s a’ cumail sùil air inbhe nam pods a’ cleachdadh aon de na riaghladairean (Cleachdaidhean, Mac-samhail Seataichean, Daemon Seataichean, Suidhichidhean stàiteil msaa, msaa). An dèidh faighinn a-mach gu bheil am pod air tuiteam airson adhbhar air choireigin, bidh an rianadair a’ feuchainn ri ath-thòiseachadh no a ghluasad gu nód eile. Ach, faodaidh pod aithris gu bheil e ag obair, ach chan eil e fhèin ag obair. Bheir sinn eisimpleir: tha an tagradh agad a’ cleachdadh Apache mar fhrithealaiche lìn, chuir thu a-steach am pàirt air grunn pods den bhraisle. Leis gun deach an leabharlann a rèiteachadh gu ceàrr, bidh a h-uile iarrtas chun aplacaid a’ freagairt le còd 500 (mearachd frithealaiche a-staigh). Nuair a bhios tu a’ cumail sùil air lìbhrigeadh, bheir sgrùdadh air inbhe pods toradh soirbheachail, ach bidh luchd-ceannach a’ smaoineachadh ann an dòigh eadar-dhealaichte. Bheir sinn cunntas air an t-suidheachadh neo-mhiannach seo mar a leanas:

Cleachdaidhean as Fheàrr airson Gabhadairean Kubernetes: Sgrùdaidhean Slàinte

Anns an eisimpleir againn, tha k8s a 'dèanamh sgrùdadh comas-gnìomh. Anns an t-seòrsa dearbhaidh seo, bidh an kubelet gu leantainneach a ’sgrùdadh staid a’ phròiseas anns a ’ghobhar. Cho luath ‘s a thuigeas e gu bheil am pròiseas air stad, tòisichidh e air ais. Mas urrainnear a’ mhearachd a rèiteach le bhith dìreach ag ath-thòiseachadh an tagraidh, agus gu bheil am prògram air a dhealbhadh gus mearachd sam bith a dhùnadh, is e sgrùdadh slàinte pròiseas a dh’ fheumas tu gus an NOP agus am Pàtran Deuchainn Slàinte a leantainn. Is e an aon truas nach tèid a h-uile mearachd a chuir às le bhith ag ath-thòiseachadh. Anns a 'chùis seo, tha k8s a' tabhann dà dhòigh nas doimhne air duilgheadasan leis a 'phoit a chomharrachadh: Rannsachadh beòthalachd и ullachaidhProbe.

Rannsachadh beòthalachd

Rè an t-saoghail Rannsachadh beòthalachd Bidh kubelet a ’dèanamh 3 seòrsa de sgrùdaidhean: chan ann a-mhàin a’ dearbhadh a bheil am pod a ’ruith, ach cuideachd a bheil e deiseil airson iarrtasan fhaighinn agus freagairt iomchaidh a thoirt dhaibh:

  • Stèidhich iarrtas HTTP chun pod. Feumaidh còd freagairt HTTP a bhith anns an raon bho 200 gu 399. Mar sin, tha còdan 5xx agus 4xx a 'comharrachadh gu bheil duilgheadasan aig a' pod, ged a tha am pròiseas a 'ruith.
  • Gus deuchainn a dhèanamh air pods le seirbheisean neo-HTTP (mar eisimpleir, am frithealaiche puist Postfix), feumaidh tu ceangal TCP a stèidheachadh.
  • Dèan òrdugh neo-riaghailteach airson pod (taobh a-staigh). Thathas den bheachd gu bheil an t-seic soirbheachail ma tha an còd crìochnachaidh àithne 0.

Eisimpleir de mar a tha seo ag obair. Anns an ath mhìneachadh pod tha tagradh NodeJS a thilgeas mearachd 500 air iarrtasan HTTP. Gus dèanamh cinnteach gu bheil an soitheach air ath-thòiseachadh nuair a gheibh sinn a leithid de mhearachd, bidh sinn a’ cleachdadh am paramadair 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

Chan eil seo eadar-dhealaichte bho mhìneachadh pod sam bith eile, ach tha sinn a’ cur rud ris .spec.containers.livenessProbe. Paramadair httpGet a’ gabhail ris an t-slighe chun an tèid an t-iarrtas HTTP GET a chuir (san eisimpleir againn tha seo /, ach ann an suidheachaidhean sabaid is dòcha gu bheil rudeigin coltach ris /api/v1/status). Bidh livenessProbe eile a’ gabhail ri paramadair initialDelaySeconds, a bheir stiùireadh don obair dearbhaidh feitheamh àireamh shònraichte de dhiog. Tha feum air an dàil oir feumaidh an soitheach ùine airson tòiseachadh, agus nuair a thèid ath-thòiseachadh cha bhith e ri fhaighinn airson ùine.

Gus an suidheachadh seo a chur an sàs ann am brabhsair, cleachd:

kubectl apply -f pod.yaml

Às deidh beagan dhiog, faodaidh tu sgrùdadh a dhèanamh air susbaint a ’phoit leis an àithne a leanas:

kubectl describe pods node500

Aig deireadh an toraidh, lorg is e sin.

Mar a chì thu, thòisich livenessProbe iarrtas HTTP GET, chruthaich an soitheach mearachd 500 (is e sin a chaidh a phrògramadh a dhèanamh), agus thòisich an kubelet air ath-thòiseachadh.

Ma tha thu a’ faighneachd ciamar a chaidh an aplacaid NideJS a phrògramadh, seo an app.js agus Dockerfile a chaidh a chleachdadh:

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')
})

Faidhle docker

FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]

Tha e cudromach seo a thoirt fa-near: cha dèan livenessProbe an soitheach ath-thòiseachadh ach ma dh’ fhailicheas e. Mura h-eil ath-thòiseachadh a 'ceartachadh a' mhearachd a tha a 'cur casg air a' ghobhar bho bhith a 'ruith, cha bhith e comasach don kubelet gnìomh a dhèanamh gus an duilgheadas a cheartachadh.

ullachaidhProbe

Bidh readinessProbe ag obair mar an ceudna ri livenessProbes (iarrtasan GET, conaltradh TCP agus coileanadh òrdughan), ach a-mhàin gnìomhan fuasglaidh. Chan eil an soitheach anns an lorgar an teip air ath-thòiseachadh, ach tha e air a sgaradh bho thrafaig a tha a’ tighinn a-steach. Smaoinich gu bheil aon de na soithichean a’ dèanamh tòrr àireamhachadh no gu bheil e fo eallach trom, ag adhbhrachadh gum bi amannan freagairt ag èirigh. A thaobh livenessProbe, tha an sgrùdadh ruigsinneachd freagairt air a phiobrachadh (tron paramadair sgrùdaidh timeoutSeconds), às deidh sin bidh an kubelet ag ath-thòiseachadh an soitheach. Nuair a thòisicheas e, bidh an soitheach a’ tòiseachadh a’ coileanadh gnìomhan dian-ghoireasan agus air ath-thòiseachadh a-rithist. Faodaidh seo a bhith deatamach airson tagraidhean a dh’ fheumas astar freagairt. Mar eisimpleir, tha càr fhad ‘s a tha e air an rathad a’ feitheamh ri freagairt bhon fhrithealaiche, tha dàil air an fhreagairt - agus bidh an càr ann an tubaist.

Sgrìobh sinn mìneachadh redinessProbe a shuidhicheas ùine freagairt iarrtas GET gun a bhith nas fhaide na dà dhiog, agus freagraidh an tagradh iarrtas GET às deidh 5 diogan. Bu chòir gum biodh am faidhle pod.yaml a’ coimhead mar seo:

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

Feuch an cleachd sinn pod le kubectl:

kubectl apply -f pod.yaml

Fuirichidh sinn diog no dhà agus an uairsin chì sinn mar a dh’ obraich an ullachaidhProbe:

kubectl describe pods nodedelayed

Aig deireadh an toraidh chì thu gu bheil cuid de na tachartasan coltach am fear seo.

Mar a chì thu, cha do rinn kubectl am pod ath-thòiseachadh nuair a chaidh an ùine sgrùdaidh thairis air 2 dhiog. An àite sin, chuir e dheth an t-iarrtas. Tha conaltradh a tha a’ tighinn a-steach air ath-stiùireadh gu pods obrach eile.

Thoir an aire, a-nis gu bheil am pod air a luchdachadh sìos, gu bheil slighean kubectl ag iarraidh air a-rithist: chan eil dàil air freagairtean do iarrtasan GET tuilleadh.

Airson coimeas a dhèanamh, gu h-ìosal tha am faidhle app.js atharraichte:

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
Mus tàinig tagraidhean sgòthan, b’ e logaichean am prìomh dhòigh air slàinte thagraidhean a sgrùdadh agus a sgrùdadh. Ach, cha robh dòigh ann gnìomh ceartachaidh sam bith a ghabhail. Tha logaichean fhathast feumail an-diugh; feumar an cruinneachadh agus an cur gu siostam cruinneachadh log airson mion-sgrùdadh a dhèanamh air suidheachaidhean èiginneach agus co-dhùnaidhean a dhèanamh. [Dh’ fhaodadh seo uile a bhith air a dhèanamh às aonais tagraidhean sgòthan a ’cleachdadh monit, mar eisimpleir, ach le k8s dh’ fhàs e tòrr nas fhasa :) - nota neach-deasachaidh. ]

An-diugh, feumar ceartachaidhean a dhèanamh cha mhòr ann an àm fìor, agus mar sin chan fheum tagraidhean a bhith nam bogsaichean dubha tuilleadh. Chan e, bu chòir dhaibh puingean crìochnachaidh a nochdadh a leigeas le siostaman sgrùdaidh dàta luachmhor a cheasnachadh agus a chruinneachadh mu staid phròiseasan gus an urrainn dhaibh freagairt sa bhad ma tha sin riatanach. Canar Pàtran Dealbhaidh Deuchainn Coileanaidh ris an seo, a tha a’ leantainn a’ Phrionnsabail Àrd-amhairc (HOP).

Bidh Kubernetes a’ tabhann 2 sheòrsa de sgrùdaidhean slàinte gu bunaiteach: Deisealachd Probe agus LivenessProbe. Bidh an dithis a’ cleachdadh na h-aon sheòrsan sgrùdaidhean (iarrtasan HTTP GET, conaltradh TCP agus coileanadh òrdughan). Tha iad diofraichte anns na co-dhùnaidhean a nì iad mar fhreagairt do dhuilgheadasan anns na pods. Bidh livenessProbe ag ath-thòiseachadh an t-soithich an dòchas nach tachair a’ mhearachd a-rithist, agus bidh readinessProbe a’ dealachadh a’ phod bho thrafaig a’ tighinn a-steach gus an tèid adhbhar na trioblaid a rèiteach.

Bu chòir dealbhadh tagraidh ceart a bhith a’ toirt a-steach an dà sheòrsa sgrùdaidh agus dèanamh cinnteach gun cruinnich iad dàta gu leòr, gu sònraichte nuair a thèid eisgeachd a thilgeil. Bu chòir dha cuideachd na puingean crìochnachaidh API riatanach a nochdadh a bheir meatrach slàinte cudromach don t-siostam sgrùdaidh (Prometheus).

Source: www.habr.com

Cuir beachd ann