TL; DR
- ืืื ืืืฉืื ืฆืคืืืช ืืืืื ืฉื ืงืื ืืืื ืจืื ืืืืงืจื-ืฉืืจืืชืื, ืืืื ืื ืืืืืื ืจืืฉืืื ืืื ื ืืกืคืืงืื.
- ืืืชืืืฉืฉืืช ืืืืจื ืืืชืจ ืืืืืืฉืืช ืืืืืจืช, ืืืฉืืืื ืฆืจืืืื ืืืืฉื ืืช ืขืืงืจืื ืืชืฆืคืืช ืืืืืื (HOP).
- ืืจืืช ืืืคืืืงืฆืื, NOP ืืืจืฉ: ืจืืฉืื ื ืืื, ื ืืืืจ ืฆืืื, ืืืืงืืช ืฉืคืืืช ืืืขืงื ืืืจ ืืืฆืืขืื/ืืขืืจืื.
- ืืฉืชืืฉ ืืืืืืืช ืืจืืื ืฉื NOR ืืืื ืืช ืืืืงื ะธ livenessProbe ืงืืืจื ื.
ืืื ืชืื ืืช ืืืืงืช ืืจืืืืช?
ืืขืช ืชืื ืื ืืคืืืงืฆืื ืงืจืืืืช ืืืฉืืื ืืืืื ื ืืืื, ืืฉืื ืืืื ืืืฉืื ืขื ืืืื ืืื ืืื ืกืืืื ืืช ืืชืงืืืช. ืืคืืืงืฆืื ื ืืฉืืช ืกืืืื ืืช ืืชืงืืืช ืื ืืื ืืชืืืฉืฉืช ืืืืืจืืช ืืืฉื. ืืคืืืงืฆืืืช ืขื ื ืืืคืืกืืช ืืฉืชืืฉืช ืืืจืืืืงืืืจืช microservices - ืืืฉืจ ืื ืจืืื ืืืืงื ืืงืื ืืืื ืจ ื ืคืจื. ืืืื ืืืืื ืฉืืืคืืืงืฆืื ื-k8s ืืืื ื ืืืื ืืฉืืชื ืืขืฆื ืืฉืืื, ืืชื ืฆืจืื ืืขืงืื ืืืจ ืืคืืกืื ืืกืืืืื. ืืื ืืื ืืฉ ืืช ืชืื ืืช ืืืืงืช ืืืจืืืืช. ืื ืืืืืจ ืืื ืืืคืืืงืฆืื ืืชืงืฉืจืช ื-k8s ืฉืืื ืืจืืื. ืื ืื ืจืง ืืืืข ืขื ืืื ืืคืื ืคืืขื, ืืื ืื ืขื ืืืืคื ืฉืื ืืื ืืงืื ืืืืื ืืืงืฉืืช. ืืื ืฉ-Kubernetes ืืืืข ืืืชืจ ืขื ืืจืืืืช ืืคืื, ืื ืืื ืืงืื ืืืืืืช ืืืืืช ืืืชืจ ืืืื ื ืืชืื ืชื ืืขื ืืืืืื ืขืืืกืื. ืืคืืื, ืขืืงืจืื High Observability ืืืคืฉืจ ืืืคืืืงืฆืื ืืืืื ืืืงืฉืืช ืืืื.
ืขืงืจืื ืฆืคืืืช ืืืื (HOP)
ืืขืืงืจืื ืฉื ืฆืคืืืช ืืืืื ืืื ืืื ืืื
ืืืฉืื ืขื ื ืืขืืฆื ืืืื ืจืืฉื ืืช ืืืืจืืขืื ืืขืืงืจืืื ืฉืื ืืืืฆืขืืช ืืจืื ื-I/O ืืกืื ืืจืืืื STDERR ื-STDOUT. ืืืืฉื ืืืืข ืฉืืจืืช ืขืืจ, ืืืฉื filebeat, logstash ืื fluentd, ืืกืคืงืช ืืืื ืื ืืืขืจืืช ื ืืืืจ ืืจืืืืช (ืืืฉื Prometheus) ืืืขืจืืช ืืืกืืฃ ืืืื ืื (ืืืืืช ืชืืื ืืช ELK). ืืชืจืฉืื ืฉืืืื ืืจืื ืืืฆื ืืคืืืงืฆืืืช ืขื ื ืคืืขืืช ืขื ืคื ืืคืืก ืืืื ืืืจืืืืช ืืขืงืจืื ืืชืฆืคืืช ืืืืืื.
ืืืฆื ืืืืฉื ืืช ืืคืืก ืืืืงืช ืืืจืืืืช ื-Kubernetes?
ืืืืฅ ืืงืืคืกื, k8s ืื ืืจ ืืช ืืฆื ืืคืืืื ืืืืฆืขืืช ืืื ืืืงืจืื (
ืืืืืื ืฉืื ื, k8s ืื ืืืืงืช ืคืื ืงืฆืืื ืืืืช. ืืกืื ืื ืฉื ืืืืืช, ืืงืืืื ืืืืง ืืืืคื ืจืฆืืฃ ืืช ืืฆื ืืชืืืื ืืืืื. ืืจืืข ืฉืืื ืืืื ืฉืืชืืืื ื ืขืฆืจ, ืืื ืืชืืื ืืืชื ืืืืฉ. ืื ื ืืชื ืืคืชืืจ ืืช ืืฉืืืื ืคืฉืื ืขื ืืื ืืคืขืื ืืืืฉ ืฉื ืืืืฉืื, ืืืชืืื ืืช ืืชืืื ื ืช ืืืืืช ืขื ืื ืฉืืืื, ืื ืืืืงืช ืชืงืื ืืช ืืชืืืื ืืื ืื ืื ืฉืืชื ืฆืจืื ืืื ืืขืงืื ืืืจ ื-NOP ืืืคืืก ืืืืงืช ืืืจืืืืช. ืืืื ืืืืื ืืื ืฉืื ืื ืืฉืืืืืช ื ืืืงืืช ืขื ืืื ืืคืขืื ืืืืฉ. ืืืงืจื ืื, k8s ืืฆืืขื 2 ืืจืืื ืขืืืงืืช ืืืชืจ ืืืืืช ืืขืืืช ืขื ืืคืื:
LivenessProbe
ืืืืื livenessProbe kubelet ืืืฆืขืช 3 ืกืืื ืืืืงืืช: ืื ืจืง ืงืืืขืช ืื ืืคืื ืคืืขื, ืืื ืื ืื ืืื ืืืื ืืงืื ืืืืืื ืืจืืื ืืืงืฉืืช:
- ืืืืจ ืืงืฉืช HTTP ืืคืื. ืืชืืืื ืืืืืช ืืืืื ืงืื ืชืืืืช HTTP ืืืืื ืฉืืื 200 ื-399. ืืคืืื, ืืงืืืื 5xx ื-4xx ืืืืชืชืื ืื ืืคืื ื ืชืงื ืืืขืืืช, ืืืจืืช ืฉืืชืืืื ืคืืขื.
- ืืื ืืืืืง ืคืืืื ืขื ืฉืืจืืชืื ืฉืืื ื HTTP (ืืืืืื, ืฉืจืช ืืืืืจ Postfix), ืขืืื ืืืฆืืจ ืืืืืจ TCP.
- ืืฆืข ืคืงืืื ืฉืจืืจืืชืืช ืขืืืจ ืชืจืืื (ืคื ืืื). ืืืืืงื ื ืืฉืืช ืืืฆืืืช ืื ืงืื ืืฉืืืช ืืคืงืืื ืืื 0.
ืืืืื ืืืื ืื ืขืืื. ืืืืจืช ืืคืื ืืืื ืืืืื ืืืฉืื NodeJS ืฉืืืจืง ืฉืืืื 500 ืืืงืฉืืช HTTP. ืืื ืืืืื ืฉืืืื ืืืคืขื ืืืืฉ ืืขืช ืงืืืช ืฉืืืื ืืื, ืื ื ืืฉืชืืฉืื ืืคืจืืืจ 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
ืื ืื ืฉืื ื ืืื ืืืืจืช ืชืจืืื ืืืจืช, ืืื ืื ืื ื ืืืกืืคืื ืืืืืืงื .spec.containers.livenessProbe
... ืคึผึธืจึธืึถืึถืจ httpGet
ืืงืื ืืช ืื ืชืื ืฉืืืื ื ืฉืืืช ืืงืฉืช ื-HTTP GET (ืืืืืื ืฉืื ื ืืื /
, ืืื ืืชืจืืืฉื ืืืืื ืืืื ืืืืืช ืืฉืื ืืื /api/v1/status
). ืขืื livenessProbe ืืงืื ืคืจืืืจ initialDelaySeconds
, ืืืืจื ืืคืขืืืช ืืืืืืช ืืืืชืื ืืกืคืจ ืฉื ืืืช ืืืืืจ. ืืืฉืืื ื ืืืฆื ืืืืืื ืฉืืืืืื ืืงืืง ืืืื ืืื ืืืชืืื, ืืืขืช ืืคืขืื ืืืืฉ ืืื ืื ืชืืื ืืืื ื ืืืฉื ืืื ืื.
ืืื ืืืืื ืืืืจื ืื ืขื ืืฉืืื, ืืฉืชืืฉ ื:
kubectl apply -f pod.yaml
ืืืืจ ืืกืคืจ ืฉื ืืืช, ืชืืื ืืืืืง ืืช ืชืืื ืืคืื ืืืืฆืขืืช ืืคืงืืื ืืืื:
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')
})
ืืืงืจืคืื
FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]
ืืฉืื ืืฆืืื ืืืช: livenessProbe ืืคืขืื ืืืืฉ ืืช ืืืืื ืจืง ืื ืืื ื ืืฉื. ืื ืืคืขืื ืืืืฉ ืื ืชืชืงื ืืช ืืฉืืืื ืฉืืื ืขืช ืืืืืืื ืืคืขืื, ื-kubelet ืื ืืืื ืื ืงืื ืืคืขืืื ืืชืืงืื ืืืขืื.
ืืืื ืืช ืืืืงื
readinessProbe ืคืืขื ืืืืื ื-livenessProbes (ืืงืฉืืช GET, ืชืงืฉืืจืช TCP ืืืืฆืืข ืคืงืืืืช), ืืืขื ืคืขืืืืช ืืคืชืจืื ืืขืืืช. ืืืืืื ืฉืื ืืืืื ืืืฉื ืืื ื ืืืคืขื ืืืืฉ, ืืื ืืืืื ืืชืขืืืจื ื ืื ืกืช. ืชืืจื ืืขืฆืืื ืฉืืืช ืืืืืืืืช ืืืฆืขืช ืืจืื ืืืฉืืืื ืื ื ืืฆืืช ืืขืืืก ืจื, ืื ืฉืืืจื ืืืื ื ืืชืืืื ืืขืืืช. ืืืงืจื ืฉื livenessProbe, ืืืืงืช ืืืื ืืช ืืชืืืื ืืืคืขืืช (ืืืืฆืขืืช ืืคืจืืืจ timeoutSeconds check), ืืืืืจ ืืื ื-kubelet ืืคืขืืื ืืืืฉ ืืช ืืืืื. ืขื ืืคืขืืชื, ืืืืื ืืชืืื ืืืฆืข ืืฉืืืืช ืขืชืืจืืช ืืฉืืืื ืืืืคืขื ืืืืฉ ืฉืื. ืื ืืืื ืืืืืช ืงืจืืื ืขืืืจ ืืืฉืืืื ืฉืืงืืงืื ืืืืืจืืช ืชืืืื. ืืืืืื, ืจืื ืื ืกืืขื ืืืชืื ืืชืืืื ืืืฉืจืช, ืืชืืืื ืืชืขืืืช - ืืืืืื ืืช ื ืงืืขืช ืืชืืื ื.
ืืื ื ืืชืื ืืืืจืช redinessProbe ืฉืชืืืืจ ืืช ืืื ืืชืืืื ืืืงืฉืช GET ืืื ืืืชืจ ืืฉืชื ืฉื ืืืช, ืืืืคืืืงืฆืื ืชืืื ืืืงืฉืช GET ืืืืจ 5 ืฉื ืืืช. ืืงืืืฅ 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:
kubectl apply -f pod.yaml
ืืื ื ืืื ืืื ืฉื ืืืช ืืื ื ืจืื ืืื ื-readinessProbe ืขืื:
kubectl describe pods nodedelayed
ืืกืืฃ ืืคืื ื ืืชื ืืจืืืช ืฉืืืง ืืืืืจืืขืื ืืืืื
ืืคื ืฉืืชื ืืืื ืืจืืืช, kubectl ืื ืืคืขืื ืืืืฉ ืืช ืืคืื ืืืฉืจ ืืื ืืืืืงื ืขืืจ 2 ืฉื ืืืช. ืืืงืื ืืืช, ืืื ืืืื ืืช ืืืงืฉื. ืชืงืฉืืจืช ื ืื ืกืช ืื ืืชืืช ืืชืจืืืืื ืืืจืื ืืคืืขืืื.
ืฉืืื ืื ืฉืืขืช, ืืฉืืคืื ืืืจืืง, 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
ืืคื ื ืืืคืขืช ืืืฉืืื ืขื ื, ืืืื ืื ืืื ืืืืฆืขื ืืขืืงืจื ืื ืืืืจ ืืืืืงืช ืชืงืื ืืช ืืืคืืืงืฆืื. ืขื ืืืช, ืื ืืื ืื ืืืฆืขื ืื ืงืื ืืคืขืืื ืืชืงื ืช. ืืืื ืื ืขืืืื ืฉืืืืฉืืื ืืืื; ืืฉ ืืืกืืฃ ืืืชื ืืืฉืืื ืืืชื ืืืขืจืืช ืืืกืืฃ ืืืื ืื ืืฆืืจื ื ืืชืื ืืฆืื ืืืจืื ืืงืืืช ืืืืืืช. [ืื ืื ืืืื ืืืืขืฉืืช ืืื ืืคืืืงืฆืืืช ืขื ื ืืืืฆืขืืช monit, ืืืฉื, ืืื ืขื k8s ืื ืืคื ืืืจืื ืืืชืจ ืงื :) - ืืขืจืช ืืขืืจื. ]
ืืืื ืืฉ ืืืฆืข ืชืืงืื ืื ืืืขื ืืืื ืืืช, ืื ืฉืืคืืืงืฆืืืช ืืืจ ืื ืืืืืืช ืืืืืช ืงืืคืกืืืช ืฉืืืจืืช. ืื, ืขืืืื ืืืฆืื ื ืงืืืืช ืงืฆื ืืืืคืฉืจืืช ืืืขืจืืืช ื ืืืืจ ืืืฆืข ืฉืืืืชืืช ืืืืกืืฃ ื ืชืื ืื ืืฉืืืื ืขื ืืฆื ืืชืืืืืื ืื ืฉืืืืื ืืืืื ืืืืคื ืืืืื ืืืืืช ืืฆืืจื. ืื ื ืงืจื ืชืื ืืช ืขืืฆืื ืืืื ืืืืฆืืขืื, ืืขืืงืืช ืืืจ ืขืงืจืื ืืชืฆืคืืช ืืืืืื (HOP).
Kubernetes ืืฆืืขื 2 ืกืืืื ืฉื ืืืืงืืช ืืจืืืืช ืืืจืืจืช ืืืื: readinessProbe ื-livenessProbe. ืฉื ืืื ืืฉืชืืฉืื ืืืืชื ืกืืื ืืืืงืืช (ืืงืฉืืช HTTP GET, ืชืงืฉืืจืช TCP ืืืืฆืืข ืคืงืืืืช). ืื ืฉืื ืื ืืืืื ืืืืืืช ืื ืืงืืืื ืืชืืืื ืืืขืืืช ืืชืจืืืืื. livenessProbe ืืคืขืื ืืืืฉ ืืช ืืงืื ืืืื ืจ ืืชืงืืื ืฉืืฉืืืื ืื ืชืืืืจ ืขื ืขืฆืื, ื-readinessProbe ืืืืืืช ืืช ืืคืื ืืชืขืืืจื ื ืื ืกืช ืขื ืืคืชืจืื ืืืืจื ืืืขืื.
ืชืื ืื ื ืืื ืฉื ืืืฉืื ืฆืจืื ืืืืื ืืช ืฉื ื ืกืืื ืืืืืงืืช ืืืืืื ืฉืื ืืืกืคืื ืืกืคืืง ื ืชืื ืื, ืืืืืื ืืืฉืจ ื ืืจืง ืืจืื. ืื ืื ืฆืจืื ืืืจืืืช ืืช ื ืงืืืืช ืืงืฆื ืืืจืืฉืืช ืฉื API ืืืกืคืงืืช ืืืขืจืืช ืื ืืืืจ (Prometheus) ืืืื ืืจืืืืช ืืฉืืืื.
ืืงืืจ: www.habr.com