通过配置文件设置 Kubelet 参数

FEATURE STATE: Kubernetes v1.18 beta

该功能目前处于 beta 状态,意味着:

  • 版本名称包含 beta (例如 v2beta3)。
  • 代码经过了充分测试,启用该功能被认为是安全的。默认情况下被启用。
  • 对整体功能的支持在未来不会被移除,尽管细节上可能会做更改。
  • 在后续的 beta 或稳定版本中,对象的模式、语义可能以不兼容的方式发生变化。当这种情况发生时,我们将提供迁移到下一个版本的说明。这可能需要删除、编辑和重建 API 对象,编辑过程可能需要一些思考。这可能导致依赖该功能的应用程序停机一段时间。
  • 建议仅在非业务关键场景使用该功能,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的集群,那么您可能可以放松这个限制。
  • 请尝试使用我们的 beta 版功能,并给出反馈!在它们退出 beta 测试阶段之后,我们将很难去做更多的更改。

通过保存在硬盘的配置文件设置 Kubelet 的配置参数子集,可以作为命令行参数的替代。此功能在 v1.10 中为 beta 版。

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

准备开始

  • 需要安装 1.10 或更高版本的 Kubelet 二进制文件,才能实现 beta 功能。

创建配置文件

KubeletConfiguration 结构体定义了可以通过文件配置的 Kubelet 配置子集,该结构体在 这里(v1beta1) 可以找到, 配置文件必须是这个结构体中参数的 JSON 或 YAML 表现形式。

在单独的文件夹中创建一个名为 kubelet 的文件,并保证 Kubelet 可以读取该文件夹及文件。您应该在这个 kubelet 文件中编写 Kubelet 配置。

这是一个 Kubelet 配置文件示例:

  1. kind: KubeletConfiguration
  2. apiVersion: kubelet.config.k8s.io/v1beta1
  3. evictionHard:
  4. memory.available: "200Mi"

在这个示例中, 当可用内存低于200Mi 时, Kubelet 将会开始驱逐 Pods。 没有声明的其余配置项都将使用默认值, 命令行中的 flags 将会覆盖配置文件中的对应值。

作为一个小技巧,您可以从活动节点生成配置文件,相关方法请查看 重新配置活动集群节点的 Kubelet

启动通过配置文件配置的 Kubelet 进程

启动 Kubelet 需要将 --config 参数设置为 Kubelet 配置文件的路径。Kubelet 将从此文件加载其配置。

请注意,命令行参数与配置文件有相同的值时,就会覆盖配置文件中的该值。这有助于确保命令行 API 的向后兼容性。

请注意,Kubelet 配置文件中的相对文件路径是相对于 Kubelet 配置文件的位置解析的,而命令行参数中的相对路径是相对于 Kubelet 的当前工作目录解析的。

请注意,命令行参数和 Kubelet 配置文件的某些默认值不同。如果设置了 --config,并且没有通过命令行指定值,则 KubeletConfiguration 版本的默认值生效。在上面的例子中,version 是 kubelet.config.k8s.io/v1beta1

与动态 Kubelet 配置的关系

如果您正在使用 动态 Kubelet 配置 特性,那么自动回滚机制将认为是 “最后已知正常(last known good)” 的配置,通过 --config 提供的配置与覆盖这些值的任何参数的结合。