kubelet自己上报:

pkg/kubelet/kubelet_node_status.go

  1. func (kl *Kubelet) defaultNodeStatusFuncs() []func(*v1.Node) error {
  2. // if cloud is not nil, we expect the cloud resource sync manager to exist
  3. var nodeAddressesFunc func() ([]v1.NodeAddress, error)
  4. if kl.cloud != nil {
  5. nodeAddressesFunc = kl.cloudResourceSyncManager.NodeAddresses
  6. }
  7. var validateHostFunc func() error
  8. if kl.appArmorValidator != nil {
  9. validateHostFunc = kl.appArmorValidator.ValidateHost
  10. }
  11. var setters []func(n *v1.Node) error
  12. setters = append(setters,
  13. nodestatus.NodeAddress(kl.nodeIPs, kl.nodeIPValidator, kl.hostname, kl.hostnameOverridden, kl.externalCloudProvider, kl.cloud, nodeAddressesFunc),
  14. nodestatus.MachineInfo(string(kl.nodeName), kl.maxPods, kl.podsPerCore, kl.GetCachedMachineInfo, kl.containerManager.GetCapacity,
  15. kl.containerManager.GetDevicePluginResourceCapacity, kl.containerManager.GetNodeAllocatableReservation, kl.recordEvent),
  16. nodestatus.VersionInfo(kl.cadvisor.VersionInfo, kl.containerRuntime.Type, kl.containerRuntime.Version),
  17. nodestatus.DaemonEndpoints(kl.daemonEndpoints),
  18. nodestatus.Images(kl.nodeStatusMaxImages, kl.imageManager.GetImageList),
  19. nodestatus.GoRuntime(),
  20. )
  21. // Volume limits
  22. setters = append(setters, nodestatus.VolumeLimits(kl.volumePluginMgr.ListVolumePluginWithLimits))
  23. setters = append(setters,
  24. nodestatus.MemoryPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderMemoryPressure, kl.recordNodeStatusEvent),
  25. nodestatus.DiskPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderDiskPressure, kl.recordNodeStatusEvent),
  26. nodestatus.PIDPressureCondition(kl.clock.Now, kl.evictionManager.IsUnderPIDPressure, kl.recordNodeStatusEvent),
  27. nodestatus.ReadyCondition(kl.clock.Now, kl.runtimeState.runtimeErrors, kl.runtimeState.networkErrors, kl.runtimeState.storageErrors, validateHostFunc, kl.containerManager.Status, kl.shutdownManager.ShutdownStatus, kl.recordNodeStatusEvent),
  28. nodestatus.VolumesInUse(kl.volumeManager.ReconcilerStatesHasBeenSynced, kl.volumeManager.GetVolumesInUse),
  29. // TODO(mtaufen): I decided not to move this setter for now, since all it does is send an event
  30. // and record state back to the Kubelet runtime object. In the future, I'd like to isolate
  31. // these side-effects by decoupling the decisions to send events and partial status recording
  32. // from the Node setters.
  33. kl.recordNodeSchedulableEvent,
  34. )
  35. return setters
  36. }

runtimeErrors

  1. 是通过CRI查询 cri runtime的RuntimeReady状态

func (kl *Kubelet) updateRuntimeUp() 每5s执行一次

  1. �runtime healthCheck的状态。PLEG是runtime healthCheck一种实现。

networkErrors

通过cri runtime查询NetworkReady状态
func (kl *Kubelet) updateRuntimeUp() 每5s执行一次

storageErrors

如果 InitializeCSINodeWithAnnotation(创建CSINode) 失败,则会设置

validateHostFunc

AppArmor相关