天天看點

Kubelet 狀态上報 節點資源管理 驅逐

節點資源管理

計算節點除CPU、記憶體和存儲等硬體相關資源外,還有作業系統資源,例如程序上限、磁盤I/O 等。

在Kubernetes 叢集中,同一節點上會運作多個不同應用的容器程序。不可避免地,這些程序會共享節點資源,并可能發生資源競争(request limit)。合理的節點資源管理能提高節點資源使用率,避免相鄰程序彼此幹擾,保證系統服務正常運作(驅逐條件)。Kubernetes 計算節點資源管理方案已漸趨成熟:具體展現在狀态彙報、資源預留、防止節點資源耗盡的防禦機制驅逐及容器和系統資源的配置。

狀态上報

kubelet 是部署在每個Kubernetes 節點上、負責Pod 生命周期及節點狀态上報的元件。

它周期性地向

API Server

進行彙報,并

更新節點的相關健康

資源使用資訊

,以供

Kubernetes 的控制平面子產品對節點和節點上的

Pod

進行管理和決策。上報資訊如下:

  • 節點基礎資訊,包括IP 位址、作業系統、核心、運作時、kubelet、kube-proxy 版本資訊。部分資訊直接從節點擷取,而部分資訊需要調用雲提供商的API 擷取。
  • 節點資源資訊包括CPU、記憶體、Hugepage、臨時存儲、GPU 等注冊裝置,以及這些資源中可以配置設定給容器使用的部分。
  • 排程器在為Pod 選擇節點時會将機器的狀态資訊作為依據。表2-6 展示了節點狀态及其代表的意義。比如Ready 狀态反映了節點是否就緒,True 表示節點健康;False 表示節點不健康;Unknown 表示節點控制器在最近40s 内沒有收到節點的消息。排程器在排程Pod 時會過濾掉所有Ready 狀态為非True 的節點。

                                                       表

2-6

節點的狀态及其意義

Kubelet 狀态上報 節點資源管理 驅逐

資源預留

計算節點除使用者容器外,還存在很多支撐系統運作的基礎服務,譬如 systemd、journald、sshd、dockerd、Containerd、kubelet 等。如果這些服務的運作受到影響,系統将變得不穩定,進而影響使用者的容器程序。為了使服務程序能夠正常運作,要確定它們在任何時候都可以擷取足夠的系統資源,是以我們要為這些系統程序預留資源。

kubelet

可以通過衆多啟動參數為系統預留

CPU

、 記憶體、

PID

等資源, 比如

SystemReserved、

KubeReserved

等。如下代碼所示,在節點對象狀态中可以看到目前節點的

CPU 、memory

emphermal-storage

等資源資訊,其中每一項資源分為系統的可配置設定資源(

Allocatable)和節點的容量(

Capacity

)資源。

Kubelet 狀态上報 節點資源管理 驅逐

容量資源(

Capacity

)是指

kubelet

擷取的計算節點目前的資源資訊。

CPU

是從

/proc/cpuinfo 檔案中擷取的節點

CPU

核數;

memory

是從

/proc/memoryinfo

中擷取的節點記憶體大小;ephemeral-storage

是指節點根分區的大小。

資源可配置設定額(

Allocatable

)是使用者

Pod

可用的資源,是資源容量減去配置設定給系統的資源的剩餘部分,兩者的關系如表2-7

所示。

                                            表

2-7

節點的資源容量和可配置設定資源