特定のノードプールにPodデプロイ

kubernetesのノードセレクタを利用すると、特定のノードにPodをデプロイできます。

以下のようにnodeSelectorを記述した場合、stageラベルにdevelopmentを指定したノードにデプロイします。

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      nodeSelector:
        stage: development

同様のデプロイポリシー定義にaffinityがあり、preferredのアフィニティは条件に合うノードを優先します。

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: stage
                operator: In
                values:
                - development

GKEのノードプールにラベルを追加する

Google Kubernetes Engineはノードの集合としてノードプール単位でクラスタ管理します。
gcloudコマンドを利用すると、ノードプール単位でラベルを追加できます。

$ gcloud beta container node-pools update some-pool --node-labels=stage=development

このラベルをnodeSelectoraffinityの条件に利用します。
なお、ラベルを追加しなくても、以下のようにノードプールを指定してnodeSelectorを定義できます。

nodeSelector:
    cloud.google.com/gke-nodepool: some-pool

ただし、ノードプールは構成が変わると別名のプールになるため、それに合わせてマニフェストを書き換える必要が生じます。
基本的にはラベルを追加した方が変化には強いと言えます。

中馬崇尋
Chuma Takahiro