網站首頁 編程語言 正文
文章目錄
- 生命周期
- 重啟策略
- Pod 健康檢查 & 服務可用性檢查
- 探針實現方式
- setupProbe 參考
生命周期
正常就正常,不正??慈罩?。下一個
重啟策略
Pod 重啟策略包括 Always、Never、OnFailure。
kubelet 重啟失敗容器的時間間隔以 sync-frequency 乘 2n 來計算,如 1、2、4、8 倍等,最長時延 5min,并在重啟成功之后的 10 min 后重置該時間。
當前可用于管理 Pod 的控制器包括 RC、Job、DaemonSet,還可以通過 kubelet 管理(靜態 Pod),每種控制器對應的 Pod 重啟策略要求如下:
- RC 和 DS:必須設置為 Always,需要保證容器的正常運行。
- Job:必須不設置為 Always,確保 Job 執行完畢之后不會重啟。
- 對于 kubelet,在 Pod 失效時自動啟動它。
Pod 健康檢查 & 服務可用性檢查
k8s 對 Pod 的檢查有三種探針,LivenessProbe、ReadinessProbe、SetupProbe。相對前兩種比較常用,kubelet 會定期執行這兩種探針來診斷容器的健康狀況。
LibenessProbe 用于判斷容器是否存活,如果不健康,就殺掉,然后看看要不要重啟。如果沒有設定該探針,則默認一直是存活的,至于真實是死是活就不好說了。
ReadinessProbe 用于判斷容器服務是否可用,對于被 Service 管理的 Pod,如果發現容器不可用,系統將從 Service 的后端 Pod Endpoint 列表中將該 pod 隔離出去,直到它什么時候可用了再放回來。這樣可以防止 Service 將業務轉發到不可用的 Pod 上。
SetupProbe 探針,用于一些啟動比較慢的情況。此時 ReadinessProbe 就不適用了,對于這種有且僅有一次的操作,使用 SetupProbe。
探針實現方式
以上三種探針均可使用以下三種實現方式:
1)execAction,在容器內部運行一個命令,如果命令返回碼為0,則表明容器健康。
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15 # 啟動容器后首次警醒健康檢查的等待時間
timeoutSeconds: 1 # 健康檢查發送請求之后等待響應的時間,如果超時,則 kubelet 認為容器已無法提供服務
2)通過 tcpSocket
通過容器的 IP 地址和端口號執行 TCP 檢查,如果能夠建立連接則說明容器健康。
以下以 localhost:80 為例:
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
tcpSocket:
port:80
initialDelaySeconds: 15
timeoutSeconds: 1
3)httpGet 方式
通過容器 IP、端口號以及路徑調用 Get 方法,如果返回值結余 200~400 則說明正常。
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
httpGet:
path: /_status/healthz
port: 80
initialDelaySeconds: 15
timeoutSeconds: 1
setupProbe 參考
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
startupProbe:
httpGet:
path: /_status/healthz
port: 80
failureThreshold: 20
periodSeconds: 10
這個 Pod 有 20 * 10 = 200s 的啟動時間。
原文鏈接:https://lion-wu.blog.csdn.net/article/details/126922367
- 上一篇:nodeSelector:Pod 定向調度
- 下一篇:在容器內獲取 Pod 信息
相關推薦
- 2022-06-13 Python判斷dict中key是否存在的3種方法實例_python
- 2022-07-03 python類的私有屬性和公共屬性說明_python
- 2022-03-24 Unity腳本自動添加頭部注釋的全過程_C#教程
- 2022-01-08 vscode推送代碼失敗,報錯You are not allowed to push code to
- 2022-03-28 Python中三種條件語句示例介紹_python
- 2022-04-21 IDEA - Spring Boot 項目 application.yml 文件不加載的問題
- 2023-07-03 git如何將遠程倉庫(upstream)新建分支(origin沒有)導入到自己fork的origin
- 2022-06-08 ASP.NET?Core處理錯誤環境_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支