【云原生】恰当运用kubernetes中三种探针,确保应用程序在Kubernetes集群中保持健康、可用和可靠

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Kubernetes中三种探针的详细用法教程
    • 一、概述
    • 二、存活探针(Liveness Probe)
      • 1. 探针类型
      • 2. 配置文件示例
      • 3. 实际应用案例
    • 三、就绪探针(Readiness Probe)
      • 1. 探针类型
      • 2. 配置文件示例
      • 3. 实际应用案例
    • 四、启动探针(Startup Probe)
      • 1. 探针类型
      • 2. 配置文件示例
      • 3. 实际应用案例
    • 五、探针的协同工作
    • 六、探针配置的最佳实践
    • 七、实际案例分析
    • 八、总结

Kubernetes中三种探针的详细用法教程

在Kubernetes(简称k8s)中,探针(Probes)是一种非常重要的健康检查机制,用于监测Pod内容器的运行状况。通过合理配置探针,可以确保应用程序在Kubernetes集群中保持健康、可用和可靠。本文将结合实际案例,详细介绍Kubernetes中的三种探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)的用法。

一、概述

Kubernetes中的探针主要用于检测容器内应用程序的健康状态,并根据检测结果采取相应的操作,如重启容器、从服务负载均衡中剔除等。这些探针通过PodSpec中的livenessProbereadinessProbestartupProbe字段进行配置。

二、存活探针(Liveness Probe)

存活探针主要用于检测容器内的主进程或服务是否仍然运行正常且响应健康检查。如果存活探针失败,Kubernetes将自动重启容器,以尝试恢复应用程序的健康状态。

1. 探针类型

存活探针支持三种类型:HTTP GET请求、TCP Socket检查和执行命令(Exec)。

  • HTTP GET请求:通过向容器内指定的端口发送HTTP GET请求来检查应用的状态。如果收到的HTTP响应码在200-399范围内,则认为探测成功。
  • TCP Socket检查:尝试与容器上指定的端口建立TCP连接。如果连接成功,则认为探测成功。
  • 执行命令:在容器内部执行一个命令,并根据命令退出时返回的状态码判断容器是否正常运行。如果命令返回0,则表示成功。

2. 配置文件示例

以下是一个使用HTTP GET请求的存活探针配置示例:

apiVersion: v1
kind: Pod
metadata:name: my-app
spec:containers:- name: my-containerimage: my-image:latestlivenessProbe:httpGet:path: /healthzport: 8080httpHeaders:- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 30periodSeconds: 10timeoutSeconds: 1successThreshold: 1failureThreshold: 3

在这个例子中,Kubernetes会向容器的8080端口发送HTTP GET请求,请求路径为/healthz。如果收到200-399范围内的响应码,则认为容器存活。探针会在容器启动后延迟30秒开始执行,每隔10秒执行一次,超时时间为1秒。如果连续失败3次,则认为容器不健康,Kubernetes将重启容器。

3. 实际应用案例

假设有一个Web应用程序,其主进程是一个HTTP服务器。如果服务器因为某种原因停止响应或崩溃,我们需要一种机制来自动重启它。此时,可以使用存活探针来定期检测服务器的健康状态。如果存活探针失败,Kubernetes将自动重启Pod,从而恢复服务的可用性。

三、就绪探针(Readiness Probe)

就绪探针用于检测容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes将从服务的负载均衡池中删除该容器,直到探针再次成功。

1. 探针类型

与存活探针类似,就绪探针也支持HTTP GET请求、TCP Socket检查和执行命令三种类型。

2. 配置文件示例

以下是一个使用HTTP GET请求的就绪探针配置示例:

apiVersion: v1
kind: Pod
metadata:name: my-app
spec:containers:- name: my-containerimage: my-image:latestreadinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 5periodSeconds: 10timeoutSeconds: 1successThreshold: 1failureThreshold: 3

在这个例子中,Kubernetes会向容器的8080端口发送HTTP GET请求,请求路径为/ready。如果收到200-399范围内的响应码,则认为容器已准备好接收流量。探针会在容器启动后延迟5秒开始执行,每隔10秒执行一次,超时时间为1秒。如果连续失败3次,则认为容器未就绪,Kubernetes将从服务负载均衡池中删除该容器。

3. 实际应用案例

假设有一个数据库应用程序,它在启动后需要执行一系列初始化操作(如加载数据、创建索引等)。在这些初始化操作完成之前,应用程序可能无法处理外部请求。为了避免在初始化过程中接收流量,可以使用就绪探针来检测应用程序是否已准备好接收请求。如果就绪探针失败,Kubernetes将不会将流量路由到该容器,直到就绪探针成功,表示应用程序已经准备好,Kubernetes才会将流量重新路由到该容器。

四、启动探针(Startup Probe)

启动探针是Kubernetes 1.16版本中引入的一种新类型的探针,用于处理容器启动过程中可能出现的延迟或临时故障。在某些情况下,应用程序可能需要较长时间来完成初始化过程(如加载大量数据、执行复杂的配置检查等),这可能导致存活探针过早地判断容器不健康并重启它。启动探针就是为了解决这个问题而设计的。

1. 探针类型

启动探针同样支持HTTP GET请求、TCP Socket检查和执行命令三种类型,与存活探针和就绪探针相同。

2. 配置文件示例

以下是一个使用执行命令的启动探针配置示例:

apiVersion: v1
kind: Pod
metadata:name: my-long-starting-app
spec:containers:- name: my-containerimage: my-long-starting-image:lateststartupProbe:exec:command:- cat- /tmp/healthyfailureThreshold: 30periodSeconds: 10livenessProbe:httpGet:path: /healthzport: 8080failureThreshold: 3periodSeconds: 10readinessProbe:httpGet:path: /readyport: 8080failureThreshold: 3periodSeconds: 10

在这个例子中,startupProbe 使用了一个执行命令的探针,该命令尝试读取 /tmp/healthy 文件。如果文件存在且命令成功执行(即返回状态码0),则认为容器启动成功。failureThreshold 设置为30,意味着如果探针连续失败30次(每次间隔10秒),Kubernetes才会认为启动失败。同时,该Pod还配置了存活探针和就绪探针,用于在容器启动后持续检查其健康状态和就绪状态。

3. 实际应用案例

假设有一个大型Web应用程序,它在启动时需要进行复杂的初始化操作,如数据库迁移、配置加载等,这些操作可能需要几分钟甚至更长时间来完成。如果在此期间存活探针过早地判断容器不健康并重启它,将会导致初始化过程被中断。为了避免这种情况,可以使用启动探针来延迟存活探针的检查,直到容器完成初始化并准备好接受健康检查。

五、探针的协同工作

在Kubernetes中,存活探针、就绪探针和启动探针可以协同工作,以确保Pod的健康和可用性。通常,一个Pod会同时配置这三种探针,但它们的职责和触发条件各不相同:

  • 启动探针:在容器启动后立即开始执行,用于检测容器是否处于启动过程中。如果启动探针成功,则允许存活探针和就绪探针开始工作。如果启动探针失败(达到failureThreshold指定的次数),则Kubernetes将重启容器。
  • 存活探针:在容器启动且启动探针(如果有)成功后开始执行,用于检测容器是否仍然存活。如果存活探针失败,则Kubernetes将重启容器。
  • 就绪探针:在容器启动且启动探针(如果有)成功后开始执行,用于检测容器是否已准备好接收流量。如果就绪探针失败,则Kubernetes将从服务的负载均衡池中删除该容器,直到就绪探针再次成功。

通过合理配置这三种探针,可以确保Kubernetes集群中的Pod始终保持在健康、可用和可靠的状态,从而提高整个系统的稳定性和可靠性。

六、探针配置的最佳实践

在配置Kubernetes中的探针时,遵循一些最佳实践可以帮助确保探针的有效性和准确性,从而优化Pod的行为和整个集群的稳定性。

  1. 合理设置初始延迟时间

    • initialDelaySeconds 参数定义了探针开始执行前的延迟时间。这个值应该足够长,以允许容器完成其初始化过程。过短的延迟时间可能导致探针在容器完全启动之前就执行,从而产生误报。
  2. 调整检查频率和超时时间

    • periodSeconds 参数定义了探针执行的频率。这个值应该根据应用程序的响应时间和健康检查的需求来设置。过低的频率可能导致问题发现不及时,而过高的频率则可能增加不必要的资源消耗。
    • timeoutSeconds 参数定义了探针等待响应的超时时间。这个值应该足够长,以允许应用程序在负载较高或响应较慢时也能成功响应探针请求。
  3. 设置合理的成功和失败阈值

    • successThresholdfailureThreshold 参数分别定义了探针成功和失败的连续次数阈值。这些值应该根据应用程序的稳定性和健康检查的可靠性来设置。过低的阈值可能导致探针过于敏感,而过高的阈值则可能延迟问题的发现。
  4. 选择适当的探针类型

    • 根据应用程序的特性选择最适合的探针类型。HTTP GET请求适用于Web应用程序,TCP Socket检查适用于基于TCP协议的服务,而执行命令则适用于需要运行特定检查脚本的场景。
  5. 考虑探针的副作用

    • 某些探针(尤其是执行命令的探针)可能会对应用程序的性能产生影响。确保探针的执行不会对应用程序的正常运行造成不必要的负担。
  6. 日志和监控

    • 配置适当的日志记录和监控,以便在探针失败时能够快速定位问题原因。这包括应用程序日志、Kubernetes事件和Prometheus等监控系统的数据。
  7. 测试和优化

    • 在生产环境部署之前,在测试环境中充分测试探针的配置。根据测试结果调整探针的参数,以优化其性能和准确性。
  8. 利用Kubernetes的自动扩展和故障恢复机制

    • 结合Kubernetes的Horizontal Pod Autoscaler(HPA)和自动故障恢复机制,可以进一步提高应用程序的可用性和扩展性。当探针检测到问题时,Kubernetes可以自动重启Pod、重新调度Pod或扩展Pod的数量来应对负载变化。

七、实际案例分析

假设你正在部署一个微服务架构的应用程序,其中包含多个相互依赖的服务。为了确保服务的可靠性和可用性,你决定为这些服务配置探针。

  • 服务A:一个Web服务器,负责处理外部HTTP请求。你可以为服务A配置HTTP GET请求的存活探针和就绪探针。存活探针定期检查/healthz端点以确保服务器仍然运行。就绪探针检查/ready端点以确保服务器已准备好处理请求。

  • 服务B:一个数据库服务,用于存储应用程序的数据。由于数据库启动可能需要较长时间来加载数据和初始化,你可以为服务B配置启动探针来延迟存活探针的检查。同时,你还可以配置TCP Socket检查的存活探针来检测数据库服务是否仍然运行。

  • 服务C:一个消息队列服务,用于处理异步消息。由于消息队列服务在启动时通常会有一定的预热过程,你可以为服务C配置执行命令的启动探针来检查某个特定文件或目录是否存在,以判断服务是否已完全启动。

通过为这些服务配置合适的探针,你可以确保它们在Kubernetes集群中保持健康、可用和可靠。当探针检测到问题时,Kubernetes将自动采取相应的操作来恢复服务的正常运行。

八、总结

Kubernetes中的存活探针、就绪探针和启动探针是确保Pod健康运行的重要工具。通过合理配置这些探针,你可以实时监控容器的状态,并在发现问题时自动采取恢复措施。遵循最佳实践、测试和优化探针配置,可以进一步提高应用程序的可用性和稳定性。在实际应用中,根据应用程序的特性和需求选择合适的探针类型和参数,并结合Kubernetes的其他特性(如自动扩展和故障恢复)来优化整个集群的性能和可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑录屏软件免费版,分享4款,轻松录制精彩瞬间

电脑录屏已成为创作、教学和分享的热门方式。然而,对于一些用户来说,购买专业的录屏软件可能会增加负担。幸运的是,市场上存在许多电脑录屏软件免费版的选择。它们提供了丰富的功能,让您可以尽情展现您的创意,无须为此…

蝙蝠避障:盲人出行的守护者,让每一步都安心

在这个多彩的世界里,作为一位盲人,我时常感受着出行的种种挑战。每一次踏出家门,都是一场未知的探险,心里难免有些忐忑。街道上的车流声、人群的喧闹,这些对我而言只是模糊的背景音,真正让我担忧的是那些突…

Python对腾讯课程视频链接自动化抓取

近期看到腾讯课堂停服的通知,心痛之余,想到啊,我还有很多课程没看完,就剩下两个月的事件,我也来不及看完了。怎么办? 索性,我研究下,怎么把视频保存下来。 接下来请听我分析。 所…

KMZ格式详解,javascript写入读取KMZ示例

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

SAP中检质操作原因导致的WM和MM库存状态不一致实例分析处理

近期遇到一个问题描述如下: 某个物料通过MM的库存查询MMBE,结果是没有质检库存的。但通过WM的库存查询事务LS24,结果是有Q状态(即质检库存)的。 不明原因的用户可能会认为这是系统的BUG,但作为一个多年经验…

浅谈 Mybatis 框架

文章目录 一、什么是MyBatis?1.2、JDBC 二、使用Mybatis2.1、配置MyBatis开发环境2.1.1、配置连接字符串2.1.2、配置MyBatis中的XML路径 2.2、使用MyBatis模式和语法操作数据库 三、使用 Mybatis 进行增删改查操作的要点3.1、ResultMap的用法 四、Mybatis操作难点4.1、#{ } 和…

JavaWeb基础1:HTML/CSS/JS/HTTP

JavaWeb基础1:HTML/CSS/JS/HTTP (qq.com)

FPGA知识基础之--clocking wizard ip核的使用以及modelsim与vivado联合仿真

目录 前言一、ip核是什么?1.1 定义1.2 分类 二、为什么使用ip核2.1 ip核的优点2.2 ip核的缺点 三、如何使用ip核(vivado)四、举例(clocking wizard ip核)4.1 简介4.2 实验任务4.3 程序设计4.3.1 系统模块4.3.2 波形绘制…

连接数据库报错bad handshake

堡垒机账号没有授权访问权限

2024最新最全面的Selenium 3.0 + Python自动化测试框架

文档说明 Selenium是一个用于Web应用程序自动化测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 Selenium测试的主要功能包括: 测试与浏览器的兼容性:测试应用程序是否能很好的工作在不同的浏览器和操作系统之上。…

云计算学习——5G网络技术

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 Day1 网络参考模型 Day2 网络综合布线与应用 Day3 IP地址 Day4 华为eNSP网络设备模拟器的基础安装及简单使用 Day5 交换机的基本原理与配置 Day6 路由器的原理与配置 Day7 网络层协议介绍一 Day8 …

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…

AI8-文本检测

文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要 解决目标分类问题。 文本在图像中的表现形式可以视为一种‘目标‘,通用的目标检测的方法也适用于文本检测,从任务本身上来 看: • 目标检测:给定图像或者视频,找出目…

本地部署 faster-whisper

本地部署 faster-whisper 1. 创建虚拟环境2. 安装依赖模块3. 创建 Web UI4. 启动 Web UI5. 访问 Web UI 1. 创建虚拟环境 conda create -n faster-whisper python3.11 -y conda activate faster-whisper2. 安装依赖模块 pip install torch2.2.2 torchvision0.17.2 torchaudio…

bilibili实习生一面0625

OSI七层模型 物理层:将帧中的比特传送到下一个节点(比特) 数据链路层:将数据包装成帧并传送到路径上下一个节点,将相邻节点间不可靠的物理链路变成可靠的逻辑链路(帧) 网络层:路由寻…

Qt 5.14安装(配置MSVC 2017)

Qt 5.14安装(配置MSVC 2017) 记录一下自己安装配置Qt的步骤。 我需要安装Qt,并使用MSVC编译,所以才写了这篇文章。 一、环境 操作系统:windows 11 (64位) Qt:Qt 5.14.2 vs&…

怎么读取FRM、MYD、MYI数据文件

一、介绍frm、MYD、MYI文件 在MySQL中,使用MyISAM存储引擎时,数据库表会被分割成几个不同的文件文件描述功能扩展名FRM 文件表结构定义文件存储表的结构信息,字段、索引等.FRMMYD 文件数据文件包含表的实际数据.MYD(MYData&#x…

[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-04 IP层程序设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

学习笔记-MYSQL 事务

目录 一、什么是事务? 二、事务的四个特征(ACID)【面试常考项】 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability&#x…

Linux-理解shell

文章目录 5. 理解shell5.1 shell的类型5.2 交互shell和系统默认shell5.3 安装zsh shell程序5.4 shell的父子关系5.5 命令列表5.6 命令分组5.7 使用命令分组创建子shell5.8 子shell用法5.9 shell的非内建命令和内建命令5.9.1 非内建命令5.9.2 内建命令5.9.3 history和alias命令介…