2

Kubernetes vertical pod autoscaler(自动缩放内存,pod 的 cpu 资源)需要重新启动 pod 才能使用新分配的资源,这可能会增加不可用的小窗口。

我的问题是,如果 Pod 的部署正在运行,rolling update那么在应用 VPA 建议时,将确保零停机时间和零不可用窗口。

谢谢你。

4

2 回答 2

2

官方文档

滚动更新通过使用新的 Pod 实例增量更新 Pod 实例,允许 Deployments 的更新在零停机时间的情况下进行。新的 Pod 将安排在具有可用资源的节点上。

在本文档中,您会发现一个非常好的滚动更新概述:

滚动更新允许以下操作:

  • 将应用程序从一个环境提升到另一个环境(通过容器映像更新)
  • 回滚到以前的版本
  • 零停机时间的应用程序的持续集成和持续交付

在这里您可以找到有关滚动更新部署的信息:

.spec.strategy.type==RollingUpdate. 您可以指定 maxUnavailablemaxSurge 控制滚动更新过程。

此外,您可以添加另外 2 个字段:Max UnavailableMax 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。这种配置大大减少了在应用程序版本之间切换所需的时间,但结合了前两种配置的缺点。

也可以看看:

于 2021-07-05T12:35:23.477 回答
1

是的。Deployment 的默认 RollingUpdate 行为应自动执行此操作。它首先带来一些新副本,然后在新副本准备好后删除一些旧副本。您可以控制一次可以有多少个 pod 不可用,或者使用maxUnavailablemaxSurge字段创建多少个新 pod。您可以调整这些变量以实现您的零停机时间目标。

参考:

于 2021-07-05T10:43:53.507 回答