Kubernetes部署滚动更新

问题描述 投票:1回答:1

我有一个在Kubernetes上部署的应用程序。

此应用程序有4个副本,我正在对每个部署进行滚动更新。

此应用程序有一个正常的关闭状态,可能需要数十分钟的时间(必须等待正在运行的任务完成)。

我的问题是,在更新期间,由于所有较旧版本的Pod在创建所有新Pod时都处于“终止”状态,因此我的容量过大。

在更新期间,我最终使用8个容器运行,这是我要避免的事情。

我尝试将maxSurge设置为0,但是此设置未考虑“终结”窗格,因此部署期间服务器上的负载过高。

我试图获得的行为是,只有在旧版本的Pod成功完成之后才能创建新的Pod,因此,在任何时候我都不会超过设置的副本数。

我想知道是否有办法实现这种行为。

kubernetes kubernetes-deployment
1个回答
0
投票

让我建议以下策略:

  1. 部署实施就绪吊舱的概念以辅助滚动更新。 Readiness Probes允许部署逐步更新Pod,同时使您能够确定何时可以进行滚动更新。

  2. Ready pod是被部署成功更新的一个,将不再计入部署的高峰期数。吊舱将被视为已准备就绪如果其准备工作成功,并且自从创建吊舱以来已经通过spec.minReadySeconds。这些选项的默认设置将使容器在容器启动后立即准备就绪。

因此,您可以做的是为吊舱实现readiness probe(如果尚未这样做)此外,将spec.minReadySeconds设置为有意义的值(最坏的情况)到吊舱终止的时间。

这将确保按您的要求逐步进行部署。

此外,请不要忘记为发布设置最终期限。默认情况下,首次部署10分钟之内无法取得任何进展后,就视为失败。可以通过“部署”规范中的progressDeadlineSeconds属性来配置部署失败的时间。

© www.soinside.com 2019 - 2024. All rights reserved.