TL; αα»α
- ααΎααααΈαααααα ααΆαααΌαααΆαα’αααααααααααααα»αααΊααα αα·αααααΆααααααΈααααΌ αααααα ααα» αα·ααααααααααααΊαα·ααααααααααΆααααα
- αααααΆααααΆαααΎαα‘αΎααα·αααΏαααΆααα»α αα·ααααααΎαααΆαααα αααααα·ααΈαα½αααα’αα»αααααααααΆαααααααααααααα (HOP)α
- αα ααααα·ααααααα·ααΈ NOP ααΆαααΆαα ααΆααααααααΆααααΉαααααΌα ααΆααααα½ααα·αα·ααααααΆααα·ααααα·ααα ααΆααααα½ααα·αα·αααα’ααΆααα αα·αααΆαααΆαααΆαααααΎαααΆα/ααΆαααααΆααααααΌαα
- ααααΎααΌααααααΆααααααααΆααΆαα»αα NOR ααΆαααααααααα½α ΠΈ ααΆααααΎαα’αααααααΆαααααα
Kubernetes α
ααΎααααΌαα·αα·ααααα»αααΆαααΊααΆα’αααΈ?
αα ααααα ααΆαααααα·ααΈαααααααααααααΆαααΆααααααΆαα αα·αα’αΆα ααααΎααΆαααααα ααΆαα·αααΆααΆαααΆααααααΆααααΆαααααα»αααΆααα·αα’αααΈαα·αααααΆαααΌα ααΆααΆαα’ααα±αα ααααααα α»αα αααααα·ααΈβαα½αβααααΌαβααΆαβα αΆααβαα»αβααΆβααΆαβααα α»αβαααβα’ααβα±αβααααα·αβααΎβααΆβααΎαβα‘αΎαβαα·αβαααΆαβααΆααβαα ααβααΈβααΆαβαααΆαααα αααααα·ααΈαααααααααΆααααΎααααΆααααααααααΈααααΌααααΆαααα - ααααααΆαααΆαα»ααΈαα½ααααααΌαααΆαααΆαααααα»ααα»αααΆα ααααα‘αααα½αα α αΎαααΎααααΈααααΎα±ααααααΆααααΆαααααα·ααΈαα ααΎ k8s α’αΆα ααααΎααΆαααααααα αααα’ααααα ααΆα ααααα α’αααααααΌαααααΎααΆαααααΌααΆααααΆααα αααα»αα αααααα½αααααΆαααααΌαα·αα·ααααα»αααΆαα ααΆαααααααΈααααααααααααα·ααΈααΆαααααα k8s ααΆααΆααΆααα»αααΆαααα’α ααααα·αααααΉαααααΆααααααΆαα’αααΈααΆααΎαααααα»αααααΎαααΆααα ααα»ααααααα’αααΈαααααααααΆααα½α αα·αααααΎααααα ααΉαααααΎαααααα ααΆαααΆ Kubernetes ααΉαα’αααΈαα»αααΆααααα pod ααΆααααα αααΎα ααΆααααααα α α·αααααΆααααααααΆααααααααΆααααΎα’αααΈααΆααααααααααΌαα ααΆα ααα αα·ααα»αααααΆααααα»αα ααΌα αααα αααααΆαααααααααααααα α’αα»ααααΆαα±αααααααα·ααΈααααΎααααα ααΉαααααΎαααα»αααααααααΆαααααααααΆα
αααααΆαααααααααααααα (HOP)
αααααΆαααααααΆααααααααααααααΊααΆααααααα½ααα
αααααα·ααΈααααααααΆααα ααΆαααΆαααα’αααααααΆααααΉαααα·ααΆαααααααΆαααααααααΆαααααααΎααααααΈα I/O αααααααΆα STDERR αα·α STDOUT α αααααΆααααααΆαααααΆαααααααα½α α§ααΆα ααα filebeat, logstash α¬ fluentd αααααΌααααααα ααα»αα αααααααααααα½ααα·αα·ααααααααΆα (α§ααΆα ααα Prometheus) αα·ααααααααααααααΌααααααα ααα» (αα»ααααααα·ααΈ ELK)α ααααΆααααΆαααΆαααααααααα αΆαααΈααααααααααααα·ααΈαααααααΎαααΆαααααααααΆαααααΌααααααα»αααΆα αα·ααααααΆααααααααααααααα
ααΎααααΎααΌα ααααα ααΎααααΈα’αα»ααααααααΌαα·αα·ααααα»αααΆααα αααα»α Kubernetes?
α
ααααΈαααα’αα k8s αααα½ααα·αα·αααααααΆαααΆααααα pods αααααααΎα§ααααααααααΆαα½α (
αααα»αα§ααΆα αααααααααΎα k8s ααααΎ αα·αα·ααααα»αααΆα. αα
αααα»αααααααααααΆααααααααααΆααααα kubelet αααααααα½ααα·αα·αααααααΆαααΆαααααααΎαααΆααα
αααα»ααα»αααΊαααα αα
ααααααααΆαααααααΆααααΎαααΆαααΆαααα ααΆααααΉαα
αΆααααααΎαααΆα‘αΎααα·αα ααααα·αααΎααα α»αα’αΆα
ααααΌαααΆααααααααΆααααααααΆααααα
αΆααααααΎααααααα·ααΈα‘αΎααα·α α αΎααααααα·ααΈααααΌαααΆααα
ααΆα‘αΎαααΎααααΈαα·αααα α»αααΆαα½αααα ααΆααααα½ααα·αα·ααααα»αααΆαααααΎαααΆαααΊααΆα’αααΈαααα’αααααααΌαααΆαααΎααααΈα’αα»ααααααΆα NOP αα·αααααΌααααααα»αααΆαα ααΆαα’αΆαα·ααααα½ααααααΊααΆαα·ααααααα α»αααΆααα’ααααααΌαααΆααα»αα
αααααααΆαα
αΆααααααΎαα‘αΎααα·αααα αααα»αααααΈααα k8s αααααααΌααα·ααΈααΆαααααααΈααααα
α
ααα½α 2 ααΎααααΈααααααααα αΆααΆαα½αααα
LivenessProbe
αααα»αα’αα‘α»ααααααα ααΆααααΎαα’αααααααΆαααααα kubelet α’αα»ααααααΆααααα½ααα·αα·ααα 3 ααααααα αα·αααααΉααααααααααΆααΎαααααα»αααααΎαααΆααα ααα»αααααααααΆααααΆααΎααΆαα½α ααΆαααααα»αααΆαααα½α αα·αααααΎααααααααααααΆααα ααααααααΎαααα¬ααα
- αααα αααααΎ HTTP αα ααΆααααα ααΆαααααΎαααααααΌαααααΆααααααΌαααααΎααα HTTP αααα»αα αααααααΈ 200 ααα 399α ααΌα αααα αααααΌα 5xx αα·α 4xx αααα αΆαααΆαααααα»αααΆααααα αΆ αααααΈααΆααααΎαααΆααααα»αααααΎαααΆααααααα
- ααΎααααΈααΆαααααααααααΆαα½αααΉαααααΆαααααα·αααα HTTP (α§ααΆα ααα αααΆαααΈααα Postfix mail) α’αααααααΌααααααΎαααΆααααααΆαα 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
αααβαα·αβαα»αβααΈβαα·ααααα pod ααααααααβαα ααα»ααααβααΎαβααααααβααααα»βαα½αα .spec.containers.livenessProbe
. αααΆαααΆαααααα httpGet
ααα½αααααααΌααααααααΎ HTTP GET ααααΌαααΆαααααΎ (αααα»αα§ααΆα αααααααααΎααααααΊ /
ααα»αααααα
αααα»αααααΆααΈαααΌααααα»ααααααα ααααΆααΆαα’αααΈαα½αααΌα
ααΆ /api/v1/status
) ααΆαααααα
αα½αααααααααProbe ααα½ααααααΆαααΆαααααα 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')
})
Dockerfile
FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]
ααΆααΆααΆαααααΆαααααα»αααΆαααααααααΆαααααα livenessProbe ααΉαα αΆααααααΎααα»αααΊαααα‘αΎααα·αααααα»αααααααααα·αααΎααΆαααΆαααα ααααα·αααΎααΆαα αΆααααααΎαα‘αΎααα·ααα·αααααα α»ααααααΆααΆαααα»αααΊααααα·αα±ααααααΎαααΆαααα kubelet ααΉααα·αα’αΆα α αΆαααα·ααΆαααΆαααΎααααΈαααααα αΆααΆαααα
ααΆαααααααααα½α
readinessProbe ααααΎααΆαααααααααααΆαα ααΉα livenessProbes (GET requests, TCP communications and command execution) ααΎαααααααααααΆαααααααααΆααααααααΆααααα αΆα αα»αααΊαααααααααΆαααααααΌαααΆαααααΎααα·αααααΌαααΆαα αΆααααααΎαα‘αΎααα·ααα ααα»ααααααααΌαααΆαααΆα αααααΆαααΈα ααΆα αααα αΌαα αααααααΆαα»ααα½ααααα»αα αααααα»αααΊααααααα»αααααΎαααΆαααΆαααααΆα αααΎαα¬αααα·ααα αααααααααα»ααααααααααααααΆαα±αααααααααΆααααΎαααααΎαα‘αΎαα αααα»αααααΈ livenessProbe ααΆααααα½ααα·αα·αααααΆαα’αΆα ααααΆαααααΆαααααΎαααααααΌαααΆαααααα‘αΎα (ααΆαααααααΆαααΆαααααααα·αα·ααα timeoutSeconds) αααααΆααααΈααα 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
α αΌαααΆαααααααΆα pod ααΆαα½α kubectlα
kubectl apply -f pod.yaml
αααβαααα αΆαβααΈαβααΈβαα·ααΆααΈβαα·αβα αΆαβααΎαβααΆβααΎβααΆαβαααααβαααα½αβααΆαβααααΎαααΆαβαααΆαβααΆα
kubectl describe pods nodedelayed
αα
α
α»ααααα
ααααααααααα’αααα’αΆα
ααΎαααΎαααΆααααΉαααα·ααΆααααα½αα
ααα½αααΊααααααααααΆ
ααΌα αααα’αααα’αΆα ααΎα kubectl αα·αααΆαα αΆααααααΎα pod α‘αΎααα·ααα αα αααααααααααα·αα·αααααΎαααΈ 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; αα»α
αα»ααααααΆαααααααααααααα·ααΈααα αααααα ααα»ααΊααΆαααααααΆαα
αααααααα»αααΆααααα½ααα·αα·ααα αα·ααααα½ααα·αα·ααααα»αααΆααααααα·ααΈα αααβαααΆαβααΆβααβααααΆαβαααααααΆαβααΎααααΈβα
αΆααβαα·ααΆαααΆαβααβαααααΌαβα’αααΈβαααα αααααα ααα»αα
ααααΆαααααααααααΆααααα
αα
α»ααααααααα αα½αααααααΌααααααΌα αα·αααααΎαα
ααΆαααααααααααααααΌααααααα ααα»αααααΆααααΆααα·ααΆαααααΆαααΆαα’αΆαααα αα·αααααΎααΆααααααα
α
α·αααα [ααΆααα’αααααα’αΆα
ααααΎααΆααααααααΆααααααα·ααΈ cloud αααααααΎ monit ααΆα§ααΆα ααα ααα»ααααααΆαα½α k8s ααΆααΆααααααΆααααα½α :) - αααααα
αααΆαααααα’αααααααααα½αα ]
ααααβααααβααα ααΆαβααβαααααΌαβααααΌαβααααΎβα‘αΎαβααααΎαβααβαααα»αβαααβααααΆβαα·αβααααΆαα ααΌα ααααβαααααα·ααΈβαααβααααΌαβααβααΆβαααα’ααβαααα βαααβα αΎαα αα αα½ααααα½ααααααα αΆαα ααα»α αααα αααααα’αα»ααααΆαα±αααααααααααααα½ααα·αα·ααααα½α αα·ααααααΌααα·ααααααααααΆααααααα’αααΈααααΆαααΆαααααααΎαααΆα ααΌα αααααα½αααα’αΆα ααααΎαααααααΆααααααα·αααΎα αΆαααΆα αα αααααααΌαααΆαααα α ααΆ ααααΌααΆααα ααΆααΆαααααααΆαα’αα»αααα αααα’αα»ααααααΆααααααΆαααααααααααααα (HOP)α
Kubernetes αααααααΆααα·αα·ααααα»αααΆα 2 ααααααααΆαααααΆαααΎαα readinessProbe αα·α livenessProbeα ααΆααααΈαααααΎααααααααααΆααααα½ααα·αα·αααααΌα ααααΆ (ααααΎ HTTP GET, ααΆαααααΆαααααα TCP αα·αααΆαααααα·ααααα·ααΆααααααααΆ) α αα½αααααΆαααΆααα»ααααααααααΆαα αααα»αααΆααααααα α α·αααααααα½αααααααΎαααα»αααΆαααααΎααααα ααΉααααα αΆαα αααα»αααα livenessProbe α αΆααααααΎααα»αααΊαααα‘αΎααα·αααααααααΉαααΆααα α»αααΉααα·αααΎαα‘αΎαααααααα α αΎαααΆαααααααααα½α Probe ααα pod ααΈα ααΆα αα αΌααα αΌααααααΌαα ααα»αααααα αΆααααΌαααΆααααααααΆαα
ααΆααα ααΆαααααα·ααΈααααΉαααααΌααα½ααααα½ααααα αΌαααΆααααααααααααΆααααα½ααα·αα·ααα αα·αααΆααΆααΆαα½ααααααααΌααα·ααααααααΆααααααααααΆαα ααΆαα·ααααα ααααααααααΈααΎαααααα½αααααΌαααΆααααα ααα ααΆαααα½ααααα αΆαα ααα»α αααα αα API α αΆαααΆα ααααααααααααααααααααα½ααα·αα·ααα (Prometheus) ααΆαα½αααΉααααααΆαααα»αααΆαααααΆαααα
ααααα: www.habr.com