Kubernetes 本身是否支持类似"blue-green"部署?



我有一个单页应用程序。它由API服务器提供服务(并与之对话(,该服务器运行在具有2个副本的Kubernetes部署上。我添加了一个X-API-Version头,API在每个请求时都会发送该头,我的客户端可以与之进行比较,以确定是否需要通知用户他们的客户端代码已过时。

然而,我面临的一个问题是,当我部署时,我希望确保只有一个版本的API在运行。我不希望出现客户端可以在循环中多次刷新的情况,因为它接收不同的API版本。

我基本上希望它从运行版本A的2个副本变成运行版本A、2个副本。然后在健康检查通过后将流量切换到版本B,然后拆除旧的版本A。

Kubernetes使用RollingDeploy策略支持这一点吗?

对于Kubernetes中的蓝绿色部署,我建议使用一些第三方解决方案,如Argo Rollouts、NGINX、Istio等。它们可以让你在应用程序的不同版本之间分配流量。

然而,Kubernetes正在引入Gateway API,它内置了对流量拆分的支持。

您所要求的并不是真正的蓝/绿部署。如果您在升级过程中需要两个或更多的pod来运行,由于性能问题,您将得到一个重叠,其中一些版本A的pod响应,另一些版本B的pod响应。

你可以对它进行一点微调,例如,你可以将它配置为一次启动所有新的pod,并为每个停止运行的pod配置->准备好的一个旧的将被移除。如果你的吊舱开始得很快,或者至少同样快,重叠就会很短。

或者,如果你可以接受暂时的停机时间,那么有一种部署策略,在推出新的吊舱之前,先彻底退役所有旧吊舱。根据您的服务启动速度,这可能会导致短时间或长时间的停机。

当然,如果你不介意做一点额外的工作,你可以将版本B与版本a并行部署,并将版本添加到标签集中。

然后,在您的服务中,您确保版本标签是选择器的一部分,一旦版本B的pod运行,您将服务选择器从版本a更改为版本B,它将立即开始使用这些选择器。

我最近开始使用Kubernetes。我的经验是,是的,K8的行为方式是开箱即用的。例如,如果我有两个吊舱在运行,并且我执行部署,K8将创建两个新的吊舱,然后,只有当这两个新吊舱健康时,K8才会终止原来的两个吊舱。

最新更新