K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(下)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文全面探讨了Kubernetes集群中Pod的四种关键机制——Pod亲和性、污点(Taints)、容忍度(Tolerations)、生命周期以及健康探测,为读者提供了深入理解并有效应用这些特性的指南。

 

image.gif 编辑

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

五、健康探测

1、健康探测的概念

2、Pod启动探测(Startup Probe)

3、Pod存活探测(Liveness Probe)

4、Pod就绪探测(Readiness Probe)

5、Pod健康探测在故障转移与扩缩容中的应用

六、总结

1、Pod亲和性、污点、容忍度、生命周期与健康探测

2、如何更好地利用这些特性优化Kubernetes集群的性能与稳定性


五、健康探测

1、健康探测的概念

Pod健康探测是 Kubernetes 中一种用于监测容器内应用程序状态的机制。通过健康探测,Kubernetes 可以了解容器内应用程序的运行情况,并在应用程序出现故障或不健康状态时采取适当的措施。

Pod健康探测通常包括以下三种类型:

  • 存活探测(Liveness Probe)
  • 就绪探测(Readiness Probe)
  • 启动探测(Startup Probe)

image.gif 编辑

2、Pod启动探测(Startup Probe)

Pod启动探测(Startup Probe)是一种用于检测容器内应用程序是否已经启动的探测机制。与存活探测(Liveness Probe)不同,启动探测只在容器启动时执行一次,并且仅在探测成功后才会开始执行存活探测。这有助于在应用程序启动期间等待一段时间,以确保应用程序已经完全启动。

示例:

startupProbe:

 exec:

   command:

   - cat

   - /tmp/ready

 failureThreshold: 30

 periodSeconds: 10

在上面的示例中,

exec 指定了一个执行命令的探测方式,它会定期执行 cat /tmp/ready 命令来检查应用程序是否已经启动。如果命令的退出状态为0,则认为启动探测成功。

failureThreshold 指定了失败阈值,表示如果连续失败的次数达到了指定的阈值,就认为启动探测失败。

periodSeconds 指定了探测之间的间隔时间。

※启动探测通常用于确保应用程序在容器启动后已经准备就绪,以避免将流量引导到尚未完全启动的应用程序上。

image.gif 编辑

3、Pod存活探测(Liveness Probe)

存活探测用于检测容器内的应用程序是否正在运行。如果存活探测失败,Kubernetes 将重启容器,以尝试恢复应用程序的运行状态。存活探测通常通过发送定期的 HTTP 请求或执行应用程序特定的命令来实现。

示例:

1. HTTP GET 探测Kubernetes 将定期向容器发送 HTTP GET 请求,并检查响应的状态码。如果状态码不在指定的成功范围内(通常为200到399),则认为存活探测失败。

livenessProbe:

 httpGet:

   path: /healthz

   port: 8080

 initialDelaySeconds: 15

 periodSeconds: 10

上面的 livenessProbe 使用了 httpGet 作为检查机制,意味着它将向容器发送HTTP GET请求来检查容器的存活状态。

  • path: /healthz:这指定了HTTP请求的路径,即容器应该提供一个在/healthz路径上的端点来响应探针的检查。这个端点通常是一个轻量级的检查,可以快速返回容器的健康状态。
  • port: 8080:这指定了HTTP请求应该发送到容器的哪个端口。在这个例子中,探针将向容器的8080端口发送请求。
  • initialDelaySeconds: 15:容器启动后,将等待15秒才开始执行存活探针检查。这对于那些需要一些时间来启动和初始化的容器非常有用,确保在容器准备好之前不会进行任何不必要的重启。
  • periodSeconds: 10:这指定了探针检查的频率,即每10秒执行一次存活探针检查。如果容器在连续几次检查中没有响应,Kubernetes将认为容器已经死亡,并重新启动它。

image.gif 编辑

2. TCP 探测Kubernetes 将尝试建立 TCP 连接到容器的指定端口。如果连接失败,则认为存活探测失败。

livenessProbe:

 tcpSocket:

   port: 3306

 initialDelaySeconds: 15

 periodSeconds: 10

  • tcpSocket: 指示Kubernetes使用TCP套接字作为检查方法。
  • port: 3306: 指定了TCP连接应该尝试连接到的端口号。在这个例子中,探针将尝试连接到容器的3306端口,这通常是MySQL数据库的默认端口。
  • initialDelaySeconds: 15: 容器启动后,将等待15秒才开始执行存活探针检查。这对于那些需要一些时间来启动和初始化的容器(如数据库服务)特别有用。
  • periodSeconds: 10: 这指定了探针检查的频率,即每10秒执行一次存活探针检查。如果在这段时间内探针无法建立到指定端口的TCP连接,则Kubernetes会认为容器已经死亡,并尝试根据重启策略重启容器。

3. 执行命令探测:Kubernetes 将定期执行容器内指定的命令,并检查命令的退出状态。如果退出状态不为0,则认为存活探测失败。

livenessProbe:

 exec:

   command:

   - cat

   - /tmp/healthy

 initialDelaySeconds: 15

 periodSeconds: 10

  • exec: 指示Kubernetes执行一个命令来检查容器的存活状态。
  • command: 指定要执行的命令及其参数。在这个例子中,命令是 cat /tmp/healthy,这意味着探针将尝试在容器内部执行 cat 命令来读取 /tmp/healthy 文件的内容。如果文件存在且可读,cat 命令将成功执行,探针会认为容器是存活的。
  • initialDelaySeconds: 15: 容器启动后,将等待15秒才开始执行存活探针检查。这允许容器有足够的时间来完成启动和初始化过程。
  • periodSeconds: 10: 这指定了探针检查的频率,即每10秒执行一次存活探针检查。如果命令执行失败(例如,文件不存在或不可读),则Kubernetes会认为容器已经死亡,并尝试根据重启策略重启容器。

image.gif 编辑

4、Pod就绪探测(Readiness Probe)

Pod就绪探测(Readiness Probe)是一种用于检测容器内应用程序是否已经准备好接受流量的探测机制。当就绪探测失败时,Kubernetes不会将流量发送到该容器。这有助于确保只有在容器已经完全启动并且应用程序已经准备好处理流量时,才将流量引导到该容器上。

readinessProbe:

 httpGet:

   path: /healthz

   port: 8080

 initialDelaySeconds: 5

 periodSeconds: 10

在上面的示例中,

httpGet 指定了一个HTTP GET请求的探测方式,它会定期发送一个请求到容器内的 /healthz 路径,并检查返回的状态码是否为200。如果状态码为200,则认为就绪探测成功。

initialDelaySeconds 指定了容器启动后首次执行探测之前的等待时间。

periodSeconds 指定了探测之间的间隔时间。

※就绪探测通常用于确保应用程序已经完成启动并且已经加载了所有必要的资源,以便正确处理流量。

5、Pod健康探测在故障转移与扩缩容中的应用

Pod健康探测在故障转移与扩缩容中起着关键作用。通过定期检查容器内应用程序的健康状态,健康探测可以及时发现应用程序是否处于可用状态,从而在故障发生时进行快速的故障转移或者触发自动扩缩容。

  1. 故障转移(Failover): 当健康探测检测到某个容器内应用程序的健康状态异常时,Kubernetes会将该容器标记为不健康,并且会立即停止向该容器发送流量。然后,Kubernetes会自动将新的副本启动在其他健康的节点上,以确保应用程序的高可用性。
  2. 扩缩容(Autoscaling): 在自动扩缩容的情况下,健康探测可以根据应用程序的负载情况来动态调整Pod的副本数量。如果健康探测检测到应用程序的负载过高或过低,可以触发自动扩缩容机制,从而增加或减少Pod的副本数量,以满足应用程序的需求。

image.gif 编辑

六、总结

1、Pod亲和性、污点、容忍度、生命周期与健康探测

  1. Pod亲和性(Pod Affinity): 用于指定Pod之间的关系,例如让相关的Pod尽可能地被调度到同一节点,或者避免相关的Pod被调度到同一节点。这可以通过节点标签和Pod标签之间的匹配规则来实现。
  2. Pod污点(Pod Taints): 用于在节点上设置污点,限制哪些Pod可以被调度到该节点。Pod需要具有与节点污点匹配的容忍度,才能被调度到该节点上。
  3. Pod容忍度(Pod Tolerations): 用于指定Pod对节点污点的容忍程度。Pod可以设置容忍度来匹配节点的污点,以确保Pod可以被调度到带有特定污点的节点上。
  4. Pod生命周期与健康探测(Pod Lifecycle and Probes): Pod生命周期包括启动、运行和终止三个阶段。健康探测用于在运行阶段监视Pod内应用程序的健康状态,并在必要时触发故障转移或扩缩容。健康探测包括存活探测(Liveness Probe)、就绪探测(Readiness Probe)和启动探测(Startup Probe)。

image.gif 编辑

2、如何更好地利用这些特性优化Kubernetes集群的性能与稳定性

  1. 合理规划节点资源: 根据应用程序的需求和性能特征,合理规划节点的资源配置,包括 CPU、内存、存储等,以确保集群中的每个节点都能够满足应用程序的需求,并避免资源过度分配或不足的情况。
  2. 优化调度策略: 利用Pod亲和性和反亲和性、污点和容忍度等特性,优化调度策略,将相关的Pod调度到同一节点,避免节点资源浪费和通信延迟,同时保证Pod之间的隔离性。
  3. 健康探测与自动故障恢复: 配置适当的存活探测和就绪探测,监控Pod的健康状态,并实现自动故障转移和恢复。当Pod发生故障时,Kubernetes可以及时将其重新调度到健康的节点上,保证应用程序的可用性和稳定性。
  4. 优化存储和网络性能: 针对存储和网络性能瓶颈,选择合适的存储和网络方案,例如使用高性能存储卷、网络策略和服务网格等,以提升集群的性能和稳定性。
  5. 监控与调优: 定期监控集群的性能和健康状况,及时发现和解决问题,调优资源分配、调度策略和健康探测配置,以不断优化集群的性能和稳定性。

image.gif 编辑

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
Kubernetes 网络协议 调度
kubernetes最小调度单元pod详解(二)
kubernetes最小调度单元pod详解(二)
|
2天前
|
Kubernetes 应用服务中间件 调度
kubernetes最小调度单元pod详解(一)
kubernetes最小调度单元pod详解(一)
|
18天前
|
Kubernetes 固态存储 调度
Kubernetes节点亲和性分配Pod
Kubernetes节点亲和性分配Pod
30 0
Kubernetes节点亲和性分配Pod
|
18天前
|
存储 Kubernetes 调度
Kubernetes Pod生命周期
Kubernetes Pod生命周期
29 0
Kubernetes Pod生命周期
|
18天前
|
存储 Kubernetes 应用服务中间件
Kubernetes Pod
Kubernetes Pod
55 0
Kubernetes Pod
|
4天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
7天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
8天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
|
18天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第12天】在微服务架构日益普及的当下,Kubernetes 作为容器编排的事实标准,承载着运行和管理大量服务的重要职责。本文将深入探讨 Kubernetes 集群的监控要点,并提出一系列切实可行的维护策略,旨在帮助运维人员确保集群的稳定性和性能优化。
|
26天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
17 0
什么是 SAP HANA 内存数据库 的 Delta Storage

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多