Kubernetes HTTP 流量进入正在更新的 pod

Kubernetes HTTP Traffic goes to pod being updated

我有一个具有以下结构的管道:

Step 1: kubernetes-deployment
Step 2: kubectl rollout restart deploy -n NAMESPACE
Step 3: http-calls to deployment A and B

在同一个命名空间中,有一个数据库 pod,Pod AB 连接到这个数据库。

问题

现在的问题是由滚动更新引起的 - 当应用滚动更新时,kubernetes 在部署更新时启动新的 pods。不过,直到相应的新 pod 启动后,旧 pod 才会终止。

由于kubectl rollout restart deploy是一个非阻塞调用,它不会等待更新完成。而且 afaik,kubectl 没有内置的方式来强制这种行为。

当我在调用它之后执行一些 HTTP 请求时,我现在遇到的问题是 有时,当更新不够快时,接收到 HTTP 调用并且由来自部署 AB 的旧 pods 回答。不久之后,旧的 pods 将被终止,因为新的 运行.

这导致了这些 HTTP 请求的效果不再可见的问题,因为它们是由旧的 pods 接收的,将相应的数据保存在位于“旧”数据库 pod 中的数据库中.随着数据库pod重启,数据会丢失。

请注意,在这种情况下我没有使用 persistent Volume,因为它来自夜间构建场景,我想每天重新启动这些部署,并且数据库状态应该始终只包含来自当天的构建。



你有什么办法解决这个问题吗? 包括一个简单的 wait 步骤可能会奏效,但我很好奇是否有更好的解决方案。

提前致谢!

kubectl rollout status deployment <deploymentname>startupProbelivenessProbe 一起解决了我的问题。