TL; DR
- Kuti mukwaniritse mawonekedwe apamwamba a zotengera ndi ma microservices, zipika ndi ma metric oyambira sizokwanira.
- Kuti muchira msanga komanso kuti mukhale olimba mtima, ofunsira ayenera kugwiritsa ntchito mfundo ya High Observability Principle (HOP).
- Pa mlingo wa ntchito, NOP imafuna: kudula mitengo moyenera, kuyang'anitsitsa mosamala, kuyang'ana bwino, ndi kufufuza ntchito / kusintha.
- Gwiritsani ntchito cheke ngati chinthu cha NOR ReadinessProbe ΠΈ livenessProbe Kubernetes.
Kodi Health Check Template ndi chiyani?
Popanga ntchito yofunika kwambiri komanso yopezeka kwambiri, ndikofunikira kuganizira mbali ngati kulolerana kolakwa. Ntchito imatengedwa kuti ndi yololera zolakwika ngati ichira msanga kuchokera pakulephera. Kugwiritsa ntchito mtambo wamba kumagwiritsa ntchito kamangidwe ka microservices - pomwe gawo lililonse limayikidwa mu chidebe chosiyana. Ndipo kuti muwonetsetse kuti kugwiritsa ntchito pa k8s kulipo kwambiri mukapanga gulu, muyenera kutsatira njira zina. Zina mwa izo ndi Health Check Template. Imatanthauzira momwe pulogalamuyo imalumikizirana ndi ma k8 kuti ndi yathanzi. Izi sizongodziwa ngati pod ikugwira ntchito, komanso momwe imalandirira ndikuyankhira zopempha. Kubernetes akamadziwa zambiri za thanzi la pod, zisankho zanzeru zomwe amapanga pamayendedwe apamsewu komanso kusanja katundu. Choncho, High Observability Principle imalola kuti pulogalamuyo iyankhe zopempha panthawi yake.
High Observability Principle (HOP)
Mfundo yowonekera kwambiri ndi imodzi mwa
Pulogalamu yamtambo yopangidwa mwaluso imalemba zochitika zake zazikulu pogwiritsa ntchito mitsinje wamba ya I/O STDERR ndi STDOUT. Kenako pamabwera ntchito yothandizira, mwachitsanzo filebeat, logstash kapena momveka bwino, kutumiza zipika ku dongosolo loyang'anira lapakati (mwachitsanzo Prometheus) ndi dongosolo lotolera zipika (ELK software suite). Chithunzi chomwe chili pansipa chikuwonetsa momwe pulogalamu yamtambo imagwirira ntchito molingana ndi Health Test Pattern ndi High Observability Principle.
Momwe mungagwiritsire ntchito Health Check Pattern ku Kubernetes?
Kunja kwa bokosilo, k8s imayang'anira momwe ma pods alili pogwiritsa ntchito owongolera (
Mu chitsanzo chathu, k8s amachita cheke magwiridwe antchito. Pakutsimikizira kwamtunduwu, kubelet imayang'ana mosalekeza momwe ndondomekoyi ikuyendera. Akamvetsetsa kuti ntchitoyi yasiya, adzayambiranso. Ngati cholakwikacho chitha kuthetsedwa mwa kungoyambitsanso pulogalamuyo, ndipo pulogalamuyo idapangidwa kuti itseke cholakwika chilichonse, ndiye kuti njira yowunika thanzi ndiyomwe muyenera kutsatira NOP ndi Health Test Pattern. Chomvetsa chisoni ndichakuti si zolakwika zonse zomwe zimachotsedwa poyambiranso. Pankhaniyi, k8s imapereka njira ziwiri zozama zodziwira zovuta ndi pod:
LivenessProbe
Pa nthawiyi livenessProbe kubelet amachita macheke amitundu itatu: sikuti amangozindikira ngati pod ikuyenda, komanso ngati ili wokonzeka kulandira ndikuyankha mokwanira zopempha:
- Konzani pempho la HTTP ku pod. Yankho liyenera kukhala ndi kachidindo ka HTTP kuchokera ku 200 mpaka 399. Choncho, ma code 5xx ndi 4xx amasonyeza kuti pod ikukumana ndi mavuto, ngakhale kuti ntchitoyi ikugwira ntchito.
- Kuti muyese ma pod ndi mautumiki omwe si a HTTP (mwachitsanzo, seva ya makalata ya Postfix), muyenera kukhazikitsa mgwirizano wa TCP.
- Perekani lamulo losasinthika la pod (mkati). Cheke imatengedwa kuti ndi yopambana ngati nambala yomaliza ya lamulo ndi 0.
Chitsanzo cha momwe izi zimagwirira ntchito. Tanthauzo lotsatira la pod lili ndi pulogalamu ya NodeJS yomwe imaponya zolakwika 500 pa zopempha za HTTP. Kuonetsetsa kuti chidebecho chikuyatsidwanso mukalandira cholakwika chotere, timagwiritsa ntchito parameter ya 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
Izi sizosiyana ndi tanthauzo lina lililonse la pod, koma tikuwonjezera chinthu .spec.containers.livenessProbe
. Parameter httpGet
amavomereza njira yomwe pempho la HTTP GET limatumizidwa (mu chitsanzo chathu izi ndi /
, koma muzochitika zankhondo pakhoza kukhala zina /api/v1/status
). Wina livenessProbe amavomereza parameter initialDelaySeconds
, yomwe imalangiza ntchito yotsimikizira kuti idikire masekondi angapo. Kuchedwetsako ndikofunikira chifukwa chidebecho chimafunika nthawi kuti chiyambike, ndipo chikayambiranso sichidzapezeka kwakanthawi.
Kuti mugwiritse ntchito izi ku cluster, gwiritsani ntchito:
kubectl apply -f pod.yaml
Pambuyo pa masekondi angapo, mutha kuyang'ana zomwe zili mu pod pogwiritsa ntchito lamulo ili:
kubectl describe pods node500
Pamapeto pa zotsatira, pezani
Monga mukuwonera, livenessProbe idayambitsa pempho la HTTP GET, chidebecho chidapanga cholakwika 500 (chomwe chidakonzedwa kuti chichite), ndipo kubelet adayambitsanso.
Ngati mukuganiza kuti pulogalamu ya NideJS idakonzedwa bwanji, nayi app.js ndi Dockerfile zomwe zidagwiritsidwa ntchito:
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" ]
Ndikofunika kuzindikira izi: livenessProbe ingoyambitsanso chidebe ngati sichikanika. Ngati kuyambiransoko sikukonza cholakwika chomwe chikulepheretsa chidebe kuti chizigwira ntchito, kubelet sangathe kuchitapo kanthu kuti akonze vutoli.
ReadinessProbe
ReadinessProbe imagwira ntchito mofananamo ndi livenessProbes (zopempha GET, TCP communications and command execution), kupatulapo zothetsa mavuto. Chidebe chomwe kulephera kuzindikirika sichikuyambiranso, koma chili kutali ndi magalimoto obwera. Tangoganizani kuti chimodzi mwazotengerazo chikuwerengera zambiri kapena chili ndi katundu wolemetsa, zomwe zimapangitsa kuti nthawi yoyankha ichuluke. Pankhani ya livenessProbe, cheke kupezeka kwa mayankho kumayambika (kudzera pa timeoutSeconds cheke parameter), kenako kubelet imayambiranso chidebe. Ikangoyamba, chidebecho chimayamba kugwira ntchito zofunikira kwambiri ndikuyambiranso. Izi zitha kukhala zofunika kwambiri pamapulogalamu omwe amafunikira liwiro loyankha. Mwachitsanzo, galimoto ili pamsewu ikuyembekezera yankho kuchokera kwa seva, yankho likuchedwa - ndipo galimotoyo imalowa pangozi.
Tiyeni tilembe tanthauzo la redinessProbe lomwe lingakhazikitse nthawi yoyankhira GET kuti isapitirire masekondi awiri, ndipo pulogalamuyo iyankha pempho la GET pakadutsa masekondi 5. Fayilo ya pod.yaml iyenera kuwoneka motere:
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
Tiyeni titumize pod ndi kubectl:
kubectl apply -f pod.yaml
Tiyeni tidikire kwa masekondi angapo ndikuwona momwe ReadinessProbe idagwirira ntchito:
kubectl describe pods nodedelayed
Pamapeto pa zotuluka mungathe kuona kuti zochitika zina ndizofanana
Monga mukuwonera, kubectl sanayambitsenso pod pomwe nthawi yoyang'ana idadutsa masekondi awiri. Mβmalo mwake, anakana pempholo. Mauthenga obwera amatumizidwa ku ma pod ena, ogwira ntchito.
Dziwani kuti podayo idatsitsidwa, njira za kubectl zikufunsiranso: mayankho ku zopempha za GET sachedwanso.
Poyerekeza, pansipa pali fayilo yosinthidwa ya app.js:
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
Kusanabwere kwa mapulogalamu amtambo, zipika zinali njira zowunikira ndikuwunika thanzi la ntchito. Komabe, panalibe njira yochitirapo kanthu kowongolera. Mitengo ikadali yothandiza mpaka pano; imayenera kusonkhanitsidwa ndikutumizidwa ku kachitidwe kotolera zipika kuti iwunike zadzidzidzi komanso kupanga zisankho. [Zonsezi zikhoza kuchitika popanda kugwiritsa ntchito mtambo pogwiritsa ntchito monit, mwachitsanzo, koma ndi k8s zinakhala zosavuta :) - zolemba za mkonzi. ]
Masiku ano, kukonzanso kuyenera kupangidwa pafupifupi nthawi yeniyeni, kotero kuti ntchito siziyeneranso kukhala mabokosi akuda. Ayi, awonetse malekezero omwe amalola kalondolondo kuti afufuze ndi kusonkhanitsa deta yofunikira yokhudzana ndi kayendetsedwe ka kayendetsedwe kake kuti athe kuyankha nthawi yomweyo ngati kuli kofunikira. Izi zimatchedwa Performance Test Design Pattern, yomwe imatsatira High Observability Principle (HOP).
Kubernetes imapereka mitundu iwiri yowunika zaumoyo mwachisawawa: ReadinessProbe ndi livenessProbe. Onse amagwiritsa ntchito macheke amtundu womwewo (zopempha za HTTP GET, kulumikizana kwa TCP ndi kulamula). Amasiyana zisankho zomwe amapanga poyankha zovuta zomwe zili m'matumba. livenessProbe imayambitsanso chidebecho ndi chiyembekezo kuti cholakwikacho sichichitikanso, ndipo ReadinessProbe imalekanitsa pod ndi magalimoto omwe akubwera mpaka chomwe chayambitsa vutoli chitathetsedwa.
Kupanga koyenera kwa pulogalamuyo kuyenera kukhala ndi mitundu yonse iwiri yowunikira ndikuwonetsetsa kuti asonkhanitsa deta yokwanira, makamaka ngati pali chosiyana. Iyeneranso kuwonetsa mathero ofunikira a API omwe amapereka njira yowunikira (Prometheus) ndi ma metric ofunikira azaumoyo.
Source: www.habr.com