kubernetes - 滚动更新以在 Kubernetes 中实现零停机时间垂直 Pod 自动扩缩器
问题描述
Kubernetes vertical pod autoscaler
(自动缩放内存,pod 的 cpu 资源)需要重新启动 pod 才能使用新分配的资源,这可能会增加不可用的小窗口。
我的问题是,如果 Pod 的部署正在运行,rolling update
那么在应用 VPA 建议时,将确保零停机时间和零不可用窗口。
谢谢你。
解决方案
从官方文档:
滚动更新通过使用新的 Pod 实例增量更新 Pod 实例,允许 Deployments 的更新在零停机时间的情况下进行。新的 Pod 将安排在具有可用资源的节点上。
在本文档中,您会发现一个非常好的滚动更新概述:
滚动更新允许以下操作:
- 将应用程序从一个环境提升到另一个环境(通过容器映像更新)
- 回滚到以前的版本
- 零停机时间的应用程序的持续集成和持续交付
在这里您可以找到有关滚动更新部署的信息:
当
.spec.strategy.type==RollingUpdate
. 您可以指定maxUnavailable
和maxSurge
控制滚动更新过程。
此外,您可以添加另外 2 个字段:Max Unavailable和Max Surge。
.spec.strategy.rollingUpdate.maxUnavailable
是一个可选字段,指定在更新过程中不可用的 Pod 的最大数量。
.spec.strategy.rollingUpdate.maxSurge
是一个可选字段,指定可以创建的 Pod 的最大数量超过所需的 Pod 数量。
现在由您决定如何设置这些值。以下是一些选项:
- 通过添加一个 Pod 进行部署,然后删除一个旧的:
maxSurge
= 1,maxUnavailable
= 0。使用此配置,Kubernetes 将启动一个额外的 Pod,然后停止一个“旧”的 Pod。 - 通过移除一个 Pod 进行部署,然后添加一个新的:
maxSurge
= 0,maxUnavailable
= 1。在这种情况下,Kubernetes 将首先停止一个 Pod,然后再启动一个新的 Pod。 - 通过尽可能快地更新 pod 进行部署:
maxSurge
= 1,maxUnavailable
= 1。这种配置大大减少了在应用程序版本之间切换所需的时间,但结合了前两种配置的缺点。
也可以看看:
推荐阅读
- python - 错误:Spider 必须返回 Request、BaseItem、dict 或 None,得到 'tuple'
- karate - 快速空手道 POST 请求建议
- linux-kernel - 使用 clang-r383902 为 Android 11 (R) Beta 版本 1 编译 Linux 内核时出错
- java - 在 Spring Batch SystemCommandTasklet 中使用 shell 命令
- database - git bash 命令等效于“node app.js”,用于将 javascript 文件连接到 mongodb
- oracle - 根据保存的数据生成动态记录的更新问题
- python - 使用 Python 函数创建数据帧切片
- python - 如何在更精细、均匀间距的网格上有效地插入 3D 阵列?
- ruby - 尝试运行已挂载的容器时,如何解决“找不到此类文件或目录”错误?
- python - 如何使用 plotly express 创建热图动画?