我正在研究 K8s 架構,重點研究系統中 pod 旋轉的流程。
我想知道控制平面的不同組件如何(即誰發起通信)以及何時相互通信。
我關注了Jér?me Petazzoni在 LISA 2019 上的精彩演講(此處),以了解控制平面的架構,并閱讀了kubernetes.io上的概念。
但是,我仍然沒有找到以下問題的答案:
- 誰發起每個節點的資源檢查,在檔案中是這樣寫的:
節點物件跟蹤有關節點資源容量的資訊:例如,可用記憶體量和 CPU 數量。自行注冊的節點在注冊期間報告其容量。如果手動添加一個Node,那么在添加的時候需要設定該節點的容量資訊。
但是,沒有關于它何時更新etcd以及誰發起定期更新(更新節點狀態的心跳除外)的規范。
另外,調度程式的快取什么時候更新?
- 誰通知不同組件有關新的待處理請求?也就是說,
controller-manager/scheduler“知道”什么時候應該做它的作業?每個請求被寫為在清單etcd由kube-api-server,但這些部件沒有連接到etcd直接。
這是否意味著 API-Server 需要將每個新請求通知每個組件?
我有很多可能的答案,但沒有具體確認當前 K8s 架構中的真實程序。
uj5u.com熱心網友回復:
回答您的問題:
每個節點的資源檢查誰來發起?
對此負責的組件是“節點狀態管理器”,它是kubelet 代理組件“ SyncLoop”的子控制回圈。
更詳細的答案在這篇文章中:Kubernetes Deep Dive:Kubelet:
可以看到,
kubelet的作業核心是一個控制回圈,即:SyncLoop。
例如,Node Status Manager負責回應 狀態的變化
Node,然后收集 狀態Node并APIServer通過 Heartbeat上報。
還有一個很好的圖:
回答第二部分:
誰通知不同組件有關新的待處理請求?也就是說,controller-manager/ scheduler “知道”什么時候應該做它的作業?
對此負責的組件是Kubernetes 的控制器和 調度程式本身。這篇文章中有很好的例子和解釋:當...... Kubernetes 版時會發生什么!,
基本上在 Kubernetes 驗證請求(身份驗證、授權、準入控制)之后,它被保存到資料存盤 ( etcd),然后它被初始化器獲取,它可能對資源執行一些額外的邏輯(并非總是如此),之后它可以通過 kube 可見-服務器。您可能感興趣的主要部分是Control loops。他們不斷檢查資料存盤中是否存在新請求,如果是,他們正在繼續。示例 - 當您部署新部署時:
- 部署控制器正在接受一個請求 - 它會意識到沒有關聯的 ReplicaSet 記錄,它將推出新的記錄
- ReplicaSets 控制器,就像部署控制器一樣,它將接受一個請求并推出新的 pod
- Pods are ready but they are in pending state - now Scheduler (which is like previous controllers, listening constantly for new requests from the data store - it's de facto answer for your question) will find a suitable node and schedule a pod to a node. Now, kubelet agent on the node will create a new pod.
For more details I'd strongly suggest reading the earlier mentioned article - What happens when ... Kubernetes edition!.
Does that mean the API-Server needs to inform each component about each new request?
It works in a different way - the kube-apiserver is making requests to be visible, and controllers, which are loops, are detecting new requests and starting to proceed with them.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359008.html
標籤:Kubernetes 联网
