Kubernetes 更新部署(滚动更新)是否会使新旧共存副本同时接收流量?

Kubernetes 更新部署(滚动更新)是否会使新旧共存副本同时接收流量?,kubernetes,Kubernetes,我只是想知道我是否正确理解了文档: 假设我有一个配置了部署的nginx服务器,版本1.7.9,有4个副本 apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 4 template: metadata: labels: a

我只是想知道我是否正确理解了文档:

假设我有一个配置了部署的nginx服务器,版本1.7.9,有4个副本

apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
现在我将图像更新为1.9.1版:

kubectl设置映像部署/nginx部署nginx=nginx:1.9.1

使用
kubectl get pods
我可以看到以下内容:

 > kubectl get pods
NAME                                   READY     STATUS        RESTARTS   AGE
nginx-2100875782-c4fwg   1/1       Running       0          3s
nginx-2100875782-vp23q   1/1       Running       0          3s
nginx-390780338-bl97b    1/1       Terminating   0          17s
nginx-390780338-kq4fl    1/1       Running       0          17s
nginx-390780338-rx7sz    1/1       Running       0          17s
nginx-390780338-wx0sf    1/1       Running       0          17s
1.9.1的2个新实例(c4fwg、vp23q)已开始与1.7.9版本的3个实例共轴一段时间

此时对服务的请求会发生什么变化?在所有新的POD可用之前,所有请求是否都会转到旧的POD?或者新的和旧的POD之间的请求负载是否平衡

在最后一种情况下,是否有办法修改此行为并确保在所有新POD启动之前,所有流量都流向旧版本?

对“请求发生了什么”的回答是,它们将在与服务中的选择器匹配的所有POD之间循环,因此,是的,它们都将接收流量。我相信kubernetes认为这是一个特性,而不是一个bug

关于到旧POD的流量的答案可以用两种方式来回答:也许部署不适合您推出新POD的风格,因为这是它们的操作方式。另一个答案是,您可以更新服务中的Pod选择器,以更准确地描述“此服务适用于Pods 1.7.9”,这将把该服务固定到“旧”Pods上,然后在1.9.1 Pods中的一个已经启动并准备就绪后,您可以更新选择器,说“此服务适用于Pods 1.9.1”


如果你发现所有这些都是太多的体力劳动,有一大群中间的流量管理者比使用POD选择器有更细粒度的控制,或者你可以考虑一个正式的推出产品,如SpnNekk,这将使我所描述的自动化。(当然,假设你可以让Spinnaker工作;祝你好运)

嗨,Matthew,还有一件事,除了Spinakker,你能告诉我一些我可以使用的流量管理器的名字吗?谢谢。对延迟表示歉意;,,,(尽管它确实面向API流量),,可能还有很多其他的。名单上的许多人也能做到这一点,希望能一举两得。谢谢马修的建议!“库伯内特斯认为这是一个功能,而不是一个bug。”当有人把他的bug称为功能时,总是令人难过。