Kubernetes完全ガイド 第12章 高度で柔軟なスケジューリング
高度なスケジューリングとAffinity/Anti-Affinity
Affinity: 特定の条件に一致するところにスケジューリングする
Anti-Affinity: 特定の条件に一致しないところにスケジューリングする
Taints: Nodeに汚れ(Taint)をつけておき、それを許容(Tolerations)
nodeSelector(Simplest Node Affinity)
Node Affinity
Node Anti-Affinity
Inter-Pod Affinity: 特定のPodがいるドメイン(ノード、ゾーン等)上で実行する
Inter-Pod Anti-Affinity: 特定のPodがいないドメイン上で実行する
ビルトインノードラベルとラベルの追加
Kubernetesの仕様で、ビルトインノードラベルとして ホスト名/OS/アーキテクチャ...等の情報が付与される
手動でラベルをつけることも可能
nodeSelector(Simplesst Node Affinity)
簡易的なNode Affinityとして、nodeSelectorが使える
qeuality-bases条件を使用するため、あまり柔軟な設定はできない
code: yaml
spec:
nodeSelector:
disktype: ssd
Node Affinity
spec.affinity.nodeAffinity
code:yaml
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- hdd
requiredDuringSchedulingIgnoredDuringExecution: 必須のスケジューリングポリシー
使用できるノードが無い場合はスケジューリングに失敗し、PodはPendingとなる
preferredDuringSchedulingIgnoredDuringExecution: 優先的に考慮されるスケジューリングポリシー
使用できるノードが無い場合は無視される
matchExpressionsオペレータとset-based条件
In
NotIn
Exists
DoesNotExists
Gt
Lt
Node Anti-Affinity
spec.affinity.nodeAffinity に否定形のオペレータを指定することで実現する
code:yaml
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: NotIn
values:
- hdd
Inter-Pod Affinity