使用 Kubernetes 在少数节点上选择性地更新部署镜像

使用 Kubernetes 在少数节点上选择性地更新部署镜像

我有一个正在运行的 Kubernetes 单主集群,其中有 14 个工作节点。

其中 4 个节点托管 Web 应用程序,10 个节点托管后端应用程序。

由于我们的架构设计方式,我有时只需要用最新镜像更新几个节点,而让其他节点在旧的部署镜像上再保留几个小时。(这是因为,在某些更新中,较新的 web 应用程序无法与旧的后端应用程序通信,所以我需要拆分基础架构,让一些节点在旧版本上保持活动状态,同时更新其他节点)。我花了很多时间在文档中寻找一个选项,但似乎没有一种使用 Kubernetes 轻松做到这一点的方法。

为了更新应用程序,我目前正在使用滚动更新,在 yaml 文件中配置:

replicas: 3  
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0

为了应用更新,我基本上运行两个命令:

kubectl apply -f webapp.yaml
kubectl apply -f backendapp.yaml

这一切都很顺利,但对于我上面描述的场景来说,这却是一个真正的问题。有人有什么建议吗?我可以遵循什么路径?

谢谢

答案1

如果你希望应用程序的新旧版本都能为客户端提供服务并与数据库通信,并且能够顺利地将流量转换到新版本,你可以通过以下方式实现Istio虚拟服务

这允许您使用加权HTTP 路由目标将流量引导至 pod 的子集。

有关 Istio 流量管理的更多深入信息,请参阅文章 这里

也许你已经看过了,但这里有一篇非常好的文章,讨论了在 K8s 中推出更新的不同方法:关联

相关内容