Kubernetes では、ポッド アフィニティ (ポッド アフィニティ) を使用して、ポッドと他のポッドの間の関連付けルールを定義し、同じノードまたは異なるノードでのスケジューリングを制御できます。
-
ポッド アフィニティ タイプ:
requiredDuringSchedulingIgnoredDuringExecution
: ポッドはアフィニティ ルールを満たす必要があり、満たさない場合はスケジュールできません。preferredDuringSchedulingIgnoredDuringExecution
: ポッドはアフィニティ ルールを満たす傾向がありますが、そうする必要はありません。
-
ポッドの YAML ファイルでポッド アフィニティを使用します。
- ポッドの YAML ファイルで、
affinity
フィールドを使用してポッド アフィニティ ルールを指定します。 affinity
フィールドでは、podAffinity
またはpodAntiAffinity
サブフィールドを使用してポッド アフィニティ ルールを定義します。
- ポッドの YAML ファイルで、
ポッドの YAML ファイルでポッド アフィニティを使用する方法を示す例を次に示します。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- frontend
topologyKey: kubernetes.io/hostname
上記の例では、podAffinity
フィールドは必須のポッド アフィニティ ルールを定義します。つまり、ポッドはapp=frontend
ラベルを持つ他のポッドと同じノード上でスケジュールされる必要があり、kubernetes.io/hostname
トポロジ ラベルは照合に使用されます。
ポッド アフィニティ ルールでは、他の演算子 ( NotIn
、など) および複数の一致式を使用して、より複雑なルールを定義できることExists
に注意してください。DoesNotExist
ポッド アフィニティを使用すると、デプロイメント戦略、データの局所性、ロード バランシングなどの要件を満たすようにポッドをスケジュールするときに、ポッドと他のポッドの間の関連付けを制御できます。