當前位置:
首頁 > 最新 > kubelet 源碼分析:statusManager和probeManager

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 源碼細節