1.說明
容器探針: kubelet 對容器執行的定期診斷
探針執行方式:
LivenessProbe: 判斷容器是否存活 running狀態, 如果不健康kubelet就會殺掉pod,根據重啟策略RestartPolicy進行相應的處理
ReadinessProbe: 判斷容器是否處於可用Ready狀態, 達到ready狀態表示pod可以接受請求, 如果不健康, 從service的后端endpoint列表中把pod隔離出去
診斷的三種方式:
ExecAction:在容器內執行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。
TCPSocketAction:對指定端口上的容器的 IP 地址進行 TCP 檢查。如果端口打開,則診斷被認為是成功的。
HTTPGetAction:對指定的端口和路徑上的容器的 IP 地址執行 HTTP Get 請求。如果響應的狀態碼大於等於200 且小於 400,則診斷被認為是成功的。
為什么會存在兩種探針, 兩種探測探測失敗的方式不同, 一個是重啟容器 一個是不提供服務
2.定義exec執行命令的liveness和readiness探針
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment
namespace: default
labels:
app: busybox
spec:
selector:
matchLabels:
app: busybox
replicas: 1
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox:1.28.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
args: ["/bin/sh","-c","touch /tmp/healthy;sleep 30; rm -f /tmp/healthy; sleep 3600"]
livenessProbe:
exec:
command: ["cat","/tmp/healthy"]
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
exec:
command: ["cat","/tmp/healthy"]
initialDelaySeconds: 5
periodSeconds: 5
說明: periodSeconds 規定kubelet要每隔5秒執行一次liveness probe。 initialDelaySeconds 告訴kubelet在第一次執行probe之前要的等待5秒鍾。
探針檢測命令是在容器中執行 cat /tmp/healthy 命令。如果命令執行成功,將返回0,kubelet就會認為該容器是活着的並且很健康。如果返回非0值,kubelet就會殺掉這個容器並重啟它。
容器啟動時,執行該命令:/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
在容器生命的最初30秒內有一個 /tmp/healthy 文件,在這30秒內 cat /tmp/healthy命令會返回一個成功的返回碼。30秒后, cat /tmp/healthy 將返回失敗的返回碼。
3.定義HTTP liveness和readiness探針
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
httpHeaders:
- name: X-Custom-Header
value: hello
initialDelaySeconds: 5
periodSeconds: 3
readinessProbe:
httpGet:
path: /index.html
port: 80
httpHeaders:
- name: X-Custom-Header
value: hello
initialDelaySeconds: 5
periodSeconds: 3
4.定義TCP liveness和readiness探針
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 3
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 3
5.Probe詳細配置:
initialDelaySeconds:容器啟動后第一次執行探測是需要等待多少秒。
periodSeconds:執行探測的頻率。默認是10秒,最小1秒。
timeoutSeconds:探測超時時間。默認1秒,最小1秒。
successThreshold:探測失敗后,最少連續探測成功多少次才被認定為成功。默認是1。對於liveness必須是1。最小值是1。
failureThreshold:探測成功后,最少連續探測失敗多少次才被認定為失敗。默認是3。最小值是1。
HTTP probe 中可以給 httpGet設置其他配置項:
6.httpget其它配置項
host:連接的主機名,默認連接到pod的IP。你可能想在http header中設置"Host"而不是使用IP。
scheme:連接使用的schema,默認HTTP。
path: 訪問的HTTP server的path。
httpHeaders:自定義請求的header。HTTP運行重復的header。
port:訪問的容器的端口名字或者端口號。端口號必須介於1和65535之間。