文章目錄
- startupProbe探針
- startupProbe說明
- 示例配置
- 參數解釋
- 使用場景說明
- 實例——要求: 容器在8秒內完成啟動,否則殺死對應容器
- 工作流程說明
- timeoutSeconds: 和 periodSeconds: 參數順序說明
- livenessProbe探針
- livenessProbe說明
- 示例配置
- 參數解釋
- 使用場景說明
- 實例——題目要求:如果發現業務4秒后無響應,殺死對應容器,并進行重啟
- 工作流程說明
- readnessProbe探針
- readnessProbe說明
- 示例配置
- 參數解釋
- 使用場景說明
- 實例——如果發現業務3秒后無響應,訪問流量將不會傳值該容器,5秒內如果回復響應,訪問流量將繼續轉發至該容器
- 工作流程說明
- 一個完整的包含3個探針的實例yaml文件
startupProbe探針
startupProbe
是 Kubernetes 中的一種探針,用于檢測容器的啟動狀態。- 如果容器未能在指定的時間內啟動,Kubernetes 將殺死并重啟該容器。【簡單來說startupProbe 用于檢測容器是否已經成功啟動。如果
startupProbe
失敗,Kubernetes 將殺死容器并根據策略進行重啟。】 startupProbe
主要用于那些啟動時間較長的應用,以確保它們在完全啟動之前不會被其他探針(如livenessProbe
和readinessProbe
)誤判為失敗。也就是說,它通常用于那些啟動時間較長的應用程序,以確保在應用程序完全啟動之前不會觸發 livenessProbe 和 readinessProbe。
- 如果容器未能在指定的時間內啟動,Kubernetes 將殺死并重啟該容器。【簡單來說startupProbe 用于檢測容器是否已經成功啟動。如果
startupProbe說明
-
以下是
startupProbe
的常用參數及其說明: -
- httpGet: 使用 HTTP GET 請求進行探測。
- path: 要探測的 HTTP 路徑。
- port: 要探測的端口。
- scheme: 使用的協議(HTTP 或 HTTPS)。
示例:
httpGet:path: /port: 8080scheme: HTTP
- httpGet: 使用 HTTP GET 請求進行探測。
-
- tcpSocket: 使用 TCP 檢查進行探測。
- port: 要探測的端口。
示例:
tcpSocket:port: 8080
- tcpSocket: 使用 TCP 檢查進行探測。
-
- exec: 使用命令執行進行探測。
- command: 要執行的命令及其參數。
示例:
exec:command:- cat- /etc/hosts
- exec: 使用命令執行進行探測。
-
- initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 類型:整數
- 默認值:0
- initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
-
- timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 類型:整數
- 默認值:1
- timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
-
- periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 類型:整數
- 默認值:10
-
- successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 類型:整數
- 默認值:1
-
- failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并觸發容器重啟。
- 類型:整數
- 默認值:3
示例配置
- 以下是一個完整的
startupProbe
配置示例:
startupProbe:httpGet:path: /port: 8080scheme: HTTPinitialDelaySeconds: 0timeoutSeconds: 5periodSeconds: 10successThreshold: 1failureThreshold: 3
參數解釋
- httpGet: 使用 HTTP GET 請求檢查
/
路徑,端口為 8080,使用 HTTP 協議。 - initialDelaySeconds: 0: 容器啟動后立即開始進行探測。
- timeoutSeconds: 5: 探針等待5秒以獲取響應。如果超過5秒沒有響應,則認為探針失敗。
- periodSeconds: 10: 每10秒進行一次探測。
- successThreshold: 1: 探針只需一次成功就認為探測通過。
- failureThreshold: 3: 探針需要連續三次失敗才認為探測失敗,并觸發容器重啟。
使用場景說明
-
使用場景一般有下面2個:
- 啟動時間較長的應用:對于啟動時間較長的應用,使用
startupProbe
可以確保它們在完全啟動之前不會被誤判為失敗。 - 避免誤判:在應用啟動過程中,
livenessProbe
和readinessProbe
可能會誤判應用為失敗。使用startupProbe
可以避免這種情況。
- 啟動時間較長的應用:對于啟動時間較長的應用,使用
-
通過合理配置
startupProbe
,可以確保容器在啟動過程中得到正確的檢測和處理,避免因啟動時間較長而導致的不必要的重啟。
實例——要求: 容器在8秒內完成啟動,否則殺死對應容器
- 根據題意,最終參數如下:
這種配置確保了探針能夠每2秒檢查一次容器狀態,并且在容器未能在8秒內啟動完成時殺死容器。探針等待4秒以獲取響應,如果超過4秒沒有響應,則認為探針失敗。探針需要連續兩次失敗(即8秒內兩次失敗)才會將容器標記為啟動失敗并觸發重啟。
startupProbe:exec:command:- cat- /etc/hostsinitialDelaySeconds: 0timeoutSeconds: 4periodSeconds: 2successThreshold: 1failureThreshold: 2
工作流程說明
- 解析
startupProbe 【只啟動一次】——容器啟動的時候完成探針,失敗就killexec: 通過在容器內執行命令來檢查應用的健康狀況。command: 要執行的命令。- cat- /etc/hosts`initialDelaySeconds 0` 用于指定在容器啟動后多長時間開始進行首次健康檢查。它的作用是讓容器有足夠的時間來完成初始化操作,避免在容器還未完全啟動時就進行健康檢查,從而導致誤判。例如,如果將 `initialDelaySeconds` 設置為 `30`,那么 Kubernetes 會在容器啟動后的 30 秒才開始進行第一次 `startupProbe` 檢查。`timeoutSeconds 4`: 探測的超時時間(秒)。`periodSeconds 2`: 執行探測的周期(秒)。`successThreshold 1`: 探測成功的閾值。連續成功達到這個閾值后,容器被認為已經成功啟動。默認值是 1。如果設置為 1,只要有一次成功的探測,容器就會被認為啟動成功。`failureThreshold 2`: 探測失敗的閾值。在達到這個閾值之前,容器不會被認為啟動失敗。
-
參數解釋
-
exec: 使用命令執行方式進行探測,這里使用
ls /mnt
命令。- command: 定義了要執行的命令,這里是
ls /mnt
。
- command: 定義了要執行的命令,這里是
-
initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 在你的配置中,
initialDelaySeconds: 0
表示容器啟動后立即開始進行探測。
- 在你的配置中,
-
timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 在你的配置中,
timeoutSeconds: 4
表示探針等待4秒以獲取響應。如果超過4秒沒有響應,則認為探針失敗。
- 在你的配置中,
-
periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 在你的配置中,
periodSeconds: 2
表示每2秒進行一次探測。
- 在你的配置中,
-
successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 在你的配置中,
successThreshold: 1
表示探針只需一次成功就認為探測通過。
- 在你的配置中,
-
failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并觸發容器重啟。
- 在你的配置中,
failureThreshold: 2
表示探針需要連續兩次失敗才認為探測失敗。
- 在你的配置中,
-
-
工作流程
-
- 容器啟動后,探針會立即開始進行探測(
initialDelaySeconds: 0
)。
- 容器啟動后,探針會立即開始進行探測(
-
- 每2秒,探針會執行一次
ls /mnt
命令(periodSeconds: 2
)。
- 每2秒,探針會執行一次
-
- 如果探針在4秒內沒有成功執行
ls /mnt
命令(timeoutSeconds: 4
),則認為探針失敗。
- 如果探針在4秒內沒有成功執行
-
- 探針需要連續兩次失敗(
failureThreshold: 2
)才會觸發容器重啟。
- 探針需要連續兩次失敗(
-
-
適用場景
- initialDelaySeconds: 0:適用于希望容器啟動后立即開始探測的場景。
- timeoutSeconds: 4:適用于希望容器在執行命令時有足夠的時間響應。
- periodSeconds: 2:適用于希望頻繁檢查容器啟動狀態的情況。
- successThreshold: 1:適用于希望探針只需一次成功就認為容器啟動成功的情況。
- failureThreshold: 2:適用于希望探針需要連續兩次失敗才認為容器啟動失敗的情況,避免偶發性故障導致不必要的重啟。
-
結論
這個配置是合適的,因為它能夠滿足以下需求:
8秒內完成啟動:探針每2秒檢查一次容器狀態,探針等待4秒以獲取響應。如果超過4秒沒有響應,則認為探針失敗。探針需要連續兩次失敗(即8秒內兩次失敗)才會將容器標記為啟動失敗并觸發重啟。 -
口水話深度解析
- 容器啟動后,探針會立即開始進行探測。
- 開始第一個循環,循環內容持續時間是4秒,循環內容為:探針每4秒(periodSeconds: 4)執行一次 ls /mnt 命令。持續時間為2秒(timeoutSeconds: 2)【時間是包含關系【(periodSeconds: 4)包含(timeoutSeconds: 2)】,而不能(periodSeconds: 4)x(timeoutSeconds: 2)=8秒】
- 【換種方式來說就是,4秒執行一次,持續時間4秒(periodSeconds: 4),4秒中做的事情是,2秒內(timeoutSeconds: 2)有沒有成功執行 ls /mnt命令】
- 如果探針在2秒(timeoutSeconds: 2)內沒有成功執行 ls /mnt 命令,則認為探針失敗。然后開始下一個循環(failureThreshold: 2),一組循環的參數是(periodSeconds: 4)和(timeoutSeconds: 2)。
- 探針需要連續兩次失敗(即8秒內兩次失敗)才會觸發容器重啟。【時間計算是(periodSeconds: 4)x(failureThreshold: 2)】
- 而所謂的“否則殺死對應容器”,就是表示容器不運行而已
timeoutSeconds: 和 periodSeconds: 參數順序說明
- 容器在8秒內完成啟動,否則殺死對應容器,下面2個參數哪個更合適?
startupProbe:exec:command:- ls- /mntinitialDelaySeconds: 0timeoutSeconds: 2periodSeconds: 4successThreshold: 1failureThreshold: 2#和startupProbe:exec:command:- ls- /mntinitialDelaySeconds: 0timeoutSeconds: 4periodSeconds: 2successThreshold: 1failureThreshold: 2
根據你的需求:容器在8秒內完成啟動,否則殺死對應容器。
-
區別
-
- timeoutSeconds:
- 配置1:
timeoutSeconds: 2
,探針等待2秒以獲取響應。如果超過2秒沒有響應,則認為探針失敗。 - 配置2:
timeoutSeconds: 4
,探針等待4秒以獲取響應。如果超過4秒沒有響應,則認為探針失敗。
-
- periodSeconds:
- 配置1:
periodSeconds: 4
,每4秒進行一次探測。
-
配置2:
periodSeconds: 2
,每2秒進行一次探測。
-
-
需求分析
- 8秒內完成啟動:需要探針在8秒內檢測到容器是否啟動完成,否則殺死容器。
-
配置選擇
-
配置1
- 探針每4秒檢查一次容器狀態。
- 探針等待2秒以獲取響應。
- 探針需要連續兩次失敗(即8秒內兩次失敗)才會將容器標記為啟動失敗并殺死容器。
-
配置2
- 探針每2秒檢查一次容器狀態。
- 探針等待4秒以獲取響應。
- 探針需要連續兩次失敗(即8秒內兩次失敗)才會將容器標記為啟動失敗并殺死容器。
-
-
結論
- 配置2 更合適,因為它能夠更頻繁地檢查容器狀態,并且在8秒內檢測到容器是否啟動完成。
- 這種配置確保了探針能夠每2秒檢查一次容器狀態,并且在容器未能在8秒內啟動完成時殺死容器。探針等待4秒以獲取響應,如果超過4秒沒有響應,則認為探針失敗。探針需要連續兩次失敗(即8秒內兩次失敗)才會將容器標記為啟動失敗并殺死容器。
startupProbe:exec:command:- ls- /mntinitialDelaySeconds: 0timeoutSeconds: 4periodSeconds: 2successThreshold: 1failureThreshold: 2
livenessProbe探針
livenessProbe說明
-
livenessProbe
是 Kubernetes 中的一種探針,用于檢測容器是否處于健康狀態。- 如果探針失敗,Kubernetes 會殺死容器并根據策略進行重啟。
livenessProbe
主要用于確保容器在運行過程中保持健康狀態,如果容器進入不健康狀態,可以通過重啟來恢復。- 通過合理配置
livenessProbe
,可以確保容器在運行過程中保持健康狀態,并在出現問題時自動重啟容器,從而提高應用的可靠性和可用性。
-
以下是
livenessProbe
的常用參數及其說明:- httpGet: 使用 HTTP GET 請求進行探測。
- path: 要探測的 HTTP 路徑。
- port: 要探測的端口。
- scheme: 使用的協議(HTTP 或 HTTPS)。
示例:
httpGet:path: /port: 8080scheme: HTTP
-
- tcpSocket: 使用 TCP 檢查進行探測。
- port: 要探測的端口。
示例:
tcpSocket:port: 8080
-
- exec: 使用命令執行進行探測。
- command: 要執行的命令及其參數。
示例:
exec:command:- cat- /etc/hosts
-
- initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 類型:整數
- 默認值:0
-
- timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 類型:整數
- 默認值:1
-
- periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 類型:整數
- 默認值:10
-
- successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 類型:整數
- 默認值:1
-
- failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并觸發容器重啟。
- 類型:整數
- 默認值:3
示例配置
- 以下是一個完整的
livenessProbe
配置示例:
livenessProbe:httpGet:path: /port: 8080scheme: HTTPinitialDelaySeconds: 10timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3
參數解釋
- httpGet: 使用 HTTP GET 請求檢查
/
路徑,端口為 8080,使用 HTTP 協議。 - initialDelaySeconds: 10: 容器啟動后等待10秒再開始進行探測。
- timeoutSeconds: 1: 探針等待1秒以獲取響應。如果超過1秒沒有響應,則認為探針失敗。
- periodSeconds: 10: 每10秒進行一次探測。
- successThreshold: 1: 探針只需一次成功就認為探測通過。
- failureThreshold: 3: 探針需要連續三次失敗才認為探測失敗,并觸發容器重啟。
使用場景說明
- 使用場景如下
- 檢測應用崩潰:如果應用進程崩潰或掛起,
livenessProbe
可以檢測到并觸發容器重啟。 - 檢測死鎖:如果應用進入死鎖狀態,
livenessProbe
可以檢測到并觸發容器重啟。 - 檢測資源耗盡:如果應用耗盡了資源(如內存、CPU),
livenessProbe
可以檢測到并觸發容器重啟。
- 檢測應用崩潰:如果應用進程崩潰或掛起,
實例——題目要求:如果發現業務4秒后無響應,殺死對應容器,并進行重啟
- 題目要求:如果發現業務4秒后無響應,殺死對應容器,并進行重啟
- 最終如下
這種配置確保了探針能夠每秒檢查一次服務狀態,并且在服務無響應時更準確地將容器標記為不健康。探針等待2秒以獲取響應,如果超過2秒沒有響應,則認為探針失敗。探針需要連續兩次失敗才會觸發容器重啟,同時在服務恢復響應時能夠快速將容器標記為健康。
livenessProbe:httpGet:path: /port: 8090scheme: HTTPinitialDelaySeconds: 10timeoutSeconds: 2periodSeconds: 1successThreshold: 1failureThreshold: 2
工作流程說明
liveness【整個生命周期存在】——檢測狀態,失敗就kill#用于檢測容器是否處于健康狀態。如果探針失敗,Kubernetes 會殺死容器并根據策略進行重啟。#適用于檢測容器是否需要重啟的情況。tcpSocket: 過嘗試建立 TCP 連接來檢查應用的健康狀況。port: 8090 要連接的端口。`initialDelaySeconds 10` 用于指定在容器啟動后多長時間開始進行首次健康檢查。它的作用是讓容器有足夠的時間來完成初始化操作,避免在容器還未完全啟動時就進行健康檢查,從而導致誤判。例如,如果將 `initialDelaySeconds` 設置為 `30`,那么 Kubernetes 會在容器啟動后的 30 秒才開始進行第一次 `startupProbe` 檢查。`timeoutSeconds 2`: 探測的超時時間(秒)。默認值是 1 秒。`periodSeconds 1`: 執行探測的周期(秒)。默認值是 10 秒。`successThreshold 1`: 探測成功的閾值。連續成功達到這個閾值后,容器被認為已經成功啟動。默認值是 1。如果設置為 1,只要有一次成功的探測,容器就會被認為啟動成功。`failureThreshold 2`: 探測失敗的閾值。在達到這個閾值之前,容器不會被認為啟動失敗。默認值是 3。
-
參數解釋
-
httpGet: 使用 HTTP GET 請求進行探測。
-
path:
/
,這是探針將要檢查的路徑。 -
port:
8090
,這是探針將要檢查的端口。 -
scheme:
HTTP
,使用 HTTP 協議進行探測。 -
initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 在你的配置中,
initialDelaySeconds: 10
表示容器啟動后等待10秒再開始進行探測。
- 在你的配置中,
-
timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 在你的配置中,
timeoutSeconds: 2
表示探針等待2秒以獲取響應。如果超過2秒沒有響應,則認為探針失敗。
- 在你的配置中,
-
periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 在你的配置中,
periodSeconds: 1
表示每1秒進行一次探測。
- 在你的配置中,
-
successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 在你的配置中,
successThreshold: 1
表示探針只需一次成功就認為探測通過。
- 在你的配置中,
-
failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并觸發容器重啟。
- 在你的配置中,
failureThreshold: 2
表示探針需要連續兩次失敗才認為探測失敗。
- 在你的配置中,
-
-
工作流程
-
- 容器啟動后,探針會等待10秒再開始進行探測(
initialDelaySeconds: 10
)。
- 容器啟動后,探針會等待10秒再開始進行探測(
-
- 每1秒,探針會對
http://<容器IP>:8090/
發起一次 HTTP GET 請求(periodSeconds: 1
)。
- 每1秒,探針會對
-
- 如果探針在2秒內沒有收到響應(
timeoutSeconds: 2
),則認為探針失敗。
- 如果探針在2秒內沒有收到響應(
-
- 探針需要連續兩次失敗(
failureThreshold: 2
)才會觸發容器重啟。
- 探針需要連續兩次失敗(
-
- 探針只需一次成功(
successThreshold: 1
)就會將容器標記為健康。
- 探針只需一次成功(
-
-
適用場景
- initialDelaySeconds: 10:適用于希望容器啟動后等待一段時間再開始探測的場景。
- timeoutSeconds: 2:適用于希望快速檢測到服務無響應的情況。
- periodSeconds: 1:適用于希望頻繁檢查服務健康狀態的情況。
- successThreshold: 1:適用于希望探針只需一次成功就認為服務健康的情況。
- failureThreshold: 2:適用于希望探針需要連續兩次失敗才認為服務不健康的情況,避免偶發性故障導致不必要的重啟。
-
滿足需求
- 10秒后開始探測:容器啟動后等待10秒再開始進行探測。
- 2秒無響應:探針等待2秒以獲取響應,如果超過2秒沒有響應,則認為探針失敗。
- 每1秒檢查一次:探針每1秒檢查一次服務狀態。
- 連續兩次失敗:探針需要連續兩次失敗才會觸發容器重啟。
readnessProbe探針
readnessProbe說明
-
readinessProbe
是 Kubernetes 中的一種探針,用于檢測容器是否已經準備好接受流量。- 如果探針失敗,Kubernetes 會將容器從服務的端點列表中移除,但不會殺死容器。
- 這主要用于確保只有健康且準備好處理請求的容器才會接收流量。
- 通過合理配置
readinessProbe
,可以確保只有健康且準備好處理請求的容器才會接收流量,從而提高應用的可靠性和可用性。
-
readinessProbe
參數說明
以下是readinessProbe
的常用參數及其說明: -
- httpGet: 使用 HTTP GET 請求進行探測。
- path: 要探測的 HTTP 路徑。
- port: 要探測的端口。
- scheme: 使用的協議(HTTP 或 HTTPS)。
示例:
httpGet:path: /port: 8080scheme: HTTP
-
- tcpSocket: 使用 TCP 檢查進行探測。
- port: 要探測的端口。
示例:
tcpSocket:port: 8080
-
- exec: 使用命令執行進行探測。
- command: 要執行的命令及其參數。
示例:
exec:command:- cat- /etc/hosts
-
- initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 類型:整數
- 默認值:0
-
- timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 類型:整數
- 默認值:1
-
- periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 類型:整數
- 默認值:10
-
- successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 類型:整數
- 默認值:1
-
- failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并將容器標記為不就緒。
- 類型:整數
- 默認值:3
示例配置
以下是一個完整的 readinessProbe
配置示例:
readinessProbe:httpGet:path: /port: 8080scheme: HTTPinitialDelaySeconds: 10timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3
參數解釋
- httpGet: 使用 HTTP GET 請求檢查
/
路徑,端口為 8080,使用 HTTP 協議。 - initialDelaySeconds: 10: 容器啟動后等待10秒再開始進行探測。
- timeoutSeconds: 1: 探針等待1秒以獲取響應。如果超過1秒沒有響應,則認為探針失敗。
- periodSeconds: 10: 每10秒進行一次探測。
- successThreshold: 1: 探針只需一次成功就認為探測通過。
- failureThreshold: 3: 探針需要連續三次失敗才認為探測失敗,并將容器標記為不就緒。
使用場景說明
- 檢測應用是否準備好接受流量:在應用啟動過程中,可能需要進行一些初始化操作(如加載配置、連接數據庫等),
readinessProbe
可以確保應用在完成這些操作后才開始接收流量。 - 動態調整服務流量:在運行過程中,如果應用暫時無法處理請求(如進行內部維護或資源不足),
readinessProbe
可以將容器從服務的端點列表中移除,待應用恢復后再重新加入。
實例——如果發現業務3秒后無響應,訪問流量將不會傳值該容器,5秒內如果回復響應,訪問流量將繼續轉發至該容器
- 題目要求:如果發現業務3秒后無響應,訪問流量將不會傳值該容器,5秒內如果回復響應,訪問流量將繼續轉發至該容器
- 最終用下面參數
這種配置確保了探針能夠每秒檢查一次服務狀態,并且在服務無響應時更準確地將容器標記為不就緒。探針等待3秒以獲取響應,如果超過3秒沒有響應,則認為探針失敗。探針只需一次失敗就會將容器標記為不就緒,同時在服務恢復響應時能夠在5秒內檢測到并將容器標記為就緒。
readinessProbe:httpGet:path: /port: 8090scheme: HTTPinitialDelaySeconds: 10timeoutSeconds: 3periodSeconds: 1successThreshold: 1failureThreshold: 1
工作流程說明
readness【整個生命周期存在】——檢測業務,失敗就不轉發業務【不會kill掉容器】#用于檢測容器是否準備好接受流量。如果探針失敗,Kubernetes 會將容器從服務的端點列表中移除,但不會殺死容器。#適用于檢測容器是否可以接受流量的情況。httpGet: 通過發送 HTTP GET 請求來檢查應用的健康狀況。path: / 要訪問的 HTTP 路徑。port: 8090 要訪問的端口。scheme: HTTP 指定 HTTP 請求的協議,常見的值為 HTTP 和 HTTPS。`initialDelaySeconds 10` 用于指定在容器啟動后多長時間開始進行首次健康檢查。它的作用是讓容器有足夠的時間來完成初始化操作,避免在容器還未完全啟動時就進行健康檢查,從而導致誤判。例如,如果將 `initialDelaySeconds` 設置為 `30`,那么 Kubernetes 會在容器啟動后的 30 秒才開始進行第一次 `startupProbe` 檢查。`timeoutSeconds 3`: 探測的超時時間(秒)。默認值是 1 秒。`periodSeconds 1`: 執行探測的周期(秒)。默認值是 10 秒。`successThreshold 1`: 探測成功的閾值。連續成功達到這個閾值后,容器被認為已經成功啟動。默認值是 1。如果設置為 1,只要有一次成功的探測,容器就會被認為啟動成功。`failureThreshold 1`: 探測失敗的閾值。在達到這個閾值之前,容器不會被認為啟動失敗。默認值是 3。
-
參數解釋
-
httpGet: 使用 HTTP GET 請求進行探測。
- path:
/
,這是探針將要檢查的路徑。 - port:
8090
,這是探針將要檢查的端口。 - scheme:
HTTP
,使用 HTTP 協議進行探測。
- path:
-
initialDelaySeconds: 在容器啟動后等待多長時間開始進行第一次檢查。
- 在你的配置中,
initialDelaySeconds: 10
表示容器啟動后等待10秒再開始進行探測。
- 在你的配置中,
-
timeoutSeconds: 探針等待響應的時間。如果超過這個時間沒有響應,則認為探針失敗。
- 在你的配置中,
timeoutSeconds: 3
表示探針等待3秒以獲取響應。如果超過3秒沒有響應,則認為探針失敗。
- 在你的配置中,
-
periodSeconds: 探針之間的間隔時間,即每隔多少秒進行一次檢查。
- 在你的配置中,
periodSeconds: 1
表示每1秒進行一次探測。
- 在你的配置中,
-
successThreshold: 探針連續成功的次數,只有達到這個次數才認為探針成功。
- 在你的配置中,
successThreshold: 1
表示探針只需一次成功就認為探測通過。
- 在你的配置中,
-
failureThreshold: 探針連續失敗的次數,只有達到這個次數才認為探針失敗,并將容器標記為不就緒。
- 在你的配置中,
failureThreshold: 1
表示探針只需一次失敗就認為探測失敗。
- 在你的配置中,
-
-
工作流程
-
- 容器啟動后,探針會等待10秒再開始進行探測(
initialDelaySeconds: 10
)。
- 容器啟動后,探針會等待10秒再開始進行探測(
-
- 每1秒,探針會對
http://<容器IP>:8090/
發起一次 HTTP GET 請求(periodSeconds: 1
)。
- 每1秒,探針會對
-
- 如果探針在3秒內沒有收到響應(
timeoutSeconds: 3
),則認為探針失敗。
- 如果探針在3秒內沒有收到響應(
-
- 探針只需一次失敗(
failureThreshold: 1
)就會將容器標記為不就緒。
- 探針只需一次失敗(
-
- 探針只需一次成功(
successThreshold: 1
)就會將容器標記為就緒。
- 探針只需一次成功(
-
-
適用場景
- initialDelaySeconds: 10:適用于希望容器啟動后等待一段時間再開始探測的場景。
- timeoutSeconds: 3:適用于希望快速檢測到服務無響應的情況。
- periodSeconds: 1:適用于希望頻繁檢查服務健康狀態的情況。
- successThreshold: 1:適用于希望探針只需一次成功就認為服務就緒的情況。
- failureThreshold: 1:適用于希望探針只需一次失敗就認為服務不就緒的情況,能夠快速響應服務的異常狀態。
-
滿足需求
- 10秒后開始探測:容器啟動后等待10秒再開始進行探測。
- 3秒無響應:探針等待3秒以獲取響應,如果超過3秒沒有響應,則認為探針失敗。
- 每1秒檢查一次:探針每1秒檢查一次服務狀態。
- 一次失敗即標記為不就緒:探針只需一次失敗就會將容器標記為不就緒。
- 一次成功即標記為就緒:探針只需一次成功就會將容器標記為就緒。
一個完整的包含3個探針的實例yaml文件
可以直接通過下面內容創建一個負載的