Kubernetes v1.28:引入原生 Sidecar 容器

🤖 由 ChatGPT 生成的文章摘要

作者:Todd Neal (AWS)、Matthias Bertschy (ARMO)、Sergey Kanzhelev (Google)、Gunju Kim (NAVER)、Shannon Kularathna (Google)

这篇文章解释了如何使用新的 sidecar 功能,该功能支持可重新启动的 init 容器,并且在 Kubernetes 1.28 的 alpha 版本中可用。我们希望得到您的反馈,以便我们尽快完成此功能。

“sidecar”的概念几乎从一开始就是 Kubernetes 的一部分。 2015 年,一篇关于复合容器的博客文章将 sidecar 描述为“扩展和增强‘主’容器”的附加容器。 Sidecar 容器已成为一种常见的 Kubernetes 部署模式,通常用于网络代理或作为日志系统的一部分。到目前为止,sidecar 是 Kubernetes 用户在没有原生支持的情况下应用的概念。缺乏本机支持导致了一些使用摩擦,此增强功能旨在解决这些问题。

1.28 中什么是 Sidecar 容器?

Kubernetes 1.28 向初始化容器添加了一个新的 restartPolicy 字段,该字段在启用 SidecarContainers 功能门时可用。

apiVersion: v1
kind: Pod
spec:
 initContainers:
 - name: secret-fetch
 image: secret-fetch:1.0
 - name: network-proxy
 image: network-proxy:1.0
 restartPolicy: Always
 containers:
 ...

该字段是可选的,如果设置,则唯一有效的值为“始终”。设置此字段会更改 init 容器的行为,如下所示:

  • 如果容器退出则重新启动
  • 任何后续的 init 容器在startupProbe 成功完成后立即启动,而不是等待可重新启动的 init 容器退出
  • Pod 的资源使用计算发生变化,因为可重新启动的 init 容器资源现在添加到主容器的资源请求总和中

Pod 终止仍然仅取决于主容器。 restartPolicy 为 Always 的 init 容器(称为 sidecar)不会阻止 pod 在主容器退出后终止。

可重新启动的 init 容器的以下属性使其非常适合 sidecar 部署模式:

  • 无论您是否设置 restartPolicy ,初始化容器都有一个明确定义的启动顺序,因此您可以确保您的 sidecar 在清单中 sidecar 声明之后的任何容器声明之前启动。
  • Sidecar 容器不会延长 Pod 的生命周期,因此您可以在短期 Pod 中使用它们,而无需更改 Pod 生命周期。
  • Sidecar 容器在退出时重新启动,这提高了弹性,并允许您使用 sidecar 来提供主容器可以更可靠地使用的服务。

何时使用Sidecar containerd

您可能会发现内置 sidecar 容器对于以下工作负载很有用:

  • 处理或 AI/ML 工作负载,或运行完成的其他 Pod。这些工作负载将获得最显着的好处。
  • 清单中的任何其他容器之前启动的网络代理。运行的所有其他容器都可以使用代理容器的服务。有关说明,请参阅 Istio 中的 Kubernetes Native sidecar 博客文章。
  • 日志收集容器,现在可以在任何其他容器之前启动并运行直到 Pod 终止。这提高了 Pod 中日志收集的可靠性。
  • 作业,可以将 sidecar 用于任何目的,而作业完成不会被正在运行的 sidecar 阻止。无需额外配置即可确保此行为。

1.28之前用户是如何获得sidecar行为的?

在 sidecar 功能出现之前,可以使用以下选项来根据 sidecar 容器的所需生命周期来实现 sidecar 行为:

  • sidecar 的生命周期小于 Pod 生命周期:使用 init 容器,它提供明确定义的启动顺序。然而,sidecar 必须退出才能让其他 init 容器和主 Pod 容器启动。
  • sidecar 的生命周期等于 Pod 生命周期:使用与 Pod 中的工作负载容器一起运行的主容器。此方法无法让您控制启动顺序,并让 sidecar 容器可能会在工作负载容器退出后阻止 Pod 终止。

内置的 sidecar 功能解决了生命周期与 Pod 生命周期相同的用例,并具有以下额外优势:

  • 提供对启动顺序的控制
  • 不阻止 Pod 终止

将现有sidecar过度到新版本

我们建议仅在 alpha 阶段的短期测试集群中使用 sidecars 功能门。如果您有一个已配置为主容器的现有 sidecar,以便它可以在 Pod 的生命周期内运行,则可以将其移动到 Pod 规范的 initContainers 部分,并给出 restartPolicy

Known issues 已知的问题

内置 sidecar 容器的 alpha 版本具有以下已知问题,我们将在将该功能升级为 beta 之前解决这些问题:

  • CPU、内存、设备和拓扑管理器不知道 sidecar 容器的生命周期和额外的资源使用情况,并且会像 Pod 的资源请求低于实际情况一样运行。
  • 使用 sidecar 时 kubectl describe node 的输出不正确。输出显示的资源使用量低于实际使用量,因为它没有对 sidecar 容器使用新的资源使用量计算。

原文连接

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索