带你读《企业级云原生白皮书项目实战》——3.2.6 亲和性&污点容忍

简介: 带你读《企业级云原生白皮书项目实战》——3.2.6 亲和性&污点容忍

3.2.6 亲和性&污点容忍


nodeselctor

nodeSelector 是节点选择的最简单推荐形式。可以使用 nodeSelector 字段将pod调度到指定的节点标签的节点上。


亲和性和反亲和性

节点亲和性

有时候需要某一类别的pod根据业务需求部署到指定的节点池或者可用区,或者需要部署到指定标签的节点上,那么就需要使用节点的亲和性

•requiredDuringSchedulingIgnoredDuringExecution: 调度器只有在规则被满足的时候才能执行调度。

•preferredDuringSchedulingIgnoredDuringExecution: 调度器会优先尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。

•在上述类型中,IgnoredDuringExecution 意味着如果节点标签在 Kubernetes 调度 Pod 时发生了变更,Pod 仍将继续运行。

•同时指定了 nodeSelector 和 nodeAffiffiffinity,两者 必须都要满足, 才能将 Pod 调度到候选节点上。

•指定了多个与 nodeAffiffiffinity 类型关联的 nodeSelectorTerms, 只要其中一个 nodeSelectorTerms 满足的话,Pod 就可以被调度到节点上。

•指定了多个与同一 nodeSelectorTerms 关联的 matchExpressions, 则只有当所有 matchExpressions 都满足时 Pod 才可以被调度到节点上。

pod间亲和性

Pod 间亲和性与反亲和性使你可以基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到的节点,而不是基于节点上的标签,比如将两个服务的 Pod 放到同一个云提供商可用区内,因为它们彼此之间通信非常频繁 。

•Pod 间亲和性和反亲和性都需要相当的计算量,因此会在大规模集群中显著降低调度速度。 我们不建议在包含数百个节点的集群中使用这类设置。

•Pod 反亲和性需要节点上存在一致性的标签。


PDB

用户在常见的场景中,比如deployment,replicaset或者statefulset等场景需要保护pod的启停行为,比如不能降低服务能力的10%以上;单实例有状态应用不能在不通知的情况下终止pod;多实例多状态的应用可用数量不能小于仲裁数量;对于job类型,需要确保任务完成等。 minAvailable 或 maxUnavailable 的值可以表示为整数或百分比。 如果将值指定为百分比,则可能无法映射到确切数量的 Pod。 Kubernetes 采用向上取整到最接近的整数的办法,因此在这种情况下,必须有 4 个 Pod。 你可以检查控制此行为的 代码。

注意:

•policy/v1beta1 和 policy/v1 API 中 PodDisruptionBudget 的空选择算符的行为 略有不同。在 policy/v1beta1 中,空的选择算符不会匹配任何 Pods,而 policy/v1 中,空的选择算符会匹配名字空间中所有 Pods。

•PDB并不能真正保证指定数量/百分比的 Pod 一直处于运行状态。PDB只能够针对自发的驱逐提供保护,而不能针对所有 Pod 不可用的诱因。

污点和容忍

有时候由于节点上有重要的业务pod,我们给节点打上污点,需要这个节点不能被别的pod调度或者给业务pod打上容忍和亲和性,让业务pod指定到被打上污点的节点上。

tolerations:
- key: "key1"
 operator: "Equal"
 value: "value1"
effect: "NoSchedule"
 tolerations:
- key: "key1"
 operator: "Exists"
 effect: "NoSchedule"

•如果一个容忍度的 key 为空且 operator 为 Exists, 表示这个容忍度与任意的 key 、value 和 effffect 都匹配,即这个容忍度能容忍任意 taint。

如果 effffect 为空,则可以与所有键名 key1 的效果相匹配。

相关文章
|
6天前
|
Cloud Native 云计算 Docker
云原生之旅:从容器化到微服务架构
【9月更文挑战第27天】本文将引领读者进入云原生的世界,探索如何通过容器化技术实现应用的快速部署与扩展,并深入理解微服务架构的设计哲学。我们将一起见证代码如何转化为可在云端无缝运行的服务,同时讨论云原生生态中的最佳实践和面临的挑战。
|
3天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
13天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
2天前
|
Cloud Native 持续交付 Docker
云原生之旅:从容器到微服务的演变之路
【9月更文挑战第31天】在数字化转型的浪潮中,云原生技术如星辰般熠熠生辉。本文将带你探索云原生的核心——容器化与微服务架构,揭示它们如何共同推动现代软件开发的革命。通过深入浅出的语言和生动的比喻,我们将一起走进云原生的世界,理解它的魅力所在,并见证代码示例如何将理论转化为实践。
12 4
|
8天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
针对软件供应链的攻击事件在以每年三位数的速度激增,其中三方或开源软件已经成为攻击者关注的重要目标,其攻击方式和技术也在不断演进。通过供应链的传播,一个底层软件包的漏洞的影响范围可以波及世界。企业亟需更加标准和完善的供应链风险洞察和防护机制。本文将结合最佳实践的形式,面向容器应用完整的生命周期展示如何基于容器服务ACK/ACR/ASM助力企业构建云原生软件供应链安全。
|
1天前
|
负载均衡 Cloud Native 安全
云原生时代的开发者指南:从容器到服务网格
【9月更文挑战第32天】在云原生技术日益成为企业数字化转型的核心力量之际,了解其背后的理念与实践对于开发者而言至关重要。本文旨在通过浅显易懂的语言,为读者揭开云原生技术的神秘面纱,从容器化的基础谈起,逐步深入到服务网格的高级应用,带领开发者们在云原生的海洋中航行。
7 1
|
14天前
|
Kubernetes 监控 Cloud Native
云原生入门:从传统应用到容器化部署的旅程
【9月更文挑战第19天】在数字化浪潮中,企业正迅速将目光投向云原生技术,以实现更快的应用开发和更灵活的资源管理。本文将通过一个简单示例引导读者理解如何将传统应用转变为云原生应用,并部署至云端。我们将探索容器化技术的基础,以及它如何帮助企业解锁现代软件交付的速度和效率。准备好让你的应用乘上云原生的快车了吗?让我们开始这段令人兴奋的旅程吧!
|
12天前
|
运维 Cloud Native 开发者
云原生时代的容器化之旅
【9月更文挑战第21天】在数字化浪潮中,云原生技术如同一股清泉,为软件开发带来了前所未有的灵活性和效率。本文将深入浅出地探讨云原生的核心概念——容器化技术,通过实际代码示例,引领读者开启一段探索云原生世界的奇妙旅程。
|
8天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
27 4
|
8天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
今年是Kubernetes十周年,在这10年间。我们已经看到其成长为云原生操作系统,向下高效调度多种算力资源,屏蔽基础设施差异,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务产品已经覆盖了从公共云、边缘云、到本地数据中心的各个场景。让所有需要云能力的地方,都有统一的容器基础设施。
阿里云容器服务,智算时代云原生操作系统

热门文章

最新文章

下一篇
无影云桌面