k8s探针检测php,k8s实践11:kubernetes监测探针简单测试
探針實踐
1.兩種探針
readiness probe(就緒探針)
監測容器是否就緒?只有pod里的容器就緒,kubelet才會認為pod處于就緒狀態.
就緒探針的作用是控制哪些pod可以作為svc的后端,如果pod不是就緒狀態,就把它從svc load balancer中移除.
liveness probe(存活探針)
監測容器是否存活?如果容器中的應用出現問題,liveness將檢測到容器不健康會通知kubelet,kubelet重啟該pod容器.
2.使用探針的三種方式
官網介紹了三種,見下:
command命令執行
http request訪問
tcp socket連接
個人比較喜歡用第三種方式,tcp socket.
3.tcp socket方式學習測試
tcp socket方式
這個方式比較好理解.
比如說,起一個nginx容器,nginx服務提供的端口是80端口.
配置tcp socket 探針,設定隔一個時間,用tcp方式連接80端口,如果連接成功,就返回容器健康或者就緒,如果連接失敗,返回容器不健康或者不就緒,kubelet重啟容器.
3.1.逆向思維示例:
簡單思路:探針tcp socket連接不存在的8080端口,必然連接失敗報錯,從而實現pod不斷重啟.
起一個nginx的pod容器,提供服務端口80.配置探針連接端口8080,第一次監測時間為pod容器啟動后的45s,第一次監測后每隔20s監測一次.
kubectl apply -f tanzhen-test1.yaml
pod/httpd created
cat tanzhen-test1.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 45
periodSeconds: 20
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 45
periodSeconds: 20
測試結果,pod容器一直在重啟.
探針自動tcp連接容器ip:8080端口,失敗.所以容器一直重啟.
describe報錯見下
Warning Unhealthy 8s (x2 over 28s) kubelet, k8s-node2 Readiness probe failed: dial tcp 172.30.92.6:8080: connect: connection refused
Warning Unhealthy 1s (x2 over 21s) kubelet, k8s-node2 Liveness probe failed: dial tcp 172.30.92.6:8080: connect: connection refused
3.2.正常配置示例
正常配置是連接提供服務的80端口.
簡單思路:理論上來說,長時間運行的應用程序最終會過渡到中斷狀態,除非重新啟動,否則無法恢復.Kubernetes提供了活性探針來檢測和補救這種情況.這是配置探針的根本原因,以防萬一.
cat tanzhen-test2.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 45
periodSeconds: 20
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 45
periodSeconds: 20
3.3.正常配置模擬測試案例
簡單思路:起nginx容器,然后執行命令殺死nginx進程,設定探針監測連接tcp socket 80端口,當nginx進程被殺死后,tcp socket連接失敗,探針監測容器為不健康不就緒,kubelet重啟容器.
cat tanzhen-test3.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
args:
- /bin/sh
- -c
- sleep 60;nginx -s quit
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 20
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 20
periodSeconds: 10
配置參數說明:
容器啟動后,執行nginx -s quit殺死Nginx進程
容器啟動20s后開始執行readiness和liveness檢測
容器啟動后35s左右
探針監測到nginx進程已經死掉,無法連接到80端口,整個重啟事件記錄,見下:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 90s default-scheduler Successfully assigned default/httpd to k8s-node1
Normal Pulling 88s kubelet, k8s-node1 Pulling image "nginx"
Normal Pulled 57s kubelet, k8s-node1 Successfully pulled image "nginx"
Normal Created 57s kubelet, k8s-node1 Created container httpd
Normal Started 56s kubelet, k8s-node1 Started container httpd
Warning Unhealthy 9s (x3 over 29s) kubelet, k8s-node1 Readiness probe failed: dial tcp 172.30.78.6:80: connect: connection refused
Warning Unhealthy 8s (x3 over 28s) kubelet, k8s-node1 Liveness probe failed: dial tcp 172.30.78.6:80: connect: connection refused
Normal Killing 8s kubelet, k8s-node1 Container httpd failed liveness probe, will be restarted
總結
以上是生活随笔為你收集整理的k8s探针检测php,k8s实践11:kubernetes监测探针简单测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光刻技术的原理和EUV光刻技术前景
- 下一篇: 动态规划算法php,php算法学习之动态