我有一个具有以下结构的管道:
Step 1: kubernetes-deployment
Step 2: kubectl rollout restart deploy -n NAMESPACE
Step 3: http-calls to deployment A and B在相同的名称空间中,有一个数据库pod,Pod A和B连接到这个数据库。
问题所在
这个问题现在是由滚动更新引起的--当应用滚动更新时,kubernetes会在部署更新时启动新的吊舱。但是,在相应的新吊舱开始之前,旧吊舱不会被终止。
由于kubectl rollout restart deploy是一个非阻塞调用,它不会等待更新完成.而afaik,没有内在的方式来强制这样的行为。
当我在调用它之后执行一些HTTP请求时,我现在遇到了一个问题,即有时是,当更新不够快时,来自部署A和B的旧pods接收并应答HTTP调用。不久后,旧豆荚将被终止,因为新的是启动和运行。
这导致了这样的问题,即这些HTTP请求的影响不再可见,因为它们是由旧的吊舱接收的,从而将相应的数据保存在位于“旧”数据库荚中的数据库中。当数据库pod重新启动时,数据将丢失。
请注意,在本例中,我不使用persistent Volume,因为这来自夜间构建场景,我希望每天重新启动这些部署,数据库状态应该始终只包含当前构建的数据。
你能找到解决这个问题的办法吗?包括一个简单的wait步骤可能会有效,但我很好奇是否有更好的解决方案。
提前谢谢!
发布于 2021-07-03 15:05:15
kubectl rollout status deployment <deploymentname>与startupProbe和livenessProbe一起解决了我的问题。
https://stackoverflow.com/questions/68191250
复制相似问题