📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

🍊 Kubernetes知识点之容忍:概述
在大型分布式系统中,Kubernetes 作为容器编排工具,其稳定性与可靠性至关重要。然而,在实际运行过程中,由于网络波动、资源不足或其他不可预见的因素,容器可能会遇到各种问题。为了确保系统的高可用性,Kubernetes 引入了“容忍”机制,它允许用户定义一系列规则,以应对这些潜在的问题。
容忍机制是 Kubernetes 中一个重要的概念,它允许用户指定当某些条件不满足时,Pod 应如何响应。例如,如果某个节点因为资源紧张而无法处理新的 Pod,容忍规则可以允许系统将 Pod 转移到其他节点,从而避免服务中断。
介绍 Kubernetes 知识点之容忍:概述 的必要性在于,它为用户提供了理解和应用容忍机制的基础。在分布式系统中,容忍规则能够显著提高系统的健壮性和容错能力。通过合理配置容忍,可以减少因节点故障或资源限制导致的 Pod 失效,确保服务的持续可用。
接下来,我们将深入探讨容忍的定义、作用以及其重要性。首先,我们将详细解释容忍的具体含义,包括其如何定义以及如何在 Kubernetes 中实现。随后,我们将阐述容忍在系统中的作用,例如如何帮助系统在遇到问题时进行自我修复。最后,我们将强调容忍的重要性,说明为什么它是构建高可用 Kubernetes 集群不可或缺的一部分。通过这些内容,读者将能够全面理解容忍机制,并在实际应用中发挥其优势。
🎉 Kubernetes中的容忍定义
在Kubernetes中,容忍(Toleration)是一种机制,它允许Pod在不符合某些节点条件的情况下仍然被调度到该节点上。容忍是节点亲和性(Node Affinity)和反亲和性(Pod Anti-Affinity)的补充,用于处理节点故障或维护等场景。
📝 容忍与Taints的关系
在Kubernetes中,节点可以设置Taints(污点),表示节点不希望某些Pod调度到该节点上。而容忍(Toleration)则是Pod用来接受这些Taints的声明。下面通过表格来对比Taints和Toleration:
| 特性 | Taints | Toleration |
|---|---|---|
| 定义 | 节点上的属性,表示节点不希望某些Pod调度到该节点上 | Pod上的属性,表示Pod可以容忍节点上的Taints |
| 作用 | 排除某些Pod调度到节点上 | 允许Pod调度到设置了Taints的节点上 |
| 设置者 | 节点管理员 | Pod创建者或管理员 |
📝 容忍的使用场景
- 节点维护:在节点进行维护时,可以设置Taints,然后通过容忍允许Pod在维护期间继续运行。
- 故障转移:在节点发生故障时,可以设置Taints,然后通过容忍将Pod转移到其他节点上。
- 资源亲和性:在需要特定资源时,可以设置Taints,然后通过容忍将Pod调度到具有这些资源的节点上。
📝 容忍的配置
容忍的配置可以通过Pod的spec.tolerations字段进行设置,下面是一个容忍的配置示例:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoSchedule"
在这个示例中,Pod可以容忍节点上存在key为node.kubernetes.io/unreachable的Taint,并且该Taint的效果为NoSchedule,表示Pod不会被调度到设置了该Taint的节点上。
🎉 资源亲和性、节点选择器、节点标签
资源亲和性(Resource Affinity)是Kubernetes中的一种机制,用于将Pod调度到具有特定资源的节点上。节点选择器(Node Selector)和节点标签(Node Label)是实现资源亲和性的关键组件。
📝 资源亲和性
资源亲和性包括Pod亲和性和Pod反亲和性:
- Pod亲和性:将具有相同亲和性的Pod调度到同一节点上。
- Pod反亲和性:将具有相反亲和性的Pod调度到不同节点上。
📝 节点选择器
节点选择器用于根据标签选择节点,将Pod调度到符合条件的节点上。节点选择器的配置可以通过Pod的spec.nodeSelector字段进行设置。
📝 节点标签
节点标签是节点上的属性,用于标识节点的特征。节点标签的配置可以通过节点配置文件进行设置。
🎉 Pod调度策略
Pod调度策略是Kubernetes中的一种机制,用于决定Pod应该调度到哪个节点上。Kubernetes提供了多种调度策略,包括:
- 默认调度策略:根据节点的资源使用情况和Pod的优先级进行调度。
- 基于亲和性的调度策略:根据Pod的亲和性和反亲和性进行调度。
- 基于资源需求的调度策略:根据Pod的资源需求进行调度。
🎉 集群稳定性
集群稳定性是Kubernetes集群运行的关键指标。容忍、资源亲和性、节点选择器、节点标签和Pod调度策略等机制共同保证了集群的稳定性。
🎉 资源分配
资源分配是Kubernetes中的一种机制,用于将节点上的资源分配给Pod。Kubernetes通过CPU、内存等资源限制和请求来控制Pod的资源分配。
🎉 故障转移
故障转移是Kubernetes中的一种机制,用于在节点发生故障时将Pod转移到其他节点上。容忍、资源亲和性、节点选择器、节点标签和Pod调度策略等机制共同保证了故障转移的顺利进行。
🎉 Kubernetes容忍机制:作用与原理
📝 资源亲和性
在Kubernetes中,资源亲和性是指Pod对某些资源的偏好,例如对特定节点的偏好。资源亲和性可以帮助Pod更好地调度到合适的节点上,提高集群的稳定性和性能。
| 资源类型 | 亲和性类型 | 作用 |
|---|---|---|
| 节点亲和性 | 忍容 | 避免Pod调度到不满足条件的节点上 |
| pod亲和性 | 忍容 | 避免Pod与特定Pod调度到同一节点上 |
| 互斥亲和性 | 忍容 | 确保特定Pod不会调度到同一节点上 |
📝 节点选择策略
节点选择策略是Kubernetes调度器在调度Pod时,根据一系列规则选择最合适的节点。容忍机制在节点选择策略中扮演着重要角色。
| 策略类型 | 作用 |
|---|---|
| 忍容 | 避免Pod调度到不满足条件的节点上 |
| 忍容优先级 | 优先调度满足条件的节点 |
| 忍容最大值 | 限制Pod在节点上的最大容忍数 |
📝 调度器配置
Kubernetes调度器配置中,容忍机制可以通过以下参数进行设置:
tolerations: 用于定义Pod在节点上的容忍条件。tolerationSeconds: 用于设置容忍条件的时间限制。
tolerations:
- key: "node-role.kubernetes.io/master"
effect: "NoSchedule"
tolerationSeconds: 3600
📝 集群稳定性
容忍机制有助于提高集群的稳定性。通过设置合理的容忍条件,可以避免Pod调度到不满足条件的节点上,从而减少节点故障对集群的影响。
📝 故障恢复
容忍机制在故障恢复过程中也发挥着重要作用。当节点出现故障时,容忍机制可以确保Pod不会继续调度到该节点上,从而避免故障扩散。
📝 性能优化
容忍机制有助于提高集群性能。通过合理设置容忍条件,可以确保Pod调度到资源充足的节点上,从而提高Pod的运行效率。
🎉 作用原理
Kubernetes容忍机制的作用原理如下:
- 当Pod尝试调度到节点时,调度器会检查节点上的容忍条件是否满足Pod的容忍条件。
- 如果节点上的容忍条件满足Pod的容忍条件,则Pod可以调度到该节点上。
- 如果节点上的容忍条件不满足Pod的容忍条件,则Pod不会被调度到该节点上。
通过这种方式,容忍机制可以确保Pod在满足特定条件的情况下调度到合适的节点上,从而提高集群的稳定性和性能。
🎉 Kubernetes容忍机制的重要性
在Kubernetes中,容忍(Toleration)是一种机制,它允许节点上的某些条件(如资源不足、节点不可用等)被忽略,从而使得Pod能够在这些节点上运行。容忍机制的重要性体现在以下几个方面:
📝 概念解释
容忍是一种标记,它允许Pod在不符合某些节点条件的情况下继续运行。例如,如果一个节点因为资源不足而处于不可用状态,如果没有容忍机制,那么所有Pod都会被驱逐出该节点。通过设置容忍,Pod可以继续在该节点上运行,直到满足以下条件之一:
- Pod被删除。
- 节点条件得到解决。
📝 应用场景
- 资源不足:当节点上的资源(如CPU、内存)不足时,容忍机制允许Pod继续运行,直到资源得到释放。
- 节点维护:在节点维护期间,容忍机制可以确保Pod不会因为节点不可用而被驱逐。
- 故障节点:容忍机制可以帮助Pod在故障节点上继续运行,直到节点恢复正常或Pod被删除。
📝 配置方法
在Kubernetes中,容忍可以通过以下方式配置:
tolerations:
- effect: "NoSchedule"
key: "node.kubernetes.io/unreachable"
operator: "Exists"
tolerationSeconds: 3600
这个配置表示,如果节点标记为不可达(node.kubernetes.io/unreachable),则Pod可以继续在该节点上运行,容忍时间为1小时。
📝 最佳实践
- 合理设置容忍时间:容忍时间应根据实际情况设置,过长可能导致Pod长时间运行在问题节点上,过短可能导致Pod频繁重启。
- 避免过度使用容忍:容忍应该谨慎使用,避免过度依赖,以免影响集群的稳定性和性能。
- 定期检查容忍配置:定期检查容忍配置,确保其符合实际需求。
📝 性能影响
容忍机制对性能的影响取决于容忍的设置和Pod的数量。合理配置容忍可以减少Pod重启次数,提高集群的稳定性。但过度使用容忍可能导致资源浪费和性能下降。
📝 故障处理
当节点出现问题时,容忍机制可以帮助Pod继续运行。但以下情况仍需处理:
- 节点维护:如果节点需要维护,应确保所有Pod被迁移到其他节点。
- 资源不足:如果节点资源不足,应考虑增加资源或优化Pod配置。
📝 与其他资源配额的关系
容忍机制与资源配额(Resource Quotas)没有直接关系。资源配额用于限制节点上的资源使用量,而容忍机制用于允许Pod在不符合节点条件的情况下运行。
📝 与节点亲和性的区别
节点亲和性(Node Affinity)和容忍机制都是用于控制Pod在节点上的调度。但它们的目的不同:
- 节点亲和性:确保Pod调度到具有特定标签的节点上。
- 容忍机制:允许Pod在不符合节点条件的情况下运行。
总结来说,容忍机制在Kubernetes中扮演着重要的角色,它可以帮助Pod在节点出现问题时继续运行,提高集群的稳定性和可用性。在实际应用中,应根据实际情况合理配置容忍,以确保集群的稳定运行。
🍊 Kubernetes知识点之容忍:类型
在Kubernetes集群中,资源调度和故障处理是保证系统稳定运行的关键环节。假设我们正在维护一个大规模的分布式系统,其中包含多个服务部署在多个节点上。在这样一个复杂的系统中,节点故障或资源不足的情况时有发生。为了确保服务能够持续运行,我们需要对这种异常情况进行处理,这就引出了Kubernetes中的“容忍”概念。
容忍(Toleration)是Kubernetes中用于处理节点或Pod上出现的不兼容条件的一种机制。当节点或Pod遇到某些不兼容条件时,容忍允许它们继续运行,而不是立即被驱逐。例如,如果某个节点因为硬件故障而变得不稳定,容忍可以帮助Pod继续在该节点上运行,直到可以安全地将其迁移到其他节点。
介绍Kubernetes知识点之容忍:类型的重要性在于,它能够帮助我们更好地理解和配置容忍策略,从而提高集群的可靠性和可用性。容忍类型主要分为节点级容忍和Pod级容忍,它们分别针对节点和Pod上的不兼容条件进行配置。
接下来,我们将详细探讨节点级容忍和Pod级容忍的定义、示例以及如何在实际场景中应用这些容忍策略。首先,我们会介绍节点级容忍,它主要关注节点层面的不兼容条件,如节点资源不足、节点不可用等。然后,我们会深入解析节点级容忍的具体定义,并通过实际示例展示如何配置和使用节点级容忍。随后,我们将转向Pod级容忍,讨论其在Pod层面上的应用,包括Pod资源不足、Pod配置错误等情况的处理。同样,我们会提供具体的定义和示例,帮助读者理解Pod级容忍的配置和使用方法。
通过这些详细的介绍,读者将能够建立起对Kubernetes容忍机制的整体认知,并学会如何根据实际需求配置合适的容忍策略,以确保集群的稳定性和服务的连续性。
🎉 节点级容忍概述
在 Kubernetes 中,节点级容忍(Node-Level Tolerance)是一种重要的调度策略,它允许用户定义一系列规则,以决定 Pod 在哪些节点上可以运行,以及如何处理那些不符合预期条件的节点。节点级容忍是 Kubernetes 调度器(Scheduler)的一部分,它帮助调度器做出更智能的决策。
🎉 节点级容忍与调度策略
节点级容忍与调度策略紧密相关。调度器在为 Pod 选择节点时,会考虑节点的各种属性,包括资源、标签、亲和性、排斥性等。节点级容忍则是在这些属性的基础上,进一步细化了调度决策。
📝 对比与列举:节点级容忍与调度策略的关系
| 调度策略 | 节点级容忍 |
|---|---|
| 资源亲和性 | 指定 Pod 需要运行在具有特定资源的节点上 |
| 节点亲和性 | 指定 Pod 需要运行在具有特定标签的节点上 |
| 节点排斥 | 指定 Pod 不能运行在具有特定标签的节点上 |
| 节点资源限制 | 指定节点上可用的资源量 |
| 节点状态 | 指定 Pod 可以运行在特定状态的节点上,如 Ready、NotReady 等 |
| 节点维护 | 指定 Pod 可以运行在维护状态的节点上 |
| 容忍配置 | 指定 Pod 可以容忍节点上的某些条件,如资源不足、节点故障等 |
| 容忍优先级 | 指定容忍规则的优先级,以决定调度器如何处理冲突的容忍规则 |
| 容忍应用场景 | 指定容忍规则适用于哪些场景,如临时故障、资源紧张等 |
🎉 节点级容忍配置
节点级容忍配置是通过 Kubernetes API 实现的。以下是一个简单的节点级容忍配置示例:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoSchedule"
在这个示例中,调度器会忽略那些标记为“unreachable”的节点,因为这些节点可能无法正常通信。
🎉 节点级容忍优先级
在多个节点级容忍规则冲突的情况下,调度器会根据容忍规则的优先级来决定如何处理。以下是一个容忍规则优先级的示例:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoSchedule"
priority: 1
- key: "node.kubernetes.io/unschedulable"
operator: "Exists"
effect: "NoSchedule"
priority: 2
在这个示例中,如果节点同时标记为“unreachable”和“unschedulable”,调度器会优先考虑“unschedulable”的规则。
🎉 节点级容忍应用场景
节点级容忍在以下场景中非常有用:
- 临时故障处理:当节点出现临时故障时,调度器可以忽略这些节点,从而避免 Pod 调度失败。
- 资源紧张处理:在资源紧张的情况下,调度器可以优先调度对资源要求较低的 Pod,从而提高资源利用率。
- 节点维护处理:在节点维护期间,调度器可以避免将 Pod 调度到这些节点上,从而确保维护工作的顺利进行。
🎉 总结
节点级容忍是 Kubernetes 调度策略的重要组成部分,它帮助调度器做出更智能的决策。通过合理配置节点级容忍,可以有效地提高 Pod 的调度成功率,并确保集群的稳定运行。
🎉 节点级容忍:定义
在 Kubernetes 中,节点级容忍(Node-Level Tolerance)是一种重要的调度策略,它允许工作负载在特定的节点上运行,即使这些节点存在某些问题或资源限制。下面,我们将深入探讨节点级容忍的定义及其相关概念。
📝 节点级容忍与节点选择
节点级容忍与节点选择紧密相关。在 Kubernetes 中,工作负载的调度过程会考虑多个因素,包括节点资源、节点标签、节点亲和性等。节点级容忍则是在这些因素的基础上,进一步细化节点选择策略。
| 对比项 | 节点资源 | 节点标签 | 节点亲和性 | 节点级容忍 |
|---|---|---|---|---|
| 作用 | 确定节点是否有足够的资源来运行工作负载 | 确定工作负载是否可以运行在具有特定标签的节点上 | 确定工作负载是否应该运行在具有特定亲和性的节点上 | 允许工作负载在存在问题的节点上运行 |
| 关键点 | 节点资源限制 | 节点标签匹配 | 亲和性规则 | 容忍值设置 |
📝 节点级容忍机制
节点级容忍机制主要包括以下几个方面:
- 容忍条件:定义了哪些问题或资源限制可以被容忍。例如,节点磁盘空间不足、节点网络延迟高等。
- 容忍值设置:为每个容忍条件设置一个容忍值,表示容忍该条件达到何种程度。例如,容忍节点磁盘空间不足 10%。
- 容忍优先级:在存在多个容忍条件时,根据优先级决定哪个条件应该被优先考虑。
📝 节点级容忍效果
节点级容忍可以带来以下效果:
- 提高资源利用率:允许工作负载在存在问题的节点上运行,从而提高资源利用率。
- 降低调度延迟:在节点资源紧张的情况下,节点级容忍可以加快工作负载的调度速度。
- 提高系统稳定性:通过容忍节点级问题,可以降低系统因节点故障而导致的整体稳定性问题。
📝 节点级容忍应用场景
以下是一些节点级容忍的应用场景:
- 临时性问题:例如,节点网络延迟暂时性升高,但不会对工作负载造成严重影响。
- 资源限制:例如,节点磁盘空间不足,但工作负载对磁盘空间的需求不高。
- 节点维护:在节点进行维护操作时,允许部分工作负载继续在该节点上运行。
总之,节点级容忍是 Kubernetes 中一种重要的调度策略,它可以帮助我们更好地利用资源,提高系统稳定性。在实际应用中,我们需要根据具体场景和需求,合理设置容忍条件和容忍值,以达到最佳效果。
🎉 Kubernetes 节点级容忍:示例
在 Kubernetes 中,节点级容忍(Node-Level Tolerance)是一种重要的资源管理策略,它允许你定义一组规则,以决定 Pod 在哪些节点上可以运行,即使这些节点不符合 Pod 的节点选择器(Node Selector)或节点资源限制(Node Resource Limits)。
📝 节点选择器与节点资源限制
节点选择器(Node Selector)是一种标签选择机制,它允许你指定 Pod 应该运行在哪些节点上。例如,你可以根据节点的 CPU、内存或特定标签来选择节点。
节点资源限制(Node Resource Limits)则定义了节点可以提供给 Pod 的资源量,如 CPU、内存等。
📝 节点状态与节点维护
节点状态(Node Status)包括节点的运行状态、资源使用情况等。节点维护(Node Maintenance)是指对节点进行升级、修复等操作。
📝 节点故障处理
当节点出现故障时,需要及时处理,以避免影响 Pod 的正常运行。
📝 容忍配置文件
容忍配置文件(Toleration Configuration File)定义了容忍策略,包括容忍哪些节点条件、容忍的持续时间等。
📝 容忍应用场景
容忍策略在以下场景中非常有用:
- 节点维护:在节点维护期间,允许 Pod 继续运行在节点上。
- 资源不足:当节点资源不足时,允许 Pod 继续运行,直到资源可用。
- 节点故障:在节点故障期间,允许 Pod 继续运行。
📝 容忍效果评估
容忍策略的效果可以通过以下指标进行评估:
- Pod 运行成功率:容忍策略是否提高了 Pod 的运行成功率。
- 节点资源利用率:容忍策略是否提高了节点资源的利用率。
- 系统稳定性:容忍策略是否提高了系统的稳定性。
🎉 示例:容忍配置文件
以下是一个容忍配置文件的示例:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoSchedule"
tolerationSeconds: 3600
在这个示例中,容忍了节点不可达(unreachable)的情况,并且设置了容忍的持续时间为 3600 秒(1 小时)。
🎉 节点级容忍示例
以下是一个节点级容忍的示例:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
nodeSelector:
kubernetes.io/role: master
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoSchedule"
tolerationSeconds: 3600
在这个示例中,Pod 被调度到具有标签 kubernetes.io/role: master 的节点上,并且容忍了节点不可达的情况。这意味着即使节点不可达,Pod 也可以继续运行在该节点上,直到容忍的持续时间结束。
🎉 Pod级容忍
在 Kubernetes 中,Pod 级容忍是用于处理节点故障或资源不足时,Pod 如何响应的一种机制。它允许用户定义一系列规则,当 Pod 被调度到某个节点时,如果该节点出现某些不满足条件的情况,Pod 可以采取相应的行动。
📝 容忍定义
容忍(Toleration)是 Kubernetes 中的一种机制,它允许 Pod 在某些不满足期望的节点上运行。容忍定义了 Pod 可以容忍的节点条件,以及容忍的持续时间。
📝 容忍类型
容忍的类型主要包括以下几种:
| 类型 | 描述 |
|---|---|
| NoExecute | 当节点条件被标记为容忍时,Pod 将不会被调度到该节点。 |
| NoSchedule | 当节点条件被标记为容忍时,Pod 将不会被调度到该节点。 |
| NoEviction | 当节点条件被标记为容忍时,Pod 将不会被从该节点驱逐。 |
📝 容忍级别
容忍级别分为以下几种:

最低0.47元/天 解锁文章
1963

被折叠的 条评论
为什么被折叠?



