kubelet启动流程解析(三)kubelet指令初始化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubelet启动流程解析(三)kubelet指令初始化相关的知识,希望对你有一定的参考价值。
参考技术A 完整的指令定义:这里我们只探讨 Run 部分内容,这部分内容为实际运行时逻辑,其他部分内容可参考 cobra
内容较多,我们按步骤进行拆解分析
第一步解析命令行的入参(如: --kubeconfig 、 --config ),如果解析阶段出现异常(通常为标识名或值错误),
调用 cmd.Usage() 输出可选标识,退出启动。
kubelet 无子命令(如: kubectl apply 中的 apply 为 kubectl 的子命令),若解析出含有子命令,调用 cmd.Usage() 输出可选标识,退出启动。
如果为 help 标识,输出以下内容,退出启动流程
如果为 version 标识,输出以下内容,退出启动流程
根据门控特性标识 --feature-gates 设置门控特性,特性包含如下:
检测内容如下:
如果运行时标识值为 remote ,并且 --pod-infra-container-image 值非空,会输出警告信息:
具体流程如下:
关于 kubelet 动态配置解析请参考 Dynamic Kubelet Configuration
同时定义 --dynamic-config-dir 与 --config 时, kubelet 会 --dynamic-config-dir 中的动态配置。 --config 的配置不会生效
当指定开启 dockershim only 模式时,才会走这个启动逻辑
一般用于测试容器运行时,官方考虑后续提供独立的二进制文件,我们暂且不做讨论。
经过前几个步骤的准备,我们已经获取了 kubelet 的配置参数,接下来我们分析启动前还需要做哪些准备:
透过源码我们了解了最后的 Run 函数执行启动的逻辑,而他需要四个参数:
参数一、三、四很好理解,我们着重分析下 *kubelet.Dependencies 这个入参对象
kubelet 初始化阶段,通过 KubeletServer 、 DefaultFeatureGate 入参实例化
我们看下 kubelet.Dependencies 结构体属性:
我们看到 kubelet.Dependencies 其实是一个接口集合,包括对卷、容器运行时、 kube-apiserver 等操作的接口。针对这些接口的使用场景及实现我们不做过多讨论。
至此为止,所有的启动前准备工作均已完成(配置项,运行时所需接口),接下来我们将分析 kubelet 实际运行流程( Run 函数)
Kubelet 服务启动失败
1.二进制部署kubelet 组件,启动服务失败
用journalctl _PID=23993 | vim - 命令查看报错日志
解决办法:将cgroupDriver :cgroupfs 修改为cgroupDriver :systemed
systemctl start kubelet
以上是关于kubelet启动流程解析(三)kubelet指令初始化的主要内容,如果未能解决你的问题,请参考以下文章