k8s健康检查(探针Probe)之LivenessProbe、ReadinessProbe和StartupProbe
背景
集群正常服务时,会出现容器死掉问题,如宿主机故障、资源不足、下游故障等。这个时候容器需要从endpoints摘除(容器挂了就不能接流了),并执行它的restart策略。
LivenessProbe、ReadinessProbe和StartupProbe可以比较优雅地解决这类问题。
简介
官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
有3种方式进行探测服务或容器是否正常:执行脚本、tcp端口探活、http探活。
这3种方式并不是互斥的,结合使用效果更佳。
LivenessProbe探针
作用:当探测失败,Liveness策略将会重建或者漂移该容器。
适用场景:容器跑着跑着可能就挂了,比如宿主机故障,这时候需要漂移这台容器。
ReadinessProbe(就绪探针)
作用:当探测失败,说明容器未就绪,Readiness策略会把容器从Endpoints中移除。
StartupProbe(启动探针)
作用:
如果提供了Startup的探针,则先禁用其他探针,直到StartupProbe探测到服务正常启动了才启用其他探针。如果探测失败,容器将会通过restart策略进行重启。
适用场景:
这主要为了解决部分服务启动缓慢的问题,在这服务启动之前,很容易被Liveness探针和Readiness探针误判为服务挂了。
startupProbe是在k8s v1.16加入了alpha版,官方对其作用的解释是:
Indicates whether the application within the Container is started. All other probes are disabled if a startup probe is provided, until it succeeds. If the startup probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a startup probe, the default state is Success
大概是意思是:判断容器内的应用程序是否已启动。如果提供了启动探测,则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet将杀死容器,容器将服从其重启策略。如果容器没有提供启动探测,则默认状态为成功。
探测方式
有3种方式进行探测服务或容器是否正常:exec执行命令、tcp端口探活、http探活。
参数解释:
initialDelaySeconds:在第一次探测之前应该等待的时间。periodSeconds:两次探测之间的时间间隔。
exec执行命令:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
解释:
- 通过执行命令
cat /tmp/healthy来探测。 initialDelaySeconds参数说明,在第一次探测之前应该等待5s。periodSeconds参数说明:两次探测之间的间隔为5s。
http方式:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /health
port: 8080
httpHeaders:
- name: aaaaa
value: bbbbb
initialDelaySeconds: 3
periodSeconds: 3
解释:
- 通过访问容器的
8080端口、/health接口进行健康检查。 httpHeaders参数指明请求头。initialDelaySeconds参数说明,在第一次探测之前应该等待5s。periodSeconds参数说明:两次探测之间的间隔为5s。
TCP方式
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: k8s.gcr.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
解释:
- 此处对8080端口进行探活。
- 可以看到,这里既用了readinessProbe也用了livenessProbe。
FAQ
健康检查是由谁发起的?
- http请求是由k8s发起的,访问pod的ip。
参考文档:
- https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
- https://blog.csdn.net/wang725/article/details/90719294
- https://zhuanlan.zhihu.com/p/121596793?utm_source=wechat_timeline
京城郭少
k8s健康检查(探针Probe)之LivenessProbe、ReadinessProbe和StartupProbe的更多相关文章
- 十一、Pod的健康检查-探针
Pod 的健康检查-探针 一.Pod 的健康检查-探针 1.1.探针基本概念 探针是由 kubelet 对容器执行的定期诊断.要执行诊断,kubelet 调用由容器实现的 Handler 有三种类型 ...
- linux运维、架构之路-K8s健康检查Health Check
一.Health Check介绍 强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测 ...
- pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)
在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...
- k8s健康检查(七)--技术流ken
默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness ...
- k8s健康检查(七)
默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness ...
- k8s健康检查(9)
一.默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readines ...
- k8s健康检查报错
编辑yaml去掉健康检查 kubectl edit deployment deploymentname 服务恢复
- k8s 健康检查
livenessProbe: exec: command: - /bin/sh - '-c' - /opt/app-root/src/check_conf.sh failureThreshold: 3 ...
- pod资源的健康检查-liveness探针的exec使用
使用探针的方式对pod资源健康检查 探针的种类 livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器 readinessProbe:可用性检查,周期性检查服务是否 ...
- 使用.NET 6开发TodoList应用(28)——实现应用程序健康检查
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 应用健康检查在容器部署的微服务场景下非常常见,相比而言单体非容器部署的应用就不太关心这个特性,为了后续的内容我们在本文中简单介 ...
随机推荐
- [Go] Golang defer 与 MySQL 连接关闭的陷阱 (database is closed)
在 golang 某些 orm 中,你经常会看到这种用法: func main() { db, err := gorm.Open("sqlite3", "test.db& ...
- 扎克伯格说,Llama3-8B还是太大了,量化、剪枝、蒸馏准备上!
扎克伯格说,Llama3-8B还是太大了,不适合放到手机中,有什么办法? 量化.剪枝.蒸馏,如果你经常关注大语言模型,一定会看到这几个词,单看这几个字,我们很难理解它们都干了些什么,但是这几个词对于现 ...
- 2019-8-31-C#-简单读取文件
title author date CreateTime categories C# 简单读取文件 lindexi 2019-08-31 16:55:58 +0800 2018-07-19 16:48 ...
- 使用 Docker 自建一款怀旧游戏之 - 超级马里奥
1)超级马里奥 简介 < 超级马里奥 >(Super Mario)是任天堂公司创造的一款经典游戏系列,是世界上最知名.最成功的游戏之一.这个系列由日本设计师宫本茂于 1985 年创造,最初 ...
- PostMan接口测试实用小点
PostMan接口测试实用小点 1. 接口测试变量存取操作 在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值. 在环 ...
- QT MySQL连接自动断开
参考链接 MySQL链接10天后自动断开解决方案:<https://blog.csdn.net/xiaoxiao133/article/details/123006881 方式一 QT中可以通过 ...
- C语言程序设计-笔记7-指针
C语言程序设计-笔记7-指针 例8-1 利用指针模拟密码开锁游戏. #include<stdio.h> int main(void) { int x=5342; //变 ...
- java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider
解决错误: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider 整合一遍通用mapp ...
- Python读Excel数据自动化填入日常办公的网页表单
前言 本篇内容,让你完全掌握Python是如何自动化办公的~ 一.环境准备 1.1 Python 3.7.0 1.2 Pycharm (Python 开发工具) 1.3 Selenium ...
- 解读注意力机制原理,教你使用Python实现深度学习模型
本文分享自华为云社区<使用Python实现深度学习模型:注意力机制(Attention)>,作者:Echo_Wish. 在深度学习的世界里,注意力机制(Attention Mechanis ...