启动篇-03RunKubelet

RunKubelet

cmd/kubelet/app/server.go
func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencies, runOnce bool) error {
	...
	// 上面设置好所需参数,创建并初始化 Kubelet
	k, err := createAndInitKubelet(kubeServer,  
	   kubeDeps,  
	   hostname,  
	   hostnameOverridden,  
	   nodeName,  
	   nodeIPs)  
	if err != nil {  
	   return fmt.Errorf("failed to create kubelet: %w", err)  
	}

	...
	// 如果设置只运行一次,运行完就退出,否则执行 startKubelet,进入下一阶段  
	if runOnce {  
	   if _, err := k.RunOnce(podCfg.Updates()); err != nil {  
	      return fmt.Errorf("runonce failed: %w", err)  
	   }  
	   klog.InfoS("Started kubelet as runonce")  
	} else {  
	   startKubelet(k, podCfg, &kubeServer.KubeletConfiguration, kubeDeps, kubeServer.EnableServer)  
	   klog.InfoS("Started kubelet")  
	}
	...
}

createAndInitKubelet

NewMainKubelet

  • serviceLister: 获取 service 相关信息

  • nodeLister: 获取 node 相关信息

  • oomWatcher: 监控 pod 内存是否发生 OOM

  • cloudResourceSyncManager: 云资源同步管理器

  • secretManager: secret 管理器

  • configMapManager: configMap 管理器

  • livenessManager: liveness 管理器

  • readinessManager: readiness 管理器

  • startupManager: startup 管理器

  • podManager: pod 管理器,管理 pod 的生命周期

  • statusManager: status 管理器,与 apiserver 同步 pod 状态

  • resourceAnalyzer: 用于收集资源使用情况

  • runtimeService: 用于与 CRI 通信

  • runtimeClassManager: runtimeClass 管理器

  • containerLogManager: containerLog 管理器,管理容器日志

  • reasonCache: 缓存 pod 的最新的启动失败原因

  • podWorkers: 管理 pod 的同步

  • runtime: 设置容器运行时

  • runtimeCache: 容器运行时缓存

  • StatsProvider: 用于获取 pod 的使用情况,判断使用 Cadvisor 还是 CRI

  • containerGC: 对容器进行垃圾回收

  • imageManager: image 管理器,管理容器镜像

  • probeManager:probe 管理器,管理探针

  • volumePluginMgr: 管理 volume 插件

  • pluginManager: plugin 管理器

  • volumeManager: volume 管理器

  • evictionManager: eviction 管理器

  • shutdownManager: shutdown 管理器

  • usernsManager: userns 管理器

startKubelet

最后更新于

这有帮助吗?