2017-08-02 6 views
1

私はドキュメントの権利を理解しているかどうかを知りたいだけです:Deployment(ローリング更新)を更新すると、新旧の共存レプリカが同時にトラフィックを受信しますか?

デプロイメントで設定された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 get pods

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

私は以下を参照してください。

> 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 

2つの新しいインスタンス(c4fwg、vp23q)の1.9.1は、1.7.9バージョンの3つのインスタンスでしばらくの間、共存を開始しています。

現時点でサービスへのリクエストはどうなりますか?すべての新しいリクエストが利用可能になるまで、すべてのリクエストは古いポッドに移動しますか?または、新しいポッドと古いポッドの間で要求のロードバランスが取られていますか?

最後に、この動作を変更し、新しいポッドがすべて開始されるまですべてのトラフィックが古いバージョンに移行するようにする方法がありますか?

答えて

0

「リクエストにどうなるか」の答えは、サービス内のセレクタに一致するすべてのポッドでラウンドロビンされるため、すべてがトラフィックを受け取ります。私はkubernetesがこれを機能ではなくバグではないと考えています。

古いポッドに向かうトラフィックについての回答は、2通りの方法で回答できます。おそらく、デプロイメントは新しいポッドを展開するスタイルには適していません。もう1つの答えは、サービス内のPodセレクタを更新して、「このサービスはPods 1.7.9」をより正確に記述することができます。このサービスは「古い」ポッドにそのサービスを固定し、その後1.9 .1ポッドが起動して準備が整っている場合、セレクタを更新して「このサービスはポッド1.9.1に対応します」

これはあまりにも手作業であることが分かっている場合は、ポッドセレクタを使用するよりもきめ細かな制御を持つトラフィック管理者や、Spinnakerなどの正式な製品を検討して、私が今説明したことを自動化することができます(もちろん、Spinnakerを動作させることができます。

+0

こんにちはMatthew、もう1つ、Spinakkerとは別にトラフィック管理の名前を教えてください私は使うことができますか?ありがとう。 – codependent

+0

遅延のお詫び。 [Envoy](https://lyft.github.io/envoy/)、[fabio](https://github.com/fabiolb/fabio#readme)、[haproxy](https://github.com/haproxy/haproxy#readme)、 [kong](https://getkong.org)(実際にはAPIトラフィック向けですが)、[traefik](https://traefik.io/)、[voyager](https: //github.com/appscode/voyager#readme)、他にもたくさんの可能性があります。そのリストの多くは[Ingressコントローラ](https://kubernetes.io/docs/concepts/services-networking/ingress/)でも可能です。これはうまくいけば1羽の石で2羽の鳥を殺すことができます –

+0

マシュー! – codependent

関連する問題