背景

集群正常服务时,会出现容器死掉问题,如宿主机故障、资源不足、下游故障等。这个时候容器需要从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。

参考文档:

京城郭少

k8s健康检查(探针Probe)之LivenessProbe、ReadinessProbe和StartupProbe的更多相关文章

  1. 十一、Pod的健康检查-探针

    Pod 的健康检查-探针 一.Pod 的健康检查-探针 1.1.探针基本概念 ​探针是由 kubelet 对容器执行的定期诊断.要执行诊断,kubelet 调用由容器实现的 Handler 有三种类型 ...

  2. linux运维、架构之路-K8s健康检查Health Check

    一.Health Check介绍         强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测 ...

  3. pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)

    在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...

  4. k8s健康检查(七)--技术流ken

    默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness ...

  5. k8s健康检查(七)

    默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness ...

  6. k8s健康检查(9)

    一.默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readines ...

  7. k8s健康检查报错

    编辑yaml去掉健康检查 kubectl edit deployment deploymentname 服务恢复

  8. k8s 健康检查

    livenessProbe: exec: command: - /bin/sh - '-c' - /opt/app-root/src/check_conf.sh failureThreshold: 3 ...

  9. pod资源的健康检查-liveness探针的exec使用

    使用探针的方式对pod资源健康检查 探针的种类 livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器 readinessProbe:可用性检查,周期性检查服务是否 ...

  10. 使用.NET 6开发TodoList应用(28)——实现应用程序健康检查

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 应用健康检查在容器部署的微服务场景下非常常见,相比而言单体非容器部署的应用就不太关心这个特性,为了后续的内容我们在本文中简单介 ...

随机推荐

  1. dotnet 谨慎在静态构造函数里使用锁

    在 dotnet 的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用.最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑.本文来 ...

  2. WPF 基础 2D 图形学知识 判断点是否在线段上

    在知道一个使用两个点表示的线段,和另一个点,求另一个点是否在线段上 本文算法属于通用的算法,可以在 WPF 和 UWP 和 Xamarin 等上运行,基本上所有的 .NET 平台都能执行 如下图,如果 ...

  3. windows系统桌面壁纸切换的三种csharp办法,兼容win10及旧版,还有一个现成桌面小程序

    我自己用这些代码做的小app如下: 最新版本已经改成了服务的方式,也可以选择性添加系统的右键菜单,并且我自己使用的源码库已经开源到了nuget,大家可以直接拿来做二次开发, 新版的下载地址为:http ...

  4. vue子组件给父组件传值

    子组件: <template> <div class="app"> <input @click="sendMsg" type=&q ...

  5. three.js 物体要使用光线投射技术,计算是否点击位置与物体有交叉

    原生 DOM 还用原生的 DOM 点击事件,要注意开启 pointerEvents CSS3DRenderer 是一个新的渲染器,需要在渲染循环调用并适配 labelRenderer.domEleme ...

  6. 一次nginx文件打开数的问题排查处理

    现象:nginx域名配置合并之后,发现consul-template无法完成nginx重载,然后发现需要重启nginx,才能让配置生效. 注意:下次哪个服务有报错,就看重启时所有日志输出,各种情况日志 ...

  7. Istio(三):服务网格istio可观察性:Prometheus,Grafana,Zipkin,Kiali

    目录 一.模块概览 二.系统环境 三.可观察性 四.指标 4.1 代理级指标 4.2 服务级指标 4.3 控制平面度量 五.Prometheus 5.1 安装Prometheus 5.2 部署示例应用 ...

  8. PHP做api开发时,签名验证你是怎么设计的

    开发过程中,我们经常会与接口打交道,有的时候是调取别人网站的接口,有的时候是为他人提供自己网站的接口,但是在这调取的过程中都离不开签名验证. 我们在设计签名验证的时候,请注意要满足以下几点: 可变性: ...

  9. aspnetcore插件开发dll热加载 二

    这一篇文章应该是个总结. 投简历的时候是不是有人问我有没有abp的开发经历,汗颜! 在各位大神的尝试及自己的总结下,还是实现了业务和主机服务分离,通过dll动态的加载卸载,控制器动态的删除添加. 项目 ...

  10. go encoding/json 替代者

    https://github.com/json-iterator/go 可以替代官方包encoding/json 提升json编码和解码效率