TL; DR
- ááœááºááááºáá¬áá»á¬ážááŸáá·áº ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááŒáá·áºáá¬ážá áœá¬ááŒáá·áºááŸá¯ááá¯ááºá á±áááºá ááŸááºáááºážáá»á¬ážááŸáá·áº á¡áááááá¯ááºážáá¬ááŸá¯áá»á¬ážááẠááá¯á¶áá±á¬ááºáá«á
- ááá¯ááá¯ááŒááºáááºá áœá¬ ááŒááºáááºááá°áááºááŸáá·áº áá¶ááá¯ááºáááºááŸáááŸá¯ ááá¯ážáá¬á á±áááºá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠááŒáá·áºáá¬ážáá±á¬ Observability Principle (HOP) ááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºá
- á¡ááá®áá±ážááŸááºážá¡ááá·áºááœááºá NOP áááº- ááŸááºáááºáá±á¬ááŸááºáááºážá á¡áá®ážáááºá á±á¬áá·áºááŒáá·áºááŸá¯á á áááºááá¯ááºážááá¯ááºáá¬á á áºáá±ážááŸá¯áá»á¬ážááŸáá·áº á áœááºážáá±á¬ááºáááº/á¡áá°ážá¡ááŒá±á¬ááºážááŒá±áá¬áá¶ááẠááá¯á¡ááºáááºá
- á
á
áºáá±ážááŸá¯áá»á¬ážááᯠNOR áá¡á
áááºá¡ááá¯ááºážáá
áºáá¯á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯áá«á á¡áááºááá·áºááŒá
áºááŒááºážá О á¡áááºááŸááºááŸá¯á
á¯á¶á
ááºážá
á
áºáá±áž Kubernetes
Health Check Template ááá¯áᬠáá¬áá²á
mission-critical ááŸáá·áº highly available application áá áºáá¯ááᯠáá®ááá¯ááºážááœá²áá±á¬á¡áá«á á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáááŒááºážáá²á·ááá¯á· ááŸá¯áá±á¬áá·áºáá áºáá¯ááᯠá ááºážá á¬ážááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááẠáá»ááºááœááºááŸá¯á០áá»ááºááŒááºá áœá¬ ááŒááºáááºáá±á¬ááºážááœááºáá¬áá«á á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáááºááŸááááºáᯠáá°ááá«áááºá áá¯á¶ááŸáẠcloud á¡ááá®áá±ážááŸááºážáá áºáá¯ááẠáá®ážááŒá¬ážááœááºááááºáá¬áá áºáá¯ááœáẠá¡á áááºá¡ááá¯ááºážáá áºáá¯á á®ááᯠáá¬ážááŸááᬠmicroservices áááá¯áá¬ááᯠá¡áá¯á¶ážááŒá¯áááºá ááŒá®ážáá±á¬á· k8s ááŸá¬ááŸááá²á· application ááᯠááẠcluster áá áºáá¯ááᯠáá®ááá¯ááºážááœá²áá²á·á¡áá« ááŒáá·áºáá¬ážá áœá¬áááŸáááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á á±áááºá¡ááœááºá áááºááẠá¡áá»áá¯á·áá±á¬áá¯á¶á á¶áá»á¬ážááᯠááá¯ááºáá¬áááºááá¯á¡ááºáá«áááºá áááºážááá¯á·á¡áááºá០áá»ááºážáá¬áá±ážá á áºáá±ážááá·áº áá¯á¶á á¶ááŒá áºáááºá áááºážááẠá¡ááá®áá±ážááŸááºážá០k8s ááá¯á· áááºááœááºáá¬ááœáẠáááºážááẠáá»ááºážáá¬ááŒá±á¬ááºáž áááºááŸááºáááºá á€á¡áá¬ááẠPod áááºáááºáá±ááá¬ážááá¯ááá·áº á¡áá»ááºá¡áááºáá¬áá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáááºáá¶ááá°áá¯á¶ááŸáá·áº áá¯á¶á·ááŒááºáá¯á¶á¡ááŒá±á¬ááºážáááºáž ááŒá áºáááºá Pod á áá»ááºážáá¬áá±ážá¡ááŒá±á¬ááºáž Kubernetes áá»á¬ážáá»á¬ážáááá±á áá¬ááºáááºážááŒá±á¬ááºážáááºážááŒá±á¬ááºážááŸáá·áº Load Balancing ááŸáá·áº áááºáááºá á áááºáá»áá±á¬ áá¯á¶ážááŒááºáá»ááºáá»á¬áž áá»áá±áá±ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº High Observability Principle ááẠá¡ááá®áá±ážááŸááºážá¡á¬áž áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá® áá¯á¶á·ááŒááºááá¯ááºá á±áá«áááºá
ááŒáá·áºáá¬ážáá±á¬ááŒáá·áºááŸá¯ááá¯ááºááŸá¯áá° (HOP)
ááŒáá·áºáá¬ážáá±á¬ Observability áááá¬ááááºáá»á¬ážáá²ááŸáá
áºáá¯ááŒá
áºáááºá
áá±á¬ááºážá áœá¬áá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ cloud á¡ááá®áá±ážááŸááºážááẠá ᶠI/O áá¯ááºááœáŸáá·áºááŸá¯áá»á¬áž STDERR ááŸáá·áº STDOUT ááá¯á¡áá¯á¶ážááŒá¯á áááºážáá¡áááááŒá áºáááºáá»á¬ážááᯠááŸááºáááºážáááºáááºá áá±á¬ááºáá áºáá¯ááẠá¡áááºáááºáá±á¬ááºááŸá¯áá áºáá¯ááŒá áºááá·áº á¥ááᬠfilebeatá logstash ááá¯á·ááá¯áẠfluentdá áááá¯áá»á¯ááºááá¯ááºááŸá¯á á±á¬áá·áºááŒáá·áºáá±ážá áá Ạ(á¥ááᬠPrometheus) ááŸáá·áº ááŸááºáááºážá á¯áá±á¬ááºážááŒááºážá áá Ạ(ELK software suite) ááá¯á· ááŸááºáááºážáá»á¬ážáá±ážááá¯á·ááŒááºážá á¡á±á¬ááºáá±á¬áºááŒáá«áá¯á¶ááœáẠcloud á¡ááá®áá±ážááŸááºážáá áºáá¯ááẠáá»ááºážáá¬áá±ážá ááºážáááºááŸá¯áá¯á¶á á¶ááŸáá·áº ááŒáá·áºáá¬ážáá±á¬ááŒáá·áºááŸá¯ááá¯ááºááŸá¯ááá¯ááºáá¬á ááºážáá»ááºážáá»á¬ážá¡ááá¯ááºáž áá¯ááºáá±á¬ááºáá¯á¶ááᯠááŒááá¬ážáááºá
Kubernetes ááœáẠáá»ááºážáá¬áá±ážá á áºáá±ážááŸá¯áá¯á¶á á¶ááᯠáááºááá¯á·á¡áá¯á¶ážááŒá¯ááááºáááºážá
áá±á¬ááºá
áºá¡ááœááºážááŸá k8s ááẠááááºážáá»á¯ááºáááááá¬áá»á¬ážáá²á០áá
áºáá¯ááᯠá¡áá¯á¶ážááŒá¯á pods á á¡ááŒá±á¡áá±ááᯠá
á±á¬áá·áºááŒáá·áºááẠ(
áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá k8s áááºá€ááá¯á·ááŒá
áºáááºá áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááá¯á
á
áºáá±ážáá«á. á€á
á
áºáá±ážááŸá¯á¡áá»áá¯ážá¡á
á¬ážááœááºá kubelet ááẠááœááºááááºáá¬á¡ááœááºážááŸá áá¯ááºáááºážá
ááºáá¡ááŒá±á¡áá±ááᯠá
ááºáááºáááŒááºá
á
áºáá±ážáááºá áá¯ááºáááºážá
ááºáááºááœá¬ážááŒá±á¬ááºáž áá°áá¬ážáááºáááºááŸáá·áº áááºážááᯠááŒááºáááºá
áááºáááºááŒá
áºáááºá á¡ááá®áá±ážááŸááºážááᯠááŒááºáááºá
áááºáá¯á¶ááŒáá·áº á¡ááŸá¬ážá¡ááœááºážááᯠááŒá±ááŸááºážááá¯ááºááŒá®ážá áááá¯ááááºááẠáááºááá·áº error ááá¯áááᯠááááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáá«áá áá¯ááºáááºážá
áẠáá»ááºážáá¬áá±ážá
á
áºáá±ážááŸá¯ááẠNOP ááŸáá·áº Health Test Pattern ááᯠááá¯ááºáá¬ááẠááá¯á¡ááºáá«áááºá áá
áºáá¯áááºážáá±á¬ááá¬ážá
áá¬ááŸá¬ restart áá¯ááºááŒááºážááŒáá·áº error á¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááŒááºážááá¯ááºáá«á á€ááá
á¹á
ááœááºá k8s ááẠpod ááŸáá·áº ááŒá¿áá¬áá»á¬ážááᯠááŸá¬ááœá±áá±á¬áºáá¯ááºááẠááá¯ááá¯áá±ážáááºáá±á¬ áááºážáááºáž 2 áá¯ááᯠáá±ážáááº-
LivenessProbe
á ááºá¡ááœááºáž á¡áááºááŸááºááŸá¯á á¯á¶á ááºážá á áºáá±áž kubelet ááẠá á áºáá±ážááŸá¯ 3 áá»áá¯ážááᯠáá¯ááºáá±á¬ááºáááº- áá±á«á·ááºááẠáá¯ááºáá±á¬ááºáá±ááŒááºážááŸááááŸááá¬áá áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáááºáá¶áááºááŸáá·áº áá¯á¶áá±á¬ááºá áœá¬áá¯á¶á·ááŒááºááẠá¡ááá·áºááŸááááŸáááá¯áááºáž áá¯á¶ážááŒááºáá±ážáááº-
- pod ááœáẠHTTP áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠáááºááŸááºáá«á áá¯á¶á·ááŒááºááŸá¯ááœáẠ200 á០399 á¡ááœá¬á¡áá±ážá¡ááœááºáž HTTP áá¯á¶á·ááŒááºáá¯ááºáá áºáá¯áá«áááºááá«áááºá ááá¯á·ááŒá±á¬áá·áº áá¯ááºáááºážá ááºáá¯ááºáá±á¬ááºáá±áá±á¬áºáááºáž pod ááẠááŒá¿áá¬áá»á¬ážááŸááá±ááá·áºááá¯áẠ5xx ááŸáá·áº 4xx áááºá¹áá±ááá»á¬ážááŒá áºáááºá
- HTTP ááá¯ááºáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬áž (á¥ááá¬á Postfix áá±ážááºáá¬áá¬) ááŒáá·áº pods áá»á¬ážááᯠá ááºážáááºááẠTCP áá»áááºáááºááŸá¯áá áºáá¯ááᯠáááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá
- pod áá áºáá¯á¡ááœáẠáááá¬ážáá±á¬á¡áááá·áºááᯠáá¯ááºáá±á¬ááºáá« (á¡ááœááºážááá¯ááºáž)á command completion code ááẠ0 ááŒá áºáá«á á á áºáá±ážááŸá¯ááᯠá¡á±á¬ááºááŒááºáááºáᯠáá°ááá«áááºá
áá«á áááºááá¯á¡áá¯ááºáá¯ááºááá² á¥ááá¬á áá±á¬ááºááẠpod á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááœáẠHTTP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááœáẠá¡ááŸá¬áž 500 áá±á«ááºá á±ááá·áº NodeJS á¡ááá®áá±ážááŸááºážáá áºáá¯áá«ááŸááááºá ááá¯ááá¯á·áá±á¬á¡ááŸá¬ážáá áºáá¯ááᯠáááºáá¶áááŸáááá·áºá¡áá« ááœááºááááºáá¬ááᯠááŒááºáááºá áááºááŒá±á¬ááºážáá±áá»á¬á á±áááºá áá»áœááºá¯ááºááá¯á·ááẠ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
áááºážááẠá¡ááŒá¬áž pod á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŸáá·áº ááá°áá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬ááá¹áá¯áá
áºáá¯ááᯠááá·áºáá±áááºá .spec.containers.livenessProbe
. ááá·áºáááºáá»áẠhttpGet
HTTP GET áá±á¬ááºážááá¯ááŸá¯ áá±ážááá¯á·ááá·áº áááºážááŒá±á¬ááºážááᯠáááºáá¶ááẠ(áá»áœááºá¯ááºááá¯á·á á¥ááá¬ááœáẠá€á¡áá¬ááŒá
áºáááºá /
áá«áá±ááá·áº ááá¯ááºááœá²á¡ááŒá±á¡áá±ááœá±ááŸá¬ áá®ááá¯áá»áá¯áž áá
áºáá¯áá¯ááŸáááá¯ááºáá«áááºá /api/v1/status
) á¡ááŒá¬áž livenessProbe ááẠááá·áºáááºáá»ááºáá
áºáá¯ááᯠáááºáá¶áááºá initialDelaySeconds
áááºááŸááºáá¬ážáá±á¬ á
áá¹ááá·áºá¡áá±á¡ááœááºááᯠá
á±á¬áá·áºááẠá¡áááºááŒá¯ááŒááºážáá¯ááºáááºážááᯠááœáŸááºááŒá¬ážáááºá ááœááºááááºáᬠá
áááºááẠá¡áá»áááºááá¯á¡ááºááŒá®áž ááŒááºáááºá
áááºááá·áºá¡áá« á¡áá»áááºá¡áááºááŒá¬ ááááá¯ááºáá±á¬ááŒá±á¬áá·áº ááŸá±á¬áá·áºááŸá±ážááŸá¯ ááá¯á¡ááºáá«áááºá
á€áááºáááºááᯠá¡á á¯á¡áá±ážáá áºáá¯ááá¯á· á¡áá¯á¶ážááŒá¯áááºá á¡áá¯á¶ážááŒá¯áá«-
kubectl apply -f pod.yaml
á áá¹ááá·áºá¡áááºážáááºááŒá¬ááŒá®ážáá±á¬ááºá áááºááẠá¡á±á¬ááºáá« command ááá¯áá¯á¶ážá pod áá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá á áºáá±ážááá¯ááºáááº-
kubectl describe pods node500
á¡ááœááºáá¡áá¯á¶ážááœááºá ááŸá¬áá«á
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºáž livenessProbe ááẠHTTP GET áá±á¬ááºážááá¯ááŸá¯ááᯠá áááºáá²á·ááŒá®áž ááœááºááááºáá¬ááẠá¡ááŸá¬ážá¡ááœááºáž 500 (áááºážáá¯ááºáá±á¬ááºááẠáááá¯ááááºááŒá¯áá¯ááºáá¬ážááá·áºá¡áá¬ááŒá áºáááº) ááᯠááœááºááááºáá¬á áá¯ááºáá±ážáá²á·ááŒá®áž kubelet á០áááºážááᯠááŒááºáááºá áááºáá²á·áááºá
NideJS á¡ááá®áá±ážááŸááºážááᯠáááºááᯠáááá¯ááááºáá±ážááœá²áá¬ážáá²ááá¯á· áááºáááá»ááºáá±áááºááá¯ááẠáá«á á¡áá¯á¶ážááŒá¯áá²á·áá²á· app.js áá²á· Dockerfile áá«á
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" ]
áááºážááá¯áááááŒá¯áááºá¡áá±ážááŒá®ážáá«áááº- livenessProbe áááºá¡áááºáááŒá±áá«áááœááºááááºáá¬ááá¯ááŒááºáááºá áááºáááºááŒá áºáááºá ááŒááºáááºá áááºááŒááºážááẠááœááºááááºáá¬áááºáááºááŒááºážá០áá¬ážáá®ážáá¬ážááá·áº á¡ááŸá¬ážááᯠáááŒááºáá«áá kubelet ááẠááŒá¿áá¬ááᯠááŒá¯ááŒááºááẠáá¯ááºáá±á¬ááºááá¯ááºáááºááá¯ááºáá±á
á¡áááºááá·áºááŒá áºááŒááºážá
readinessProbe ááẠááŒá¿áá¬ááŒá±ááŸááºážááŒááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸááœá²á livenessProbes (GET áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá TCP áááºááœááºáá±ážááŸáá·áº á¡áááá·áºáá±ážááŸá¯áá¯ááºáá±á¬ááºááŒááºáž) ááŸáá·áº á¡áá¬ážáá°áá¯ááºáá±á¬ááºáááºá áá»áá¯á·ááœááºážáá»ááºááᯠááœá±á·ááŸáááá·áº ááœááºááááºáá¬ááᯠááŒááºáááºá áááºááŒááºážáááŒá¯áá±á¬áºáááºáž á¡áááºáááºážááŒá±á¬ááºážá០ááœá²áá¯ááºáá¬ážáááºá ááœááºááááºáá¬áá»á¬ážáá²á០áá áºáá¯ááẠááœááºáá»ááºááŸá¯áá»á¬ážá áœá¬ áá¯ááºáá±á¬ááºáá±ááẠááá¯á·ááá¯áẠáá±ážáá¶áá±á¬áááºá¡á±á¬ááºááœáẠááŸááá±áá±á¬ááŒá±á¬áá·áº áá¯á¶á·ááŒááºááŸá¯á¡ááŒáááºáá± ááá¯ážáá¬áááºáᯠááŒááºáá±á¬ááºááŒáá·áºáá«á livenessProbe áááŒá áºáááºááœááºá áá¯á¶á·ááŒááºááŸá¯áááŸáááá¯ááºááŸá¯á á áºáá±ážááŒááºážááá¯á áááºááẠ(á¡áá»áááºááœááºá áá¹ááá·áºá á áºáá±ážááŒááºážáá±á¬ááºááŸáááá·áº) ááŒá®ážáá±á¬áẠkubelet áááºááœááºááááºáá¬ááá¯ááŒááºáááºá áááºáááºá á áááºáá±á¬á¡áá«á ááœááºááááºáá¬ááẠá¡áááºážá¡ááŒá áº-á¡áá±ážáá±ážáá±á¬ áá¯ááºáá±á¬ááºá áá¬áá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºááŒá®áž ááŒááºáááºá áááºáááºá áá¯á¶á·ááŒááºááŸá¯á¡ááŒááºááŸá¯ááºážááá¯á¡ááºáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠáááºážááẠá¡áá±ážááŒá®ážáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá¬ážáá áºá á®ážááẠáááºážáá±á«áºááœáẠáá¬áá¬á០áá¯á¶á·ááŒááºááŸá¯ááᯠá á±á¬áá·áºááá¯ááºážáá±áá»áááºá áá¯á¶á·ááŒááºááŸá¯ ááŸá±á¬áá·áºááŸá±ážááœá¬ážááẠ- áá¬ážááẠááá±á¬áºááááŸá¯ ááŒá áºááœá¬ážáááºá
GET áá±á¬ááºážááá¯áá»áẠáá¯á¶á·ááŒááºááŸá¯á¡áá»áááºááᯠááŸá áºá áá¹ááá·áºááẠáááá¯á á±áá² áááºááŸááºáá±ážááá·áº redinessProbe á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá áºáá¯á¡á¬áž áá±ážááŒáá«á áá¯á·á áá»áŸá±á¬ááºááœáŸá¬ááẠ5 á áá¹ááá·áºá¡ááŒá¬ááœáẠGET áá±á¬ááºážááá¯áá»ááºááᯠáá¯á¶á·ááŒááºáááºááŒá áºáááºá 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
kubectl ááŒáá·áº pod áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒáá«á áá¯á·á
kubectl apply -f pod.yaml
á áá¹ááá·áºá¡áááºážáááºáá±á¬ááºá á±á¬áá·áºááŒá®áž á¡áááºááá·áºProbe á¡áá¯ááºáá¯ááºáá¯á¶ááᯠááŒáá·áºááŒáá¡á±á¬ááºá
kubectl describe pods nodedelayed
á¡ááœááºáá¡áá¯á¶ážááœáẠá¡áá»áá¯á·áá±á¬ááŒá
áºáááºáá»á¬ážááẠáááºáá°ááŒá±á¬ááºáž áááºááœá±á·ááá¯ááºáááºá
áááºááŒááºááá·áºá¡ááá¯ááºážá á á áºáá±ážáá»ááẠ2 á áá¹ááá·áºáá»á±á¬áºááœááºáá±á¬á¡áá« kubectl ááẠpod ááá¯ááŒááºáááºá áááºááŒááºážáááŸááá«á á¡á²áá®á¡á á¬áž áá°á áá±á¬ááºážááá¯áá»ááºááᯠáááºáá»ááºááá¯ááºáááºá áááºáá¬áá±á¬ áááºááœááºááŸá¯áá»á¬ážááᯠá¡ááŒá¬ážáá¯ááºáá±á¬ááºáá±áá±á¬ pods áá»á¬ážááá¯á· ááŒááºááœáŸááºážáááºá
ááá¯á¡áá« áá±á«á·ááºááᯠááááºáá¬ážáááŒáá·áºá kubectl áááºážááŒá±á¬ááºážáá»á¬ážá áááºážáᶠáááºáá¶áá±á¬ááºážááá¯áá±áááº- GET áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá¯á¶á·ááŒááºááŸá¯áá»á¬ážááẠááŸá±á¬áá·áºááŸá±ážáá±á¬á·áááºááá¯ááºááŒá±á¬ááºáž áááááŒá¯áá«á
ááŸáá¯ááºážááŸááºáááºá¡ááœáẠá¡á±á¬ááºááœáẠááŒá¯ááŒááºáá¬ážáá±á¬ 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
cloud á¡ááá®áá±ážááŸááºážáá»á¬áž áááœááºážáá¬ážáá®ááœáẠááŸááºáááºážáá»á¬ážááẠá¡ááºááºááá»ááºážáá¬áá±ážááᯠá
á±á¬áá·áºááŒáá·áºá
á
áºáá±ážááŒááºážá á¡ááááááºážáááºážááŒá
áºáááºá ááá¯á·áá±á¬áºáááºáž ááŸááºáááºáá±á¬ á¡áá±ážáá°áá±á¬ááºááœááºááŸá¯ áá
áºá
á¯á¶áá
áºáᬠáááŸááá²á·áá«á ááŸááºáááºážáá»á¬ážááẠááá±á·á¡áá á¡áá¯á¶ážáááºáá²ááŒá
áºáááºá áááºážááá¯á·ááᯠá
á¯áá±á¬ááºážááŒá®áž á¡áá±ážáá±á«áºá¡ááŒá±á¡áá±áá»á¬ážááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒááºážááŸáá·áº áá¯á¶ážááŒááºáá»ááºáá»á¬ážáá»áááºá¡ááœáẠááŸááºáááºážá
á¯áá±á¬ááºážááŒááºážá
áá
áºááá¯á· áá±ážááá¯á·ááẠááá¯á¡ááºáá«áááºá [á¥ááá¬á¡á¬ážááŒáá·áº monit ááá¯á¡áá¯á¶ážááŒá¯á cloud application áá»á¬ážááá«áá²á€á¡áá¬á¡á¬ážáá¯á¶ážááá¯áá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºáž k8s ááŒáá·áºáááºážáááºááá¯ááá¯ááœááºáá°áá¬ááẠ:) - áááºážááŒááºáá°áááŸááºá
á¯á ]
ááá±á·áá±ááºááœáẠááŒá¯ááŒááºááŸá¯áá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá®áá®ážáá«áž ááŒá¯áá¯ááºááááºááŒá áºáá±á¬ááŒá±á¬áá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážááẠblack boxes ááŒá áºáááºáááá¯á¡ááºáá±á¬á·áá«á ááá¯ááºáá«á áááºážááá¯á·ááẠááá¯á¡ááºáá«á áá»ááºááŒááºážáá¯á¶á·ááŒááºááá¯ááºááẠáá¯ááºáááºážá ááºá¡ááŒá±á¡áá±ááŸáá·áºáááºáááºáá±á¬ á¡ááá¯ážáááºáá±áá¬áá»á¬ážááᯠá á¯á¶á ááºážáá±ážááŒááºážáááºááŸáá·áº á á¯áá±á¬ááºážááẠá á±á¬áá·áºááŒáá·áºáá±ážá áá áºáá»á¬ážááᯠááœáá·áºááŒá¯ááá·áº á¡áá¯á¶ážááŸááºáá»á¬ážááᯠááŒáááá·áºáááºá áááºážááᯠHigh Observability Principle (HOP) ááá¯ááºáá¬ááá·áº Performance Test Design Pattern áá¯áá±á«áºáááºá
Kubernetes ááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áá»ááºážáá¬áá±ážá á áºáá±ážááŸá¯ á¡áá»áá¯ážá¡á á¬áž 2 áá»áá¯áž áá±ážáá±á¬ááºáááº- á¡áááºááá·áºááŒá áºááŒááºáž Probe ááŸáá·áº livenessProbeá ááŸá áºáá¯áá¯á¶ážááẠáá°áá®áá±á¬á á áºáá±ážááŸá¯á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááẠ(HTTP GET áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá TCP áááºááœááºáá±ážááŸáá·áº á¡áááá·áºáá±ážááá·áºáá¯ááºáá±á¬ááºááŸá¯)á pods áá»á¬ážááŸá ááŒá¿áá¬áá»á¬ážááᯠáá¯á¶á·ááŒááºáá¬ááœáẠáááºážááá¯á· áá»ááŸááºááá·áº áá¯á¶ážááŒááºáá»ááºáá»á¬ážááœáẠááœá²ááŒá¬ážáááºá livenessProbe ááẠá¡ááŸá¬ážáááºáá¶áááŒá áºááœá¬ážá á±áááºáá»áŸá±á¬áºááá·áºáá»ááºááŒáá·áº ááœááºááááºáá¬ááᯠááŒááºáááºá áááºááŒá®áž á¡áááºááá·áºááŒá áºááŒááºážProbe ááẠááŒá¿áá¬áá¡ááŒá±á¬ááºážáááºážááᯠááŒá±ááŸááºážááŒá®ážáááºá¡áá á¡áááºááá·áºááŒá áºáá±áá±á¬ á¡áááºáááºážááŒá±á¬ááºážá០áá°ážááᯠááœá²áá¯ááºáááºá
ááá·áºáá»á±á¬áºáá±á¬ á¡ááá®áá±ážááŸááºáž áá®ááá¯ááºážááœáẠá á áºáá±ážááŒááºáž á¡áá»áá¯ážá¡á á¬áž ááŸá áºáá»áá¯ážá áá¯á¶áž áá«áááºááá·áºááŒá®áž á¡áá°ážáááŒáá·áº ááŒáœááºážáá»ááºáá áºáá¯á¡á¬áž áá»ááá¯ááºááá·áºá¡áá« áááºážááá¯á·ááẠáá¯á¶áá±á¬ááºáá±á¬ áá±áá¬ááᯠá á¯áá±á¬ááºážááŒá±á¬ááºáž áá±áá»á¬á á±ááá·áºáááºá á á±á¬áá·áºááŒáá·áºáá±ážá áá Ạ(Prometheus) ááᯠá¡áá±ážááŒá®ážáá±á¬ áá»ááºážáá¬áá±ážááá¯ááºáᬠááá¯ááºážáá¬ááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááá·áº ááá¯á¡ááºáá±á¬ API á¡áá¯á¶ážááŸááºáá»á¬ážááá¯áááºáž ááŒáááá·áºáááºá
source: www.habr.com