セレクタ:
selector:
matchLables:
app: nginx
selector:
matchExpressions:
- key: app
operator: In
values:
- nginx
----------
selector:
matchExpressions:
- key: app
operator: Exists:
(In、NotIn、Exists、DoesNotExist、Gt、Lt)
nodeselector:
nodeselector:
label: value(节点标签)
ノードアフィニティ:
spec: #pod的spec下
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
name: nginxweb
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- master1
preferredDuringSchedulingIgnoredDuringExecution: # 软策略
- weight: 1 #权重
preference:
matchExpressions:
- key: com
operator: In
values:
- youdianzhishi
最初にハードポリシーを満たし、ソフトポリシーを満たそうとします(ノードとポッドのアフィニティ、ポッドの非アフィニティ、およびハードの不満はスケジュールできず、常に保留中です。これは、いわゆるスケジュール可能なノードが常に存在しないためです。 nodeSelectorTermsの下で期間ノード中にスケジュール可能なものを探して
いずれか1つを満たす場合、matchExpressionsの下に複数の一致ルールがある場合は、それらすべてを満たす必要があります。
下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-affinity
labels:
app: pod-affinity
spec:
replicas: 3
selector:
matchLabels:
app: pod-affinity
template:
metadata:
labels:
app: pod-affinity
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: nginxweb
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- busybox-pod
topologyKey: kubernetes.io/hostname #拓扑域
---apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-antiaffinity
labels:
app: pod-antiaffinity
spec:
replicas: 3
selector:
matchLabels:
app: pod-antiaffinity
template:
metadata:
labels:
app: pod-antiaffinity
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: nginxweb
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- busybox-pod
topologyKey: kubernetes.io/hostname