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
このラベルをnodeSelector
やaffinity
の条件に利用します。
なお、ラベルを追加しなくても、以下のようにノードプールを指定してnodeSelectorを定義できます。
nodeSelector:
cloud.google.com/gke-nodepool: some-pool
ただし、ノードプールは構成が変わると別名のプールになるため、それに合わせてマニフェストを書き換える必要が生じます。
基本的にはラベルを追加した方が変化には強いと言えます。
⁋ 2021/10/06↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro