探針 (Probe) 用于檢查容器的健康狀態(tài)唆貌,確保 Kubernetes (K8s) 能夠 正確管理 Pod 的生命周期起趾。本文將介紹 Liveness胰挑、Readiness试读、Startup 三種探針杠纵,并詳細(xì)說明常用 配置字段。
1. 探針類型
探針類型 | 作用 | 失敗后行為 | 適用場景 |
---|---|---|---|
Liveness 探針 | 檢查容器是否存活 | 失敗后 重啟容器 | 防止進(jìn)程卡死 |
Readiness 探針 | 檢查容器是否能接收流量 | 失敗后 從負(fù)載均衡中移除 | 需要外部資源的應(yīng)用 |
Startup 探針 | 檢查應(yīng)用是否已啟動完成 | 失敗后 重啟容器 | 啟動慢的應(yīng)用 |
2. 探針的常見配置字段
K8s 提供了多種 探針參數(shù)钩骇,用于控制探測的方式和頻率比藻。
配置項 | 說明 | 默認(rèn)值 |
---|---|---|
initialDelaySeconds |
初始延遲時間(秒),容器啟動后等待多少秒才開始探測 | 0 |
periodSeconds |
探測間隔時間(秒)倘屹,多久探測一次 | 10 |
timeoutSeconds |
探測超時時間(秒)银亲,探測請求最多等待多久 | 1 |
failureThreshold |
連續(xù)探測失敗多少次 才認(rèn)為容器異常 | 3 |
successThreshold |
連續(xù)探測成功多少次 才認(rèn)為容器恢復(fù)正常 | 1 |
httpGet |
通過 HTTP 方式探測,定義 path 和 port
|
N/A |
tcpSocket |
通過 TCP 方式探測纽匙,檢測端口是否打開 | N/A |
exec |
通過 執(zhí)行命令探測务蝠,返回 0 表示成功 |
N/A |
3. 探針的三種檢查方式
K8s 提供 三種探測方式,每種方式適用于不同的場景烛缔。
3.1 HTTP 請求方式 (httpGet
)
適用于 提供 HTTP API 的應(yīng)用馏段,如 Web 服務(wù) 或 RESTful API。
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
解釋:
- 每 10 秒 訪問
/health
接口 檢查健康狀態(tài)力穗。 - 超過 3 秒無響應(yīng) 視為失敗毅弧。
- 連續(xù) 3 次失敗,容器將被 重啟当窗。
3.2 TCP 端口檢查 (tcpSocket
)
適用于 沒有 HTTP 健康檢查 但 必須保持端口可用 的服務(wù),例如 數(shù)據(jù)庫寸宵、Redis崖面、MQTT 服務(wù)器。
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
解釋:
- 檢查 3306 端口是否可連接(用于 MySQL)梯影。
- 失敗則 不接受新請求巫员。
3.3 命令執(zhí)行方式 (exec
)
適用于 沒有 Web API,但可以通過 執(zhí)行命令 檢查狀態(tài)的應(yīng)用甲棍,例如 后臺任務(wù) 或 守護(hù)進(jìn)程简识。
startupProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 30
解釋:
- 運行
cat /tmp/healthy
,如果文件存在則表示啟動成功。 - 失敗 30 次(150 秒)才重啟容器七扰,適用于 啟動時間較長的應(yīng)用奢赂。
4. 綜合示例(多個探針)
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: my-app-image
# 存活探針
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
# 就緒探針
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
# 啟動探針
startupProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 30
解析:
-
Liveness Probe(存活探針):每 10 秒 訪問
/health
,失敗 3 次 重啟容器颈走。 - Readiness Probe(就緒探針):檢測 8080 端口 是否可用膳灶,失敗則 不接受新流量。
-
Startup Probe(啟動探針):運行
cat /tmp/healthy
檢查應(yīng)用是否啟動完成立由,失敗 30 次才重啟轧钓。
5. 探針優(yōu)化建議
建議 | 說明 |
---|---|
使用 Startup 探針防止誤判 | 啟動慢的應(yīng)用(如 JVM)應(yīng)使用 startupProbe ,避免 K8s 誤判啟動失敗 |
適當(dāng)調(diào)整 failureThreshold |
業(yè)務(wù)容器可能 偶爾超時锐膜,適當(dāng)增加 failureThreshold 可減少不必要的重啟 |
超時時間 (timeoutSeconds ) 適配應(yīng)用 |
確保超時時間足夠應(yīng)用響應(yīng)探測請求毕箍,避免因網(wǎng)絡(luò)延遲導(dǎo)致誤判 |
避免探測過于頻繁 |
periodSeconds 不宜設(shè)置過小,否則會 增加探測壓力
|
6. 總結(jié)
- Liveness Probe(存活探針) 確保容器不死鎖道盏,失敗會 重啟容器霉晕。
- Readiness Probe(就緒探針) 確保容器能接受請求,失敗會 臨時移出負(fù)載均衡捞奕。
- Startup Probe(啟動探針) 適用于 啟動慢的應(yīng)用牺堰,失敗會 重啟容器。
- 支持 HTTP颅围、TCP伟葫、命令執(zhí)行三種探測方式,根據(jù)應(yīng)用特性選擇合適的檢查方式院促。
通過 合理配置探針筏养,可以提升 Kubernetes 集群的 穩(wěn)定性 和 高可用性!