网站上的图片带店面是怎么做的,做网站手机验证收费吗,网站建设一定要备案吗,受欢迎的扬中网站建设文章目录 1. Node Affinity#xff08;节点亲和性#xff09;节点亲和性类型配置示例常见场景#xff1a; 2. Pod Affinity 和 Pod Anti-AffinityPod Affinity 配置示例Pod Anti-Affinity 配置示例常见场景#xff1a; 3. 亲和性规则概述4. 亲和性和反亲和性的细节5. 亲和性… 文章目录 1. Node Affinity节点亲和性节点亲和性类型配置示例常见场景 2. Pod Affinity 和 Pod Anti-AffinityPod Affinity 配置示例Pod Anti-Affinity 配置示例常见场景 3. 亲和性规则概述4. 亲和性和反亲和性的细节5. 亲和性配置的示例Pod 与 Node AffinityPod 与 Pod Affinity 总结 在 Kubernetes 中亲和性Affinity是一个强大的调度机制用于控制 Pod 调度到哪些节点或与哪些其他 Pods 一起运行。亲和性帮助你在 Kubernetes 集群中实现更灵活、更高效的资源调度支持多种不同的场景如负载均衡、资源隔离、容错等。
亲和性有两种类型
Node Affinity节点亲和性Pod Affinity 和 Pod Anti-AffinityPod 亲和性与反亲和性
1. Node Affinity节点亲和性
Node Affinity 用于约束 Pod 可以调度到哪些节点。它是 nodeSelector 的扩展提供了更灵活的匹配机制。通过设置节点亲和性Pod 可以根据节点的标签来选择适合的节点进行调度。
节点亲和性类型
Node Affinity 分为两种类型
requiredDuringSchedulingIgnoredDuringExecution在调度时必须满足的条件意味着如果节点不满足这些条件Pod 就无法调度到该节点。preferredDuringSchedulingIgnoredDuringExecution调度时尽量满足的条件但如果无法满足条件Pod 仍然会被调度到其他节点。
配置示例
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node-1- node-2preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: diskoperator: Invalues:- ssdrequiredDuringSchedulingIgnoredDuringExecution指定节点必须满足的条件。在这个例子中Pod 只能调度到 node-1 或 node-2 节点上。preferredDuringSchedulingIgnoredDuringExecution表示推荐的调度优先条件。在这个例子中节点如果具有 diskssd 标签会更倾向于调度但不是强制要求。
常见场景
资源约束需要特定硬件例如 GPU 或 SSD 硬盘的 Pod 必须调度到支持该硬件的节点。环境隔离将某些 Pods 部署到特定的可用区或区域例如将数据库 Pod 放到具有高内存节点的区域。
2. Pod Affinity 和 Pod Anti-Affinity
Pod Affinity 和 Pod Anti-Affinity 控制 Pod 如何与其他 Pods 一起调度。它们允许你根据其他 Pods 的位置来影响当前 Pod 的调度。 Pod AffinityPod 亲和性表示你希望某个 Pod 与其他特定 Pod 在同一节点上调度。例如如果你希望某些 Pods 共享同一个节点以便它们之间有低延迟的通信可以使用 Pod 亲和性。 Pod Anti-AffinityPod 反亲和性与 Pod 亲和性相反表示你希望某些 Pod 不与其他特定 Pod 在同一节点上调度。例如如果你希望某些 Pod 避免在同一节点上运行以确保高可用性或隔离性可以使用 Pod 反亲和性。
Pod Affinity 配置示例
affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: kubernetes.io/hostname这个例子表示如果节点上有 appmyapp 标签的 Pod则会优先调度当前 Pod 到同一节点上。topologyKey 是用来定义约束的范围kubernetes.io/hostname 表示节点级别的约束。
Pod Anti-Affinity 配置示例
affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: kubernetes.io/hostname这个例子表示如果节点上已经有 appmyapp 标签的 Pod新的 Pod 就不会被调度到该节点上。
常见场景 Pod Affinity 将需要高频通信的 Pods 部署到同一节点以减少网络延迟。例如在微服务架构中前端和后端服务可以被调度到相同节点上以提高通信效率。 Pod Anti-Affinity 确保多个副本的 Pods 不会被调度到同一节点以避免单点故障。例如确保多个数据库副本的 Pods 分布在不同的节点上以提高容错性。
3. 亲和性规则概述
亲和性规则的配置可以在 Pod 的 affinity 字段中指定通常包括以下几个部分
requiredDuringSchedulingIgnoredDuringExecution表示在 Pod 调度时必须满足的条件。可以用 nodeAffinity、podAffinity 或 podAntiAffinity 来定义。preferredDuringSchedulingIgnoredDuringExecution表示尽量满足的条件如果不满足也不会阻止调度但会影响调度优先级。topologyKey用于定义约束的范围例如使用 kubernetes.io/hostname 来指定节点级别的约束或者使用可用区等来实现跨区域调度。
4. 亲和性和反亲和性的细节 topologyKey决定了亲和性约束的范围。常见的 topologyKey 值有 kubernetes.io/hostname表示节点级别的亲和性。failure-domain.beta.kubernetes.io/zone表示区域级别的亲和性用于跨区域调度。topology.kubernetes.io/region表示区域级别的亲和性用于跨区域调度。 operator用于匹配条件的操作符常见的有 In匹配指定的值。NotIn排除指定的值。Exists仅匹配标签存在的节点或 Pod。DoesNotExist仅匹配标签不存在的节点或 Pod。
5. 亲和性配置的示例
Pod 与 Node Affinity
将一个 Pod 调度到具有特定标签的节点上
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues:- ssd这个例子要求 Pod 被调度到 disktypessd 的节点上。
Pod 与 Pod Affinity
将某个 Pod 调度到有特定标签的 Pod 所在的节点
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: kubernetes.io/hostname这个配置要求将 Pod 调度到与标签为 appmyapp 的 Pod 相同节点上。
总结
Kubernetes 中的亲和性Affinity机制提供了灵活的调度策略帮助我们实现更高效的资源利用、负载均衡、故障隔离等。通过结合 Node Affinity 和 Pod Affinity/Anti-Affinity你可以精细地控制 Pod 的调度行为满足不同应用场景的需求。