Aku; DR
- No ka hoʻokō ʻana i ka nānā kiʻekiʻe o nā ipu a me nā microservices, ʻaʻole lawa nā lāʻau a me nā metric mua.
- No ka hoʻihoʻi wikiwiki a me ka hoʻonui ʻana i ke kūpaʻa, pono nā noi e hoʻopili i ka High Observability Principle (HOP).
- Ma ka pae noi, koi ʻo NOP: ka hoʻopaʻa inoa kūpono, ka nānā pono ʻana, ka nānā pono ʻana, a me ka hoʻokō / hoʻololi ʻana.
- E hoʻohana i nā māka ma ke ʻano he mea o NOR ReadinessProbe и livenessProbe Kubernetes.
He aha ke ʻano hōʻoia olakino?
I ka hoʻolālā ʻana i kahi noi koʻikoʻi a loaʻa loa, he mea nui e noʻonoʻo e pili ana i kahi ʻano e like me ka hoʻomanawanui hewa. Manaʻo ʻia kahi palapala noi he hoʻomanawanui hewa inā hoʻi koke mai ka hāʻule ʻole. Hoʻohana ʻia kahi noi kapua maʻamau i kahi hoʻolālā microservices - kahi e waiho ʻia ai kēlā me kēia ʻāpana i kahi pahu ʻokoʻa. A i mea e hōʻoia i ka loaʻa ʻana o ka noi ma k8s i ka wā e hoʻolālā ai ʻoe i kahi puʻupuʻu, pono ʻoe e hahai i kekahi mau hiʻohiʻona. Aia ma waena o lākou ka Palapala Hōʻoia Ola. E wehewehe i ke ʻano o ke kamaʻilio ʻana o ka noi iā k8s i ke olakino. ʻAʻole kēia wale ka ʻike e pili ana i ka holo ʻana o ka pod, akā e pili ana i ka loaʻa ʻana a me ka pane ʻana i nā noi. ʻOi aku ka ʻike o nā Kubernetes e pili ana i ke olakino o ka pod, ʻoi aku ka maikaʻi o nā hoʻoholo ʻana e pili ana i ka hoʻokele kaʻa a me ke kaupaona ʻana. No laila, ʻae ka High Observability Principle i ka noi e pane i nā noi i kahi manawa kūpono.
Kuʻuna ʻIke Kiʻekiʻe (HOP)
ʻO ke kumu o ka nānā kiʻekiʻe kekahi o
Hoʻopaʻa ʻia kahi palapala noi kapua i hoʻolālā maikaʻi ʻia i kāna mau hanana nui me ka hoʻohana ʻana i nā kahawai I/O maʻamau STDERR a me STDOUT. E hele mai ana kahi lawelawe kōkua, no ka laʻana filebeat, logstash a fluentd, e hāʻawi ana i nā lāʻau i kahi ʻōnaehana nānā kikowaena (e laʻa ʻo Prometheus) a me kahi ʻōnaehana hōʻiliʻili lāʻau (ELK software suite). Hōʻike ke kiʻikuhi ma lalo i ke ʻano o ka hana ʻana o ke ao e like me ka Health Test Pattern a me ka High Observability Principle.
Pehea e hoʻopili ai i ke ʻano hōʻoia olakino ma Kubernetes?
Ma waho o ka pahu, nānā nā k8s i ke kūlana o nā pods me ka hoʻohana ʻana i kekahi o nā mea hoʻokele (
I kā mākou laʻana, hana ʻo k8s nānā hana. Ma kēia ʻano hōʻoia, nānā mau ka kubelet i ke kūlana o ke kaʻina hana i loko o ka ipu. Ke hoʻomaopopo ʻo ia ua pau ke kaʻina hana, e hoʻomaka hou ʻo ia. Inā hiki ke hoʻoholo ʻia ka hewa ma ka hoʻomaka hou ʻana i ka noi, a ua hoʻolālā ʻia ka papahana e pani i kekahi hewa, a laila ʻo ke kaʻina hana nānā olakino wale nō e pono ai ʻoe e hahai i ka NOP a me ka Health Test Pattern. ʻO ka mea minamina wale nō ʻaʻole i pau nā hewa a pau ma ka hoʻomaka hou ʻana. I kēia hihia, hāʻawi ʻo k8s i 2 mau ala hohonu e ʻike ai i nā pilikia me ka pod:
LivenessProbe
Ma ka livenessProbe Hana ʻo kubelet i nā ʻano loiloi 3: ʻaʻole wale e hoʻoholo inā e holo ana ka pod, akā inā mākaukau paha ia e loaʻa a pane pono i nā noi:
- E hoʻonohonoho i kahi noi HTTP i ka pod. Pono e loaʻa i ka pane kahi helu pane HTTP ma ka laulā mai 200 a 399. No laila, nā code 5xx a me 4xx e hōʻike ana he pilikia ka pod, ʻoiai ke holo nei ke kaʻina hana.
- No ka hoʻāʻo ʻana i nā pods me nā lawelawe HTTP ʻole (no ka laʻana, ke kikowaena leka uila Postfix), pono ʻoe e hoʻokumu i kahi pilina TCP.
- E hoʻokō i kahi kauoha kūʻokoʻa no kahi pod (i loko). Manaʻo ʻia ka holomua inā he 0 ke code hoʻopau kauoha.
He laʻana o kēia hana. ʻO ka wehewehe pod aʻe he noi NodeJS e hoʻolei ana i kahi hewa 500 ma nā noi HTTP. No ka hōʻoia ʻana e hoʻomaka hou ka pahu i ka wā e loaʻa ai kēlā hewa, hoʻohana mākou i ke ʻano 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
ʻAʻole ʻokoʻa kēia me nā wehewehe pod ʻē aʻe, akā ke hoʻohui nei mākou i kahi mea .spec.containers.livenessProbe
... Parameter httpGet
ʻae i ke ala i hoʻouna ʻia ai ka noi HTTP GET (i kā mākou hiʻohiʻona ʻo kēia /
, akā i nā hiʻohiʻona hakakā aia kekahi mea like /api/v1/status
). ʻAe kekahi livenessProbe i kahi ʻāpana initialDelaySeconds
, e aʻo i ka hana hōʻoia e kali i kahi helu o nā kekona. Pono ka lohi no ka mea e pono ana ka pahu e hoʻomaka, a i ka wā e hoʻomaka hou ai, ʻaʻole loaʻa ia no kekahi manawa.
No ka hoʻohana ʻana i kēia hoʻonohonoho i kahi hui, e hoʻohana:
kubectl apply -f pod.yaml
Ma hope o kekahi mau kekona, hiki iā ʻoe ke nānā i nā mea o ka pod me ka hoʻohana ʻana i kēia kauoha:
kubectl describe pods node500
I ka pau ana o ka puka ana, huli
E like me kāu e ʻike ai, ua hoʻomaka ʻo livenessProbe i kahi noi HTTP GET, ua hana ka pahu i kahi hewa 500 (ʻo ia ka mea i hoʻolālā ʻia e hana), a hoʻomaka hou ka kubelet.
Inā ʻoe e noʻonoʻo pehea i hoʻolālā ʻia ai ka noi NideJS, eia ka app.js a me Dockerfile i hoʻohana ʻia:
polokalamu.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" ]
He mea nui e hoʻomaopopo i kēia: e hoʻomaka hou ʻo livenessProbe i ka pahu inā hāʻule. Inā ʻaʻole hoʻoponopono ka hoʻomaka hou i ka hewa e pale ana i ka holo ʻana o ka pahu, ʻaʻole hiki i ke kubelet ke hana i ka hoʻoponopono ʻana i ka pilikia.
ReadinessProbe
Hana like ʻo readinessProbe me livenessProbes (noi GET, kamaʻilio TCP a me ka hoʻokō kauoha), koe wale no nā hana hoʻoponopono. ʻAʻole i hoʻomaka hou ʻia ka pahu kahi i ʻike ʻia ai ka hemahema, akā kaʻawale ʻia mai nā kaʻa komo. E noʻonoʻo ʻoe e hana ana kekahi o nā ipu i nā helu he nui a i ʻole ma lalo o ka ukana kaumaha, e hoʻonui ana i nā manawa pane. I ka hihia o livenessProbe, hoʻomaka ka nānā ʻana i ka loaʻa o ka pane (ma o ka timeoutSeconds check parameter), a laila hoʻomaka ka kubelet i ka ipu. Ke hoʻomaka, hoʻomaka ka pahu e hana i nā hana koʻikoʻi waiwai a hoʻomaka hou. He mea koʻikoʻi kēia no nā noi e pono ai ka wikiwiki o ka pane. Eia kekahi laʻana, ke kali nei kahi kaʻa ma ke alanui i ka pane mai ka server, ua lohi ka pane - a komo ke kaʻa i kahi pōʻino.
E kākau kākou i kahi wehewehe redinessProbe e hoʻonoho i ka manawa pane noi GET i ʻoi aku ma mua o ʻelua kekona, a e pane ka palapala noi i ke noi GET ma hope o 5 kekona. Penei ke ano o ka waihona pod.yaml:
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
E hoʻolālā i kahi pod me kubectl:
kubectl apply -f pod.yaml
E kali kāua i ʻelua mau kekona a laila e ʻike i ka hana ʻana o ka readyProbe:
kubectl describe pods nodedelayed
Ma ka hopena o ka hoʻopuka hiki iā ʻoe ke ʻike ua like kekahi o nā hanana
E like me kāu e ʻike ai, ʻaʻole i hoʻomaka hou ʻo kubectl i ka pod i ka wā i ʻoi aku ai ka manawa nānā ma mua o 2 kekona. Akā, ua kāpae ʻo ia i ka noi. Hoʻouna hou ʻia nā kamaʻilio e hiki mai ana i nā pods hana ʻē aʻe.
E hoʻomaopopo i kēia manawa ua hoʻokuʻu ʻia ka pod, noi hou nā ala kubectl iā ia: ʻaʻole lohi hou nā pane i nā noi GET.
No ka hoʻohālikelike, aia ma lalo ka faila app.js i hoʻololi ʻia:
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')
})
Aku; DR
Ma mua o ka hiki ʻana mai o nā noi ao, ʻo nā lāʻau ka mea nui o ka nānā ʻana a me ka nānā ʻana i ke olakino noi. Akā naʻe, ʻaʻohe ala e hana ai i nā hana hoʻoponopono. Pono mau nā lāʻau i kēia lā; pono e hōʻiliʻili a hoʻouna ʻia i kahi ʻōnaehana hōʻiliʻili lāʻau no ka nānā ʻana i nā kūlana pilikia a me ka hoʻoholo ʻana. [Hiki ke hana i kēia me ka ʻole o nā noi kapua e hoʻohana ana i ka monit, no ka laʻana, akā me k8s ua maʻalahi loa ia :) - memo a ka mea hoʻoponopono. ]
I kēia lā, pono e hana ʻia ka hoʻoponopono ʻana i ka manawa maoli, no laila ʻaʻole pono nā noi i nā pahu ʻeleʻele. ʻAʻole, pono lākou e hōʻike i nā hopena e hiki ai i nā ʻōnaehana nānā ke nīnau a hōʻiliʻili i nā ʻikepili waiwai e pili ana i ke kūlana o nā kaʻina hana i hiki iā lākou ke pane koke inā pono. Kapa ʻia kēia ʻo ka Performance Test Design Pattern, e hahai ana i ka High Observability Principle (HOP).
Hāʻawi ʻo Kubernetes i ʻelua ʻano o ka nānā olakino ma ka paʻamau: readinessProbe a me livenessProbe. Hoʻohana nā ʻelua i nā ʻano loiloi like (noi HTTP GET, nā kamaʻilio TCP a me ka hoʻokō kauoha). ʻOkoʻa lākou i nā hoʻoholo a lākou e pane ai i nā pilikia i loko o nā pods. Hoʻomaka hou ʻo livenessProbe i ka pahu me ka manaʻolana ʻaʻole e hana hou ka hewa, a hoʻokaʻawale ʻo ReadinessProbe i ka pod mai nā kaʻa komo a hiki i ka hoʻoholo ʻana i ke kumu o ka pilikia.
Pono ka hoʻolālā noi kūpono e komo i nā ʻano ʻelua o ka nānā ʻana a hōʻoia i ka hōʻiliʻili ʻana i ka ʻikepili lawa, ʻoi aku ka nui o ka wā i hoʻolei ʻia kahi ʻokoʻa. Pono e hōʻike i nā helu hope API pono e hāʻawi i ka ʻōnaehana nānā (Prometheus) me nā metric olakino koʻikoʻi.
Source: www.habr.com