[译]Kubernetes 最佳实践:使用readiness和liveness探测器做HealthChecks

本文主要是介绍[译]Kubernetes 最佳实践:使用readiness和liveness探测器做HealthChecks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:
分布式系统通常是难于管理的。主要是由于组件很多,且当其中一个损坏时,系统必须能探测到,绕过它,最后修复它,并且最重要的是,这一系列都需要是自动的。
如果一个实例不可用,那么系统就不应该向其分发请求,相反,应该将请求分发到其他可用的实例上,或者稍后再尝试。同时系统应该自动将失效的实例重新恢复到可用状态。

默认情况下,kubernetes(以后简称k8s)当pod中所有container一“启动”,就向其发送通信请求,并在pod崩溃后重启他们。通常来说这已经够好了。但是k8s提供了一种更直接明了的方式。
那就是readiness和liveness探测器。


HealthChecks的种类
k8s提供了两种HealthChecks的方法,理解他们的异同与用法是非常重要的。

Readiness
Readiness Probe 的设计的目的是让k8s明确知道pod何时已经完全就绪。在向POD发送请求通信之前,首先进行Readiness Probe测试。如果该测试没有通过,则k8s停止向其发送通信请求,直到测试通过。

 

Liveness
Liveness Probe 是为了让k8s知道pod是否存活(而不一定可用)。如果POD死掉,则k8s会将其remove并启动一个新的而取代。

 

 

HealthCheck是如何工作的?
Readiness
想象一下你的POD刚刚开始启动,但是相应的服务并不一定就会立刻就绪直到POD完全启动完成,即使相应的进程已经出现了。默认情况下k8s会立刻向POD发送请求一旦进程启动(但此时不一定可用)。
因此使用Readiness Probe,k8s会等待POD完全ready后才会向其发送请求。

Liveness
想象另一个场景,当你的POD因为某种原因一直处于挂起状态且不能响应任何请求,然而此时进程却是存在的,因此k8s会认为一切正常并持续向已经挂起的POD发送请求。
但若使用了Liveness Probe,k8s会发现该POD已经停止响应,进而重启这个有问题的POD。


Probe 的类型
有3种Probe: HTTP,Command 和 TCP。可以使用任意一个进行liveness and readiness checks.

HTTP Probe:
这是一种最常见的自定义liveness probe。 即使你POD内的应用程序不是HTTP server,你可以在应用中创建一个轻量级的HTTP server
来响应liveness probe。 k8s会ping一个指定路径,如果获得200~300之间的响应代码,则表明应用程序是健康的。
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-a-liveness-http-request

Command Probe:
k8s 在你的container内运行一段命令。如果这段命令返回值是0,则说明该container是健康的;否则它会被标记为不健康。这种探针在你不能或者不愿意运行http server时很有用,
可以仅仅通过一个命令检查你的应用时否健康。
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-a-liveness-command

TCP Probe:
这种Probe,k8s会尝试在一个特定的端口建立一个TCP连接。如果连接建立成功,则说明container健康,反之不健康。例如gPRC或者FTP服务是主要用于此类Probe。
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-a-tcp-liveness-probe


配置初始的探测延迟
我们可以指定多久运行一次Probe,包括探测成功与失败的阈值,同时也包括需要等待响应的时长。以下文档非常清楚地阐述了各种不同的选项与用途:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
然而,有一个非常重要的设置你需要配置以决定何时使用liveness probes。 它就是initialDelaySeconds。
前面提到过,一个liveness probe如果检测失败会导致POD重启。你需要确定该Probe不会启动直到应用完全就绪。否则应用可能将一直持续重启并永远不会就绪!
我建议将Probe启动延迟设置为POD启动的平均时间并增加少许冗余。当你的应用启动的更快或者更慢是,请酌情更新这个数值。

结论:很多人告诉你HealthCheck是任何分布式系统需要的,k8s也不例外。 使用HealthCheck将让你的k8s有坚固的基础,更好的可靠性与更长的运行时间。幸好,k8s让其轻松实现了!

 

这篇关于[译]Kubernetes 最佳实践:使用readiness和liveness探测器做HealthChecks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161145

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出