Affinityの手法一覧
- nodeSelector:シンプルなNode Affinity機能
- Node Affinity:特定条件/特定条件以外のNode上だけ実行する
- Inter-Pod Affinity:特定のPodがいるドメイン(Node、ゾーンなど)上で実行する
- Inter-Pod Anti-Affinity:特定のPodがいないドメイン(Node、ゾーンなど)上で実行する
nodeSelector
nodeSelectorは、Nodeを選択するための、最も簡単で推奨されている手法です。
設定方法は、Podのspec.nodeSelector
で直接Nodeのラベルを指定することで、スケジュール先を決めます。
nodeSelectorの使用例
前回の説明では、GCPのNodeには沢山のビルトインラベルが用意されています。
その中で、NodePoolのラベルが存在します。
この例では、指定のNodePoolのみスケジューリングするような例で説明します。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: sample-app
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent # 必要イメージがk8sのローカル似なかった場合、ダウンロードする
nodeSelector: # nodeSelector
cloud.google.com/gke-nodepool: default-pool # default-poolという名のNodePoolのNodeにスケジューリングする
nodeName
実はnodeNameを直接指定することも可能ですが、k8sの設計方針的にはあんまりお勧めしません。
念のため、ここで指定例を載せておきます。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
nodeName: kube-node-01 # nodeのホスト名指定
※公式例を使用
最後に
今回の内容はすごく少なかったのですが、スケジューリングにおいてはよく使われる機能です。
公式ドキュメントでもこの使い方を推奨しています。
ここまで読んでいただいて、お疲れ様でした。
コメント