pkg/kubelet/kubelet_node_status.go
defaultNodeStatusFuncs 构造setNodeStatus函数,设置node状态
Ready状态
pkg/kubelet/nodestatus/setters.go
ReadyCondition函数 更新v1.NodeReady condition
- nowFunc
- runtimeErrorsFunc: 检查容器运行时 _Kubelet.runtimeState.runtimeErrors,对应_healthChecks和_CRI接口中定义的_RuntimeReady;healthChecks是PLEG模块
- networkErrorsFunc: _Kubelet.runtimeState.networkErrors 对应CRI接口中定义的_NetworkReady
- storageErrorsFunc: Kubelet.runtimeState.storageErrors
- appArmorValidateHostFunc: linux的AppArmor
- cmStatusFunc
- recordEventFunc
Memory状态
pkg/kubelet/nodestatus/setters.go
MemoryPressureCondition 函数 更新v1.NodeMemoryPressure
pressureFunc: kl.evictionManager.IsUnderMemoryPressure,这个实现是查询eviction_manager的内部状态。如果出现memoryPressure,eviction_manager的nodeConditions就会增加该condition
eviction_manager
pkg/kubelet/eviction/eviction_manager.go
synchronize 方法:强制执行eviction 阈值,返回被kill的Pod;同时会更新managerImpl.nodeConditions;kubelet的condition大部分是从eviction_manager同步的(condition和eviction threshold是对应的)
-》m.summaryProvider.Get(updateStats) 获取机器状态
-》makeSignalObservations 函数:根据机器状态,设置eviction signal的状态
-》thresholdsMet 函数:判断 eviction signal是否已经达到对应 threshold
eviction_manager 的synchronize两种方式驱动的
- 对于memory状态触发,eviction_manager内部是通过memory_threshold_notifier实现。pkg/kubelet/eviction/memory_threshold_notifier.go 内部通过cgroup.event_control 实现
- 周期性执行,evictionMonitoringPeriod = time.Second * 10