通过配置文件设置 kubelet 参数
通过保存在硬盘的配置文件设置 kubelet 的部分配置参数,这可以作为命令行参数的替代。
建议通过配置文件的方式提供参数,因为这样可以简化节点部署和配置管理。
创建配置文件
KubeletConfiguration 结构体定义了可以通过文件配置的 kubelet 配置子集,
配置文件必须是这个结构体中参数的 JSON 或 YAML 表现形式。 确保 kubelet 可以读取该文件。
下面是一个 kubelet 配置文件示例:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: "192.168.0.8"
port: 20250
serializeImagePulls: false
evictionHard:
memory.available: "100Mi"
nodefs.available: "10%"
nodefs.inodesFree: "5%"
imagefs.available: "15%"
在此示例中,kubelet 配置为以下设置:
address
:kubelet 将在192.168.0.8
IP 地址上提供服务。port
:kubelet 将在20250
端口上提供服务。serializeImagePulls
:并行拉取镜像。evictionHard
:kubelet 将在以下情况之一驱逐 Pod:- 当节点的可用内存降至 100MiB 以下时。
- 当节点主文件系统的已使用 inode 超过 95%。
- 当镜像文件系统的可用空间小于 15% 时。
- 当节点主文件系统的 inode 超过 95% 正在使用时。
说明:
在示例中,通过只更改 evictionHard 的一个参数的默认值, 其他参数的默认值将不会被继承,他们会被设置为零。如果要提供自定义值,你应该分别设置所有阈值。
imagefs
是一个可选的文件系统,容器运行时使用它来存储容器镜像和容器可写层。
启动通过配置文件配置的 kubelet 进程
说明:
如果你使用 kubeadm 初始化你的集群,在使用 kubeadm init
创建你的集群的时候请使用 kubelet-config。 更多细节请阅读使用 kubeadm 配置 kubelet
启动 kubelet 需要将 --config
参数设置为 kubelet 配置文件的路径。kubelet 将从此文件加载其配置。
请注意,命令行参数与配置文件有相同的值时,就会覆盖配置文件中的该值。 这有助于确保命令行 API 的向后兼容性。
请注意,kubelet 配置文件中的相对文件路径是相对于 kubelet 配置文件的位置解析的, 而命令行参数中的相对路径是相对于 kubelet 的当前工作目录解析的。
请注意,命令行参数和 kubelet 配置文件的某些默认值不同。 如果设置了 --config
,并且没有通过命令行指定值,则 KubeletConfiguration
版本的默认值生效。在上面的例子中,version 是 kubelet.config.k8s.io/v1beta1
。
kubelet 配置文件的插件目录
自 Kubernetes v1.28.0 起,kubelet 被扩展以支持一个插件配置目录。 该目录的位置可以使用 --config-dir
标志来指定,默认为 ""
,也就是被禁用状态。
只有在为 kubelet 进程设置环境变量 KUBELET_CONFIG_DROPIN_DIR_ALPHA
(该变量的值无关紧要)时才可以设置 --config-dir
。对于 Kubernetes v1.29, 如果你未设置该变量而指定了 --config-dir
,kubelet 将返回错误并且启动失败。 你不能使用 kubelet 配置文件指定插件配置目录;只能使用 CLI 参数 --config-dir
进行设置。
你可以以类似于 kubelet 配置文件的方式使用 kubelet 配置目录。
说明:
合法的 kubelet 插件配置文件的后缀必须为 .conf
。例如 99-kubelet-address.conf
。
例如,你可能想要为所有节点设置一个基准的 kubelet 配置,但你可能想要自定义 address
字段。 可以按如下方式操作:
kubelet 配置文件的主要内容如下:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
port: 20250
serializeImagePulls: false
evictionHard:
memory.available: "200Mi"
--config-dir
目录中某个文件的内容如下:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: "192.168.0.8"
在启动时,kubelet 会合并来自以下几部分的配置:
- 命令行参数(优先级最低)。
- kubelet 配置文件。
- 排序的插件配置文件。
- 在命令行中指定的特性门控(优先级最高)。
这将产生与之前示例中使用的单个配置文件相同的结果。
接下来
- 参阅 KubeletConfiguration 进一步学习 kubelet 的配置。