k8s探针检测php,k8s实践11:kubernetes监测探针简单测试
探針實(shí)踐
1.兩種探針
readiness probe(就緒探針)
監(jiān)測容器是否就緒?只有pod里的容器就緒,kubelet才會認(rèn)為pod處于就緒狀態(tài).
就緒探針的作用是控制哪些pod可以作為svc的后端,如果pod不是就緒狀態(tài),就把它從svc load balancer中移除.
liveness probe(存活探針)
監(jiān)測容器是否存活?如果容器中的應(yīng)用出現(xiàn)問題,liveness將檢測到容器不健康會通知kubelet,kubelet重啟該pod容器.
2.使用探針的三種方式
官網(wǎng)介紹了三種,見下:
command命令執(zhí)行
http request訪問
tcp socket連接
個人比較喜歡用第三種方式,tcp socket.
3.tcp socket方式學(xué)習(xí)測試
tcp socket方式
這個方式比較好理解.
比如說,起一個nginx容器,nginx服務(wù)提供的端口是80端口.
配置tcp socket 探針,設(shè)定隔一個時間,用tcp方式連接80端口,如果連接成功,就返回容器健康或者就緒,如果連接失敗,返回容器不健康或者不就緒,kubelet重啟容器.
3.1.逆向思維示例:
簡單思路:探針tcp socket連接不存在的8080端口,必然連接失敗報錯,從而實(shí)現(xiàn)pod不斷重啟.
起一個nginx的pod容器,提供服務(wù)端口80.配置探針連接端口8080,第一次監(jiān)測時間為pod容器啟動后的45s,第一次監(jiān)測后每隔20s監(jiān)測一次.
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
測試結(jié)果,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.正常配置示例
正常配置是連接提供服務(wù)的80端口.
簡單思路:理論上來說,長時間運(yùn)行的應(yīng)用程序最終會過渡到中斷狀態(tài),除非重新啟動,否則無法恢復(fù).Kubernetes提供了活性探針來檢測和補(bǔ)救這種情況.這是配置探針的根本原因,以防萬一.
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容器,然后執(zhí)行命令殺死nginx進(jìn)程,設(shè)定探針監(jiān)測連接tcp socket 80端口,當(dāng)nginx進(jìn)程被殺死后,tcp socket連接失敗,探針監(jiān)測容器為不健康不就緒,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
配置參數(shù)說明:
容器啟動后,執(zhí)行nginx -s quit殺死Nginx進(jìn)程
容器啟動20s后開始執(zhí)行readiness和liveness檢測
容器啟動后35s左右
探針監(jiān)測到nginx進(jìn)程已經(jīng)死掉,無法連接到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
總結(jié)
以上是生活随笔為你收集整理的k8s探针检测php,k8s实践11:kubernetes监测探针简单测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光刻技术的原理和EUV光刻技术前景
- 下一篇: 基于php校园失物招领,基于全景图的校园