通过配置文件设置 kubelet 参数

通过保存在硬盘的配置文件设置 kubelet 的部分配置参数,这可以作为命令行参数的替代。

建议通过配置文件的方式提供参数,因为这样可以简化节点部署和配置管理。

创建配置文件

KubeletConfiguration 结构体定义了可以通过文件配置的 kubelet 配置子集,

配置文件必须是这个结构体中参数的 JSON 或 YAML 表现形式。 确保 kubelet 可以读取该文件。

下面是一个 kubelet 配置文件示例:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. address: "192.168.0.8"
  4. port: 20250
  5. serializeImagePulls: false
  6. evictionHard:
  7. memory.available: "100Mi"
  8. nodefs.available: "10%"
  9. nodefs.inodesFree: "5%"
  10. imagefs.available: "15%"

在此示例中,kubelet 配置为以下设置:

  1. address:kubelet 将在 192.168.0.8 IP 地址上提供服务。
  2. port:kubelet 将在 20250 端口上提供服务。
  3. serializeImagePulls:并行拉取镜像。
  4. 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 配置文件的主要内容如下:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. port: 20250
  4. serializeImagePulls: false
  5. evictionHard:
  6. memory.available: "200Mi"

--config-dir 目录中某个文件的内容如下:

  1. apiVersion: kubelet.config.k8s.io/v1beta1
  2. kind: KubeletConfiguration
  3. address: "192.168.0.8"

在启动时,kubelet 会合并来自以下几部分的配置:

  • 命令行参数(优先级最低)。
  • kubelet 配置文件。
  • 排序的插件配置文件。
  • 在命令行中指定的特性门控(优先级最高)。

这将产生与之前示例中使用的单个配置文件相同的结果。

接下来