Information in this document may be out of date

This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Switching from Polling to CRI Event-based Updates to Container Status

从轮询切换为基于 CRI 事件的更新来获取容器状态

特性状态: Kubernetes v1.27 [beta]

本页展示了如何迁移节点以使用基于事件的更新来获取容器状态。 与依赖轮询的传统方法相比,基于事件的实现可以减少 kubelet 对节点资源的消耗。 你可以将这个特性称为事件驱动的 Pod 生命周期事件生成器 (PLEG)。 这是在 Kubernetes 项目内部针对关键实现细节所用的名称。

基于轮询的方法称为通用 PLEG

准备开始

  • 你需要运行提供此特性的 Kubernetes 版本。 Kubernetes 1.27 提供了对基于事件更新容器状态的 Beta 支持。 此特性处于 Beta 阶段,默认被禁用
  • 你的 Kubernetes 服务器版本必须不低于版本 1.26. 要获知版本信息,请输入 kubectl version. 如果你正在运行不同版本的 Kubernetes,请查阅对应版本的文档。
  • 所使用的容器运行时必须支持容器生命周期事件。 如果容器运行时未声明对容器生命周期事件的支持,即使你已启用了此特性门控, kubelet 也会自动切换回传统的通用 PLEG。

为什么要切换到事件驱动的 PLEG?

  • 通用 PLEG 由于频繁轮询容器状态而产生了不可忽略的开销。
  • 这种开销会被 kubelet 的并行轮询容器状态的机制加剧, 限制了可扩缩性,还会导致性能和可靠性问题。
  • 事件驱动的 PLEG 的目标是通过替换定期轮询来减少闲置时的非必要任务。

切换为事件驱动的 PLEG

  1. 启用特性门控 EventedPLEG 后启动 kubelet。 你可以通过编辑 kubelet 配置文件并重启 kubelet 服务来管理 kubelet 特性门控。 你需要在使用此特性的所有节点上执行此操作。
  1. 确保节点被腾空后再继续。

  2. 启用容器事件生成后启动容器运行时。

    版本 1.7+

    版本 1.26+

    通过验证配置,检查 CRI-O 是否已配置为发送 CRI 事件:

    crio config | grep enable_pod_events
    

    如果已启用,输出应类似于:

    enable_pod_events = true
    

    要启用它,可使用 --enable-pod-events=true 标志或添加以下配置来启动 CRI-O 守护进程:

    [crio.runtime]
    enable_pod_events: true
    
    你的 Kubernetes 服务器版本必须不低于版本 1.26. 要获知版本信息,请输入 kubectl version.
  1. 确认 kubelet 正使用基于事件的容器阶段变更监控。 要检查这一点,可在 kubelet 日志中查找 EventedPLEG 词条。

    输出类似于:

    I0314 11:10:13.909915 1105457 feature_gate.go:249] feature gates: &{map[EventedPLEG:true]}
    

    如果你将 --v 设置为 4 及更高值,你可能会看到更多条目表明 kubelet 正在使用基于事件的容器状态监控。

    I0314 11:12:42.009542 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=3b2c6172-b112-447a-ba96-94e7022912dc
    I0314 11:12:44.623326 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40
    I0314 11:12:44.714564 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40
    

接下来

最后修改 April 29, 2023 at 9:05 AM PST: [zh] sync switch-to-evented-pleg.md (8588ced693)