背景
最近在测试亲和和反亲和,发现很多知识都遗忘了,准备重新捡起来看看。
Pod和Node
从pod出发,可以分成亲和性和反亲和性,分别对应podAffinity
和podAntiAffinity
。
从node出发,也可以分成亲和性和反亲和性,分别对应nodeAffinity
和nodeAntiAffinity
。
从操作指令来讲,可以有In
、NotIn
、Exists
、DoesNotExist
等等。
- 那么针对亲和性来讲,in代表我要调度到有这个标签的位置。
- 那么针对反亲和性来讲,in代表我不要调度到有这个标签的位置。
结论:反亲和和亲和的in和notin操作是完全相反的,注意一下就行了。
硬亲和和软亲和
preferredDuringSchedulingIgnoredDuringExecution
软亲和
requiredDuringSchedulingIgnoredDuringExecution
硬亲和
不必过多讲解,反正就是必须和尽量的关系。
代码样例
下面代表我的pod不调度到pod拥有release=opsnatmonitor-v1
标签的node上.
1 | spec: |
下面代表我的pod要调度到pod拥有release=opsnatmonitor-v1
标签的node上.
1 | spec: |
最后补充
场景: pod有3个,node有2个,分别测试硬亲和和软亲和结果。
结果:
硬亲和会分别调度到两个node上,并有一个pod是pending的。
软亲和会按照pod个数为1:2分配到两个node上。