Kubernetes的派对规划指南:如何让你的Pod找到心仪的Node节点
Kubernetes(我们亲切地叫它k8s,因为它是那种喜欢用缩写的酷孩子)是一个编排大师,它决定哪些Pod应该去参加哪个Node节点的派对。但是,不是所有的Pod都是社交蝴蝶,有些可能只愿意和特定Node节点玩耍。那么,k8s如何做这个派对策划人呢?以下是几种让Pod们“挑剔”的方法:
1.节点选择器(NodeSelector):
想象一下,Node节点是各种口味的冰激凌车,而Pod是带着地图的小朋友,地图上画着他们想吃的冰激凌口味。nodeSelector就像是那个地图,告诉Pod:“嘿,你得去那个有‘disktype=ssd’口味的冰激凌车那里!”
1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
nodeSelector:
disktype: ssd
2.节点亲和性(Node Affinity):
这可比节点选择器复杂多了,它就像是Pod的高级味蕾。节点亲和性不仅说“我只要吃草莓味”,它还会说“我绝对不吃香草味”。如果你告诉它去找‘disktype=ssd’的节点,它就会像小狗寻找埋藏的骨头一样,直到找到为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
3.节点反亲和性(Node Anti-Affinity):
这是Pod的“反骨”期。如果Node节点带着‘disktype=hdd’这样的标签,Pod会像个叛逆少年一样说:“我才不要和你玩!”然后它会跑去寻找其他没有这种标签的Node节点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: NotIn
values:
- hdd
4.污点(Taints)和容忍度(Tolerations):
污点就像是Node节点上的“禁止入内”标志,只有真正胆大的Pod才会无视它。容忍度则是Pod的小本本,上面写着“我不怕你的标志,我有特殊通行证!”所以,即使Node节点挂出了“NoSchedule”的大牌子,有容忍度的Pod还是可以大摇大摆地走进去。
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
总之,k8s就像一个有着各种各样派对邀请函的聚会策划人。不管你是挑食的美食家,还是有特殊饮食要求的健身达人,k8s总有办法让你找到合适的派对——或者说,Node节点。
本文由作者按照 CC BY 4.0 进行授权