这篇文章已发布一年多。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否已失效。

Kubernetes 1.25: 应用部署的两项功能达到稳定阶段

本篇博客介绍了 SIG Apps 很高兴在 Kubernetes 1.25 中升级至 Stable 版本的两个特性:StatefulSets 的 minReadySeconds 和 DaemonSets 的 maxSurge

.spec.updateStrategy 字段中使用 RollingUpdate 值时,指定 minReadySeconds 会让 StatefulSet 的滚动更新变慢,通过等待每个 Pod 达到指定时间。这段时间可用于初始化 Pod(例如预热缓存)或作为确认 Pod 前的延迟。

.spec.updateStrategy 字段中使用 RollingUpdate 值时,maxSurge 允许 DaemonSet 工作负载在滚动更新期间在同一节点上运行同一 Pod 的多个实例。这有助于最大限度地减少 DaemonSet 对消费者的停机时间。

这些特性已经在 Deployment 和其他工作负载中可用。这次升级有助于在各种工作负载之间统一此功能。

这些特性解决了什么问题?

StatefulSets 的 minReadySeconds

minReadySeconds 确保 StatefulSet 工作负载在将 Pod 报告为 Available 之前,已经处于 Ready 状态达到指定的秒数。ReadyAvailable 的概念对于工作负载来说非常重要。例如,某些工作负载(如带有多个 Alertmanager 实例的 Prometheus)只有在 Alertmanager 的状态转移完成后才应被视为 AvailableminReadySeconds 在与云提供商的负载均衡器一起使用时也很有帮助。由于 Pod 必须处于 Ready 状态达到指定的秒数,这提供了一段缓冲时间,可以防止在新的 Pod 出现之前终止轮换中的 Pod。

DaemonSets 的 maxSurge

Kubernetes 系统级组件,如 CNI、CSI 通常作为 DaemonSets 运行。如果这些 DaemonSets 在升级过程中短暂停止,可能会影响工作负载的可用性。该特性允许 DaemonSet Pods 临时增加其数量,从而确保 DaemonSets 的零停机。

请注意,DaemonSets 中结合使用 hostPortmaxSurge 是不允许的,因为 DaemonSet Pod 绑定到单个节点,两个活跃的 Pod 不能在同一个节点上共享同一个端口。

它是如何工作的?

StatefulSets 的 minReadySeconds

StatefulSet 控制器监视 StatefulSet Pods 并计算特定 Pod 处于 Running 状态的时间。如果此值大于或等于 StatefulSet 的 .spec.minReadySeconds 字段中指定的时间,StatefulSet 控制器会更新 StatefulSet 状态中的 AvailableReplicas 字段。

DaemonSets 的 maxSurge

DaemonSet 控制器根据 .spec.strategy.rollingUpdate.maxSurge 中给定的值创建额外的 Pod(超过 DaemonSet 规约中期望的数量)。这些额外的 Pod 将与旧的 DaemonSet Pod 一起运行在同一个节点上,直到旧的 Pod 被终止。

  • 默认值为 0。
  • MaxUnavailable 为 0 时,该值不能为 0
  • 该值可以指定为 Pod 的绝对数量,或期望 Pod 数量的百分比(向上取整)。

如何使用它?

StatefulSets 的 minReadySeconds

为任何 StatefulSet 指定 minReadySeconds 的值,并通过检查 AvailableReplicas 字段来查看 Pods 是否可用,命令如下:

kubectl get statefulset/<有状态副本集的名称> -o yaml

请注意,minReadySeconds 的默认值为 0。

DaemonSets 的 maxSurge

.spec.updateStrategy.rollingUpdate.maxSurge 指定一个值,并将 .spec.updateStrategy.rollingUpdate.maxUnavailable 设置为 0

然后在下一次滚动更新中观察到更快的发布和同时运行的更多 Pod。

kubectl rollout restart daemonset <name_of_the_daemonset>
kubectl get pods -w

如何了解更多信息?

StatefulSets 的 minReadySeconds

DaemonSets 的 maxSurge

如何参与?

请在 Slack 的 #sig-apps 频道联系我们,或通过 SIG Apps 邮件列表 kubernetes-sig-apps@googlegroups.com 联系。