企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ### **简介** Pod的亲和性可以设置的字段有三个:nodeAffinity、podAffinity和podAntiAffinity,如下: ``` apiVersion: v1 kind: Pod metadata: name: xxx spec: affinity: nodeAffinity: ... podAffinity: ... podAntiAffinity: ... containers: - image: xxxxx ``` ### **NodeAffinity** to be continued ### **PodAffinity** PodAffinity下面有两个字段: * preferredDuringSchedulingIgnoredDuringExecution:调度的时候,尽量调度到满足这个字段下面条件的主机上(或区域上) * requiredDuringSchedulingIgnoredDuringExecution:调度的时候,只能调度到满足这个字段下面条件的主机上(或区域上) 下面是一个示例: ``` apiVersion: v1 kind: Pod metadata: name: test spec: affinity: podAffinity: # 只能调度到这样的节点上:该节点上有一个Pod,该Pod有标签 app: nginx 或 app: mysql requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname labelSelector: matchExpressions: - key: app operator: In values: ["nginx", "mysql"] # 尽量调度到这样的节点上:该节点上有一个Pod,该Pod有标签 app: tomcat preferredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname labelSelector: matchLabels: app: tomcat ``` 上面的yaml文件中,有一个字段`topologyKey`,它表示如何对节点进行分组(即基于这个key对节点进行分组)。假设这个字段的值为`xxxx`,在调度这个Pod时,调度器先找到符合labelSelector条件的节点,假设符合条件的某个节点具有标签`xxxx: myvalue`,那么包含标签`xxxx: myvalue`的节点都符合调度条件。所以,`topologyKey: kubernetes.io/hostname`的效果就是,只要某个节点满足labelSelector的条件,那就可以调度到这个节点上;`topologyKey: kubernetes.io/os`的效果就是,只要某个操作系统的节点满足labelSelector的条件,就可以调度到这个操作系统的任意节点上。 ### **PodAntiAffinity** PodAntiAffinity也有上面的两个字段:preferredDuringSchedulingIgnoredDuringExecution和requiredDuringSchedulingIgnoredDuringExecution,内容是一样的。