网站开发案例及分析,360网站建设服务器,东莞长安营销型网站建设,广西互联网企业Kubernetes#xff08;k8s#xff09;#xff1a;深入理解k8s中的亲和性#xff08;Affinity#xff09;及其在集群调度中的应用 1、什么是亲和性#xff1f;2、节点亲和性#xff08;Node Affinity#xff09;2.1 硬性节点亲和性规则#xff08;required#xff09;… Kubernetesk8s深入理解k8s中的亲和性Affinity及其在集群调度中的应用 1、什么是亲和性2、节点亲和性Node Affinity2.1 硬性节点亲和性规则required2.2 软性节点亲和性规则preferred 3、Pod亲和性Pod Affinity3.1 Pod硬性亲和性规则3.2 Pod软性亲和性规则 4、Pod 反亲和性Pod Anti-Affinity5、总结 The Begin点点关注收藏不迷路 在 KubernetesK8s集群中亲和性Affinity是一项强大的功能它允许我们通过标签选择器来指定 Pod 与节点或其他 Pod 之间的关系以影响调度决策。 在这篇博客中我们将深入探讨 Kubernetes 中的亲和性概念、不同类型的亲和性以及它们在集群调度中的应用。 1、什么是亲和性
在Kubernetes中亲和性是一种调度策略用于指定Pod倾向于被调度到具有特定属性的节点。亲和性分为两种类型 1、节点亲和性Node Affinity指定Pod倾向于被调度到具有特定标签或标签表达式的节点。 2、Pod亲和性Pod Affinity指定Pod倾向于与具有特定标签或标签表达式的其他Pod共存。 2、节点亲和性Node Affinity
节点亲和性允许我们指定 Pod 应该在哪些节点上运行。它可以根据节点的标签来决定 Pod 的调度位置。
节点亲和性规则可以是硬性的或软性的。硬性规则要求 Pod 必须在匹配的节点上运行而软性规则则更加宽松只是倾向于将 Pod 调度到符合条件的节点上。
2.1 硬性节点亲和性规则required 1、硬性规则指定了 Pod 必须被调度到满足规则条件的节点上否则 Pod 将无法被调度和启动。 例如可以使用硬性节点亲和性规则来确保 Pod 只能被调度到拥有特定标签的节点上。这在需要确保特定类型的节点才能运行某些任务时非常有用。 下面是一个示例 YAML 文件其中定义了一个 Pod并指定了硬性节点亲和性规则要求 Pod 只能被调度到具有标签为 “gputrue” 的节点上
apiVersion: v1
kind: Pod
metadata:name: nginx-pod # 定义 Pod 的名称为 nginx-pod
spec:containers:- name: nginx-container # 定义 Pod 中的容器名称为 nginx-containerimage: nginx:latest # 使用最新版本的 nginx 容器镜像affinity:nodeAffinity: # 指定节点亲和性规则requiredDuringSchedulingIgnoredDuringExecution: # 硬性节点亲和性规则要求在调度过程中必须满足条件nodeSelectorTerms: # 指定节点选择条件- matchExpressions: # 指定匹配表达式- key: gpu # 定义匹配表达式的键为 gpuoperator: In # 使用 In 操作符进行匹配values: # 定义匹配的值- true # 要求节点的标签中包含值为 true 的 gpu 标签
2.2 软性节点亲和性规则preferred 软性规则指定了 Pod 更倾向于被调度到满足规则条件的节点上但并不强制要求。 例如可以使用软性节点亲和性规则来指定 Pod 更倾向于被调度到某个特定区域的节点上以减少数据传输延迟。 下面是一个示例 YAML 文件其中定义了一个 Pod并指定了软性节点亲和性规则要求 Pod 更倾向于被调度到具有标签为 “zoneus-west” 的节点上
apiVersion: v1
kind: Pod
metadata:name: nginx-pod # Pod的名称
spec:containers:- name: nginx-container # 容器的名称image: nginx-image # 容器使用的镜像affinity:nodeAffinity: # 节点亲和性preferredDuringSchedulingIgnoredDuringExecution: # 在调度期间优先考虑但在执行期间被忽略- weight: 1 # 权重为1表示较高的优先级preference: # 优先选择的条件matchExpressions: # 匹配表达式列表- key: zone # 标签的键operator: In # 匹配操作符表示在值列表中的任何一个values:- us-west # 匹配的值为us-west3、Pod亲和性Pod Affinity
Pod 亲和性允许我们指定 Pod 应该与哪些其他 Pod 共同运行。它可以确保相关的服务或组件在同一节点或不同节点上运行以提高性能或可用性。与节点亲和性类似Pod 亲和性规则也可以是硬性的或软性的。
3.1 Pod硬性亲和性规则 硬性亲和性规则指定了 Pod 必须满足的条件如果这些条件不能满足Pod 将不会被调度到任何节点上。 以下是一个使用硬性亲和性规则的示例要求 Pod 只能被调度到具有 “zoneus-west” 和 “environmentproduction” 标签的节点上
apiVersion: v1 # 指定 Kubernetes API 版本
kind: Pod # 定义资源类型为 Pod
metadata:name: affinity-pod # 指定 Pod 的名称为 affinity-pod
spec:containers:- name: affinity-container # 定义 Pod 中的容器名称为 affinity-containerimage: affinity-image # 指定容器所使用的镜像为 affinity-imageaffinity: # 定义 Pod 的亲和性规则nodeAffinity: # 指定节点亲和性规则requiredDuringSchedulingIgnoredDuringExecution: # 指定为硬性节点亲和性规则nodeSelectorTerms: # 指定节点选择器条件- matchExpressions: # 指定匹配表达式- key: zone # 指定节点标签的键为 zoneoperator: In # 指定匹配操作符为 Invalues: # 指定匹配的值- us-west # 匹配值为 us-west- key: environment # 指定节点标签的键为 environmentoperator: In # 指定匹配操作符为 Invalues: # 指定匹配的值- production # 匹配值为 production
3.2 Pod软性亲和性规则 软性亲和性规则指定了 Pod 偏好的条件如果这些条件可以满足Pod 将会优先被调度到符合条件的节点上但如果无法满足Pod 仍然可以被调度到其他节点上。 以下是一个使用软性亲和性规则的示例要求 Pod 偏好被调度到具有 “zoneus-east” 或 “zoneus-west” 标签的节点上
apiVersion: v1 # 指定 Kubernetes API 版本
kind: Pod # 定义资源类型为 Pod
metadata:name: affinity-pod # 指定 Pod 的名称为 affinity-pod
spec:containers:- name: affinity-container # 定义 Pod 中的容器名称为 affinity-containerimage: affinity-image # 指定容器所使用的镜像为 affinity-imageaffinity: # 定义 Pod 的亲和性规则nodeAffinity: # 指定节点亲和性规则preferredDuringSchedulingIgnoredDuringExecution: # 指定为软性节点亲和性规则- weight: 1 # 指定权重为 1preference: # 指定偏好条件matchExpressions: # 指定匹配表达式- key: zone # 指定节点标签的键为 zoneoperator: In # 指定匹配操作符为 Invalues: # 指定匹配的值- us-east # 匹配值为 us-east- weight: 1 # 指定权重为 1preference: # 指定偏好条件matchExpressions: # 指定匹配表达式- key: zone # 指定节点标签的键为 zoneoperator: In # 指定匹配操作符为 Invalues: # 指定匹配的值- us-west # 匹配值为 us-west
4、Pod 反亲和性Pod Anti-Affinity Pod 反亲和性Pod Anti-Affinity是一种 Kubernetes 调度策略用于指定 Pod 不能被调度到与其他特定 Pod 相同的节点上。这有助于提高应用程序的可靠性和可用性避免将相互依赖或相互竞争的 Pod 部署在同一节点上。 以下是一个 Pod 反亲和性的示例 :
要求该 Pod 不能被调度到具有标签 appmy-app 的其他 Pod 所在的节点上。这样可以确保这两个相互关联的 Pod 不会被部署在同一节点上从而提高应用程序的可靠性。
apiVersion: v1 # 指定 Kubernetes API 版本
kind: Pod # 定义资源类型为 Pod
metadata:name: anti-affinity-pod # 指定 Pod 的名称为 anti-affinity-pod
spec:containers:- name: anti-affinity-container # 定义 Pod 中的容器名称为 anti-affinity-containerimage: anti-affinity-image # 指定容器所使用的镜像为 anti-affinity-imageaffinity: # 定义 Pod 的亲和性规则podAntiAffinity: # 指定 Pod 反亲和性规则requiredDuringSchedulingIgnoredDuringExecution: # 指定为硬性 Pod 反亲和性规则- labelSelector: # 指定标签选择器matchExpressions: # 指定匹配表达式- key: app # 指定标签的键为 appoperator: In # 指定匹配操作符为 Invalues: # 指定匹配的值- my-app # 匹配值为 my-app
5、总结 The End点点关注收藏不迷路