带你读《企业级云原生白皮书项目实战》——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 的效果相匹配。

相关文章
|
13天前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
29天前
|
Cloud Native 云计算 Docker
云原生之旅:从容器化到微服务架构
【9月更文挑战第27天】本文将引领读者进入云原生的世界,探索如何通过容器化技术实现应用的快速部署与扩展,并深入理解微服务架构的设计哲学。我们将一起见证代码如何转化为可在云端无缝运行的服务,同时讨论云原生生态中的最佳实践和面临的挑战。
|
2天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
8天前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
9天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
13天前
|
Kubernetes Cloud Native 云计算
云原生之旅:构建你的第一个容器化应用
【8月更文挑战第75天】在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键动力。本篇文章将引导你开启云原生之旅,通过一个简易的步骤指南,帮助你构建并部署第一个容器化应用。我们将一起探索Docker容器的魅力,以及如何利用Kubernetes进行集群管理,实现服务的自动化部署、扩展和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供实践操作的启示和深入思考的契机。
|
17天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
17天前
|
运维 监控 Cloud Native
云原生之旅:从容器到微服务的演进之路
本文将引导您踏上云原生技术的探索之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。我们将一起揭开云原生的神秘面纱,探索它如何改变现代软件的开发、部署和运维方式。通过本文,您将获得对云原生技术基础的深刻理解,并激发您进一步探索和应用这些前沿技术的兴趣和灵感。
|
17天前
|
运维 Kubernetes Cloud Native
云原生之旅:从容器化到微服务架构的演进之路
在数字化转型的浪潮中,云原生技术如同一股清流,为现代软件开发和运维带来革命性的变化。本文将通过深入浅出的方式,探索云原生的核心概念、关键技术以及它们如何共同塑造了今天的云基础设施和服务模式。我们将一起走进云原生的世界,了解它如何影响应用程序的设计、部署和扩展,并揭示这一趋势背后的哲学和实践。
26 1
|
23天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。