kubelet 源碼分析:statusManager和probeManager
簡介
在 kubelet 初始化的時候,會創建 statusManager 和 probeManager,兩者都和 pod 的狀態有關係,因此我們放到一起來講解。
statusManager 負責維護狀態信息,並把 pod 狀態更新到 apiserver,但是它並不負責監控 pod 狀態的變化,而是提供對應的介面供其他組件調用,比如 probeManager。probeManager 會定時去監控 pod 中容器的健康狀況,一旦發現狀態發生變化,就調用 statusManager 提供的方法更新 pod 的狀態。
klet.statusManager = status.NewManager(kubeClient, klet.podManager) klet.probeManager = prober.NewManager(
klet.statusManager,
klet.livenessManager,
klet.runner,
containerRefManager,
kubeDeps.Recorder)StatusManager
statusManager 對應的代碼在 文件中,
type PodStatusProvider interface {
GetPodStatus(uid types.UID) (api.PodStatus, bool) } type Manager interface {
PodStatusProvider
Start()
SetPodStatus(pod *api.Pod, status api.PodStatus)
SetContainerReadiness(podUID types.UID, containerID kubecontainer.ContainerID, ready bool)
TerminatePod(pod *api.Pod)
RemoveOrphanedStatuses(podUIDs map[types.UID]bool) }
這個介面的方法可以分成三組:獲取某個 pod 的狀態、後台運行 goroutine 執行同步工作、修改 pod 的狀態。修改狀態的方法有多個,每個都有不同的用途:
SetPodStatus:如果 pod 的狀態發生了變化,會調用這個方法,把新狀態更新到 apiserver,一般在 kubelet 維護 pod 生命周期的時候會調用
SetContainerReadiness:如果健康檢查發現 pod 中容器的健康狀態發生變化,會調用這個方法,修改 pod 的健康狀態
TerminatePod:kubelet 在刪除 pod 的時候,會調用這個方法,把 pod 中所有的容器設置為 terminated 狀態
RemoveOrphanedStatuses:刪除孤兒 pod,直接把對應的狀態數據從緩存中刪除即可
方法是在 kubelet 運行的時候調用的,它會啟動一個 goroutine 執行更新操作:
const syncPeriod = 10 * time.Second func (m *manager) Start() {
......
glog.Info("Starting to sync pod status with apiserver")
syncTicker := time.Tick(syncPeriod)
// syncPod and syncBatch share the same go routine to avoid sync races.
go wait.Forever(func() {
select {
case syncRequest :=
※營銷的秘密:消費者想買的並不是產品
※應用沉睡之時:後台傳輸服務
※RabbitMQ 實戰教程 路由
※AtomicInteger 與樂觀鎖
TAG:推酷 |
※React Native BackHandler exitApp 源碼分析
※Execotors、Future、Callable和FutureTask的使用與源碼分析
※網關 Spring-Cloud-Gateway 源碼解析——路由之RouteDefinitionLocator一覽
※Selenium3源碼之common package篇
※druid-spring-boot-starter源碼解析
※HikariCP源碼分析之leakDetectionThreshold及實戰解決Spark/Scala連接池泄漏
※閱讀Android源碼BitmapFactory
※Flutter圖片緩存 Image.network源碼分析
※mybaits sqlSession 源碼解讀
※JDK源碼閱讀:InterruptibleChannel 與可中斷 IO
※AtomicInteger 源碼解析
※Spark 源碼分析之ShuffleMapTask內存數據Spill和合併
※Spring源碼系列:依賴注入(二)createBean
※kafka 源碼分析 3 : Producer
※Istio技術與實踐02:源碼解析之Istio on Kubernetes 統一服務發現
※spring源碼分析——spring大綱
※Apache Storm流計算模型 及WordCount源碼實踐
※RocketMQ 源碼學習 3 :Remoting 模塊
※RocketMQ 源碼學習 2 : Namesrv
※分散式共享 Session之SpringSession 源碼細節