高级发布技术:Kubernetes中状态应用的自定义策略

高级发布技术:Kubernetes中状态应用的自定义策略

💡 原文英文,约2000词,阅读约需8分钟。
📝

内容提要

Slack开发了Bedrock Rollout Operator,以管理Kubernetes中的StatefulSet部署。该操作器支持更快的百分比滚动更新、回滚和Slack通知,提升了状态服务的部署和管理效率。

🔎

延伸解读

为何需要自定义滚动更新策略

Kubernetes 原生 StatefulSet 的 RollingUpdate 策略受限于 maxUnavailable 字段仍处于 alpha 阶段,在 AWS EKS 上不可用,导致只能逐个 Pod 更新,对于数百 Pod 的应用部署极慢。OnDelete 策略虽允许手动控制,但缺少百分比滚动等高级功能。Slack 内部团队因此需要更快的百分比滚动、回滚、暂停以及集成 Consul 和 Slack 通知,这促使了 Bedrock Rollout Operator 的诞生。

操作器如何工作:协调循环与状态管理

Bedrock Rollout Operator 监控自定义资源 StatefulsetRollout,通过协调循环将集群实际状态收敛至期望状态。与常见的事件驱动方式不同,它主动将下一次协调请求加入队列,直到达到 RolloutDone 或 RolloutFailed 等最终状态。这种方式减少了协调次数,并确保对同一资源的协调顺序执行,避免了并行修改带来的竞态条件。每次循环只执行一个动作,并将决策阶段保存在状态中,使操作器更 resilient。

大规模部署下的通知优化与版本泄漏风险

Slack 的某些 StatefulSet 可扩展至 1000 个 Pod,并行滚动多达 100 个,导致逐 Pod 发送 Slack 通知时触发速率限制。操作器因此重写了通知机制,引入分页并改为每条消息包含最多 50 个 Pod。此外,使用 OnDelete 策略存在版本泄漏问题:暂停或百分比滚动时,旧版本 Pod 若因节点终止等非操作器原因被替换,会自动升级到新版本,导致暂停的滚动逐渐完成。Slack 团队通过及时完成全量部署来规避此限制。

❓

Q&A

Bedrock Rollout Operator的主要功能是什么?

Bedrock Rollout Operator主要用于管理Kubernetes中的StatefulSet部署,支持快速的百分比滚动更新、回滚和Slack通知。

Slack是如何优化Kubernetes中的状态服务部署的?

Slack通过开发Bedrock Rollout Operator,提供更快的部署和回滚速度,并集成Slack通知功能,实时更新团队的部署状态。

Bedrock Rollout Operator是如何构建的?

Bedrock Rollout Operator是使用Kubebuilder构建的,管理自定义资源StatefulsetRollout,提供额外功能如暂停和Slack通知。

Slack的Kubernetes集群规模有多大?

Slack目前拥有超过200个Kubernetes集群,近100个状态服务(StatefulSets)。

Bedrock Rollout Operator如何处理大规模Pod的通知?

操作器优化了Slack通知机制,通过分页发送消息,避免了消息发送的速率限制问题。

Slack在未来对Bedrock Rollout Operator有什么计划?

Slack计划未来扩展Bedrock Rollout Operator的使用,以管理更多的Kubernetes部署。

🏷️

标签

➡️

继续阅读