以下是一个实际的示例,它演示了如何使用Node Affinity规则将Pod调度到指定的Node上。假设我们有三个Node,分别具有以下标签:
- Node1:
zone=us-east-1a
- Node2:
zone=us-east-1b
- Node3:
zone=us-west-1a
我们希望将一个Pod调度到具有zone=us-east-1a
标签的Node上,因此可以使用以下Pod定义文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
zone: us-east-1a
这个Pod定义文件中,nodeSelector
部分指定了Pod只能被调度到具有zone=us-east-1a
标签的Node上。
另一个示例,演示了如何使用Pod Affinity规则将具有相同标签的Pod调度到同一个Node上。假设我们有两个Pod,分别具有以下标签:
- Pod1:
app=nginx
- Pod2:
app=nginx
我们希望这两个Pod调度到同一个Node上,因此可以使用以下Pod定义文件:
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: pod2
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
这两个Pod定义文件中,都使用了相同的affinity
规则,即要求具有相同标签的Pod必须调度到同一个Node上。规则中使用了requiredDuringSchedulingIgnoredDuringExecution
部分,它要求Pod必须调度到与它具有相同标签的Pod所在的Node上,否则调度失败。topologyKey
指定了用来匹配Node的标识符,这里使用的是kubernetes.io/hostname
,表示匹配Node的主机名。这个规则要求Pod必须调度到与它具有相同标签的Pod所在的Node上,因此Pod1和Pod2将会被调度到同一个Node上。