假设我有10个Pod运行稳定版本,并且我希望替换其中一个的映像,以便在全面推出之前运行较新版本。
有办法吗?
答案 0 :(得分:3)
并非如此:部署管理的每个吊舱都应该是相同的,包括运行相同的映像。创建Pod的映像后,您将无法再对其进行更改;如果更改了Deployment的映像,它将尝试重新创建其所有托管Pod。
如果您唯一担心的是Pod正在启动,则default behavior of a deployment将使用新映像启动其指定副本的25%。旧的Pod将继续不间断运行,直到新副本成功启动并通过它们的就绪性检查为止。如果新的Pod立即进入CrashLoopBackOff状态,则旧的Pod仍将运行。
如果要专门将Pod作为Canary部署启动,则可以创建第二个Deployment来处理它。您需要在吊舱上添加一些标签(例如canary: 'true'
),以便区分金丝雀和主要吊舱。它会出现在Pod规范和部署选择器中,但不会出现在相应的Service选择器中:Service与Canary和Non Canary Pod都匹配。如果成功运行,则可以删除canary Deployment并更新主Deployment上的映像。
答案 1 :(得分:0)
就像提到的其他答案一样,听起来您正在谈论Canary部署。您可以使用Kubernetes以及Istio来做到这一点。我更喜欢Istio,因为它可以使您更好地控制流量加权。也就是说,您可以将1%的流量发送到金丝雀,将99%的流量发送到控件。非常适合在生产中进行测试。它还可以让您使用HTTP标头进行路由。
https://istio.io/latest/blog/2017/0.1-canary/
如果要使用k8s进行操作,只需使用相同的app =标签创建两个具有唯一部署名称(例如,myappv1和myappv2)的部署。然后,您可以使用选择器=创建一个服务,无论您的应用程序标签是什么。 svc将在两个v1和v2部署之间进行轮询。