2017-10-19 7 views
0
ここ

は私の設定です:Pod AntiAffinity:異なるポッドバージョンを許容できますか?

  • 2ノード
  • 展開の設定ができるように同じアプリの2つのポッド
  • 1つのポッドのサージ

私の問題:私はしたくない2同じアプリケーション/バージョンのポッドを同じノード上で実行できます。これはAntiAffinityで行うことができますが、新しいバージョンをデプロイするときには3番目のポッド(サージポッド)を追加しようとしますが、AntiAffinity設定と2つのノードしかないため失敗します。

質問:同じアプリケーションで同じバージョンのポッドを同じノードで実行できるようにAntiAffinityを調整することはできますか?

以下は、私の設定を反映した仕様です。

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
    name: my-app 
spec: 
    replicas: 2 
    minReadySeconds: 10 
    strategy: 
    rollingUpdate: 
     maxUnavailable: 0 
     maxSurge: 1 
    template: 
    metadata: 
     labels: 
     app: my-app 
... 
    affinity: 
     podAntiAffinity: 
      requiredDuringSchedulingIgnoredDuringExecution: 
      - labelSelector: 
       matchExpressions: 
        - key: "app" 
        operator: In 
        values: 
        - my-app 
       topologyKey: "kubernetes.io/hostname" 

答えて

0
することができます

が、それは「新しいバージョン」の一環として、ラベルを変更する必要があります。

selector: 
    matchLabels: 
     app: my-app 
    template: 
    metadata: 
     labels: 
     app: my-app 
     pod-version-anti-affinity: my-app-v1 
    spec: 
     affinity: 
     podAntiAffinity: 
      requiredDuringSchedulingIgnoredDuringExecution: 
      - labelSelector: 
       matchLabels: 
       pod-version-anti-affinity: my-app-v1 
      topologyKey: kubernetes.io/hostname 

これは、展開のためのセレクタのみが「私のアプリ」を見ていることを意味していますアプリケーションのすべての「バージョン」にわたって一貫性があります。

ただし、ポッド自体には、その「バージョン」に固有の別のラベルも含まれています。これは、アンチアフィニティルールがその特定のラベルをターゲットにすることができることを意味します。これにより、ローリングアップグレード中に同じバージョンの異なるバージョンがノード上に同じ場所に配置されます。

新しいバージョンをデプロイするときは、テンプレート&のラベル(「-v2」など)を変更するだけです。

+0

私は問題を解決するための論理的な方法よりも設定を探していましたが、はい、あなたのソリューションは機能します。ありがとう! –

関連する問題