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

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

🏅个人专栏:《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)

 

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 指定了探测之间的间隔时间。

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

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将认为容器已经死亡,并重新启动它。

 

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会认为容器已经死亡,并尝试根据重启策略重启容器。

 

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的副本数量,以满足应用程序的需求。

六、总结

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)。

 

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508593.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Portainer中创建Nginx服务并搭建静态站点实现公网访问本地网站

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

VTK 简介

VTK 简介 VTK 简介什么是 VTK?VTK 能做什么?VTK 的基本组成VTK 的框架结构VTK 的数据结构VTK 的可视化流程参考 VTK 简介 什么是 VTK? VTK,全称是Visualization Toolkit,即可视化工具包。是一个开源、跨平台、可自由…

OpenHarmony实战开发-image、image-animator组件的使用。

介绍 OpenHarmony提供了常用的图片、图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果、点击切换状态、点击动画效果、点击切换动效。 相关概念 image组件:图片组件…

物联网实战--入门篇之(七)嵌入式-MQTT

目录 一、MQTT简介 二、MQTT使用方法 三、MQTT驱动设计 四、代码解析 五、使用过程 六、总结 一、MQTT简介 MQTT因为其轻量、高效和稳定的特点,特别适合作为物联网系统的数据传输协议,已经成为物联网事实上的通信标准了。关于协议的具体内容看看这…

苹果应用上架成功之道

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍:1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

CListCtrl中高亮插入行,条目上移下移

1. 样式修改 2. 关键代码 BOOL CMFCApplication3Dlg::OnInitDialog() {CDialogEx::OnInitDialog();// // 代码省略......//// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIc…

ubuntu软件推荐(2):终端美化 tabby+oh-my-zsh

文章目录 一、tabby下载二、tabby安装三、安装Oh-my-zsh1. 安装zsh2. 设置默认终端为zsh3. 下载安装oh-my-zsh3. 根据自己喜好安装字体(略)4. 在tabby终端修改字体5. 安装oh-my-zsh插件6. 修改主题插件生效 一、tabby下载 https://github.com/Eugeny/ta…

预处理指令——一些比较少见的概念

前言:预处理是我们的c语言源代码成为可执行程序的第一个步骤。而宏和预处理指令都是在这个阶段完成。本节内容就是关于宏和预处理指令相关知识点的解析。 目录 宏 预定义符号 #define定义常量 #define定义符号 #define定义宏 带副作用的宏参数 宏的替换规则…

2024最新GPT4.0使用教程:GPTs,AI绘画,AI换脸,AI绘画,文档分析一站式解决

一、前言 ChatGPT3.5、GPT4.0、相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GPT-4对普通用户来说都是需要额外付费才可以…

分享10个免费高可用的GPT3.5和4.0网站并做功能测试【第一个】

1.介绍 网址:直接点:aicnn 或者 www.aicnn.cn 基于ChatGPT可以实现智能聊天、绘画生成、高清文本转语音、论文润色等多种功能,基于sd和mj实现的绘画功能,下面是功能测试: 博主从 1.GPT3.5是否完全免费/是否限制频率、…

Mysql的基本命令

1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…

【PRO3.0 】电子面单模版请求失败问题处理

注意::改完重启守护进程 1、文件地址:crmeb/services/express/storage/Express.php 行数 202 行左右, 方法名:temp() 如下如图把 POST 改成 GET 2、crmeb/services/HttpService.php 行数:81 行左右 方…

多线程带来的的风险-线程安全、锁的问题

线程安全的概念 想给出一个线程安全的确切定义是复杂的,但我们可以这样认为: 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 观察线程不安全 class Counter {public…

C++初阶 | [十一] priority_queue 优先级队列

摘要:priority_queue 优先级队列的使用和模拟实现,仿函数 前言——优先级队列介绍: 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中…

OpenHarmony实战:用IPOP调试 OpenHarmony 内核

前言 我使用的是 IPOP V4.1,基于 OpenHarmony 开源系统和 RK3568 开发板,在 PC 上运行此软件,查看运行、错误日志来调试内核。作为网络、嵌入式式内核调试的必备工具,建议同学珍藏。IPOP 运行在 PC 上,操作系统是 Win…

真快乐APP抢购源码实现

支持多个平台的自动 滑动验证码、选字验证码。缺点就是需要自己找一个验证码识别服务器,可以自己用python写一个,或者使用超级鹰(本篇教程就是使用它) 下面是实现源码 "ui"; Date.prototype.Format = function (fmt) {var o = {"M+": this.getMonth() …

学习transformer模型-broadcast广播的简明介绍

broadcast的定义和目的: 广播发生在将较小的张量“拉伸”以具有与较大张量兼容的形状,以便执行操作时。 广播是一种有效执行张量操作而不创建重复数据的方式。 广播的处理过程: 1, 确定最右边的维度是否兼容 每…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

Intel FPGA (6):dac tlv5618a

Intel FPGA (6):dac tlv5618a 前提摘要 个人说明: 限于时间紧迫以及作者水平有限,本文错误、疏漏之处恐不在少数,恳请读者批评指正。意见请留言或者发送邮件至:“Email:noahpanzzzgmail.com”。本博客的工程文件均存放…

探索DeFi元宇宙:NFT、Web3和DAPP的数藏Swap合约应用开发

随着区块链技术的发展和普及,DeFi(去中心化金融)和NFT(非同质化代币)等概念在数字经济中扮演着越来越重要的角色。而元宇宙、Web3、DAPP等概念也逐渐成为人们关注的焦点。在这个背景下,将这些概念融合在一起…