Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测
Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测,并实践了健康检查在 Scale Up 和 Rolling Update 场景中的应用。
kubelet使用启动探针来了解何时启动Container应用程序。如果配置了这样的探针,它将禁用活动性和就绪性检查,直到成功为止,以确保这些探针不会干扰应用程序的启动。这可用于对启动缓慢的容器进行活动检查,避免它们在启动和运行之前被kubelet杀死。
定义活动命令exec
在本练习中,您将创建一个Pod,该Pod可基于k8s.gcr.io/busybox图像运行一个Container 。这是Pod的配置文件:
pods/probe/exec-liveness.yaml apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep ; rm -rf /tmp/healthy; sleep
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds:
periodSeconds:
在配置文件中,您可以看到Pod具有单个Container。该periodSeconds字段指定kubelet应该每5秒执行一次活动性探测。该initialDelaySeconds字段告诉kubelet在执行第一个探测之前应等待5秒。为了执行探测,kubelet cat /tmp/healthy在容器中执行命令。如果命令成功执行,则返回0,并且kubelet认为Container处于活动状态且健康。如果命令返回非零值,则kubelet将杀死Container并重新启动它。
在容器寿命的前30秒中,有一个/tmp/healthy文件。因此,在前30秒内,该命令cat /tmp/healthy将返回成功代码。30秒后,cat /tmp/healthy返回失败代码。
在30秒内,查看Pod事件:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
24s 24s {default-scheduler } Normal Scheduled Successfully assigned liveness-exec to worker0
23s 23s {kubelet worker0} spec.containers{liveness} Normal Pulling pulling image "k8s.gcr.io/busybox"
23s 23s {kubelet worker0} spec.containers{liveness} Normal Pulled Successfully pulled image "k8s.gcr.io/busybox"
23s 23s {kubelet worker0} spec.containers{liveness} Normal Created Created container with docker id 86849c15382e; Security:[seccomp=unconfined]
23s 23s {kubelet worker0} spec.containers{liveness} Normal Started Started container with docker id 86849c15382e
35秒后,再次查看Pod事件:在输出的底部,有消息指示活动性探针已失败,并且容器已被杀死并重新创建。
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
37s 37s {default-scheduler } Normal Scheduled Successfully assigned liveness-exec to worker0
36s 36s {kubelet worker0} spec.containers{liveness} Normal Pulling pulling image "k8s.gcr.io/busybox"
36s 36s {kubelet worker0} spec.containers{liveness} Normal Pulled Successfully pulled image "k8s.gcr.io/busybox"
36s 36s {kubelet worker0} spec.containers{liveness} Normal Created Created container with docker id 86849c15382e; Security:[seccomp=unconfined]
36s 36s {kubelet worker0} spec.containers{liveness} Normal Started Started container with docker id 86849c15382e
2s 2s {kubelet worker0} spec.containers{liveness} Warning Unhealthy Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
再等待30秒,并验证容器已重新启动:
kubectl get pod liveness-exec
NAME READY STATUS RESTARTS AGE
liveness-exec / Running 1m
定义活动HTTP请求
另一种活动性探针使用HTTP GET请求。这是基于k8s.gcr.io/liveness 映像运行容器的Pod的配置文件。
pods/probe/http-liveness.yaml 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: /healthz
port:
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds:
periodSeconds:
在配置文件中,您可以看到Pod具有单个Container。该periodSeconds字段指定kubelet应该每3秒执行一次活动性探测。该initialDelaySeconds字段告诉kubelet在执行第一个探测之前应等待3秒。为了执行探测,kubelet将HTTP GET请求发送到在Container中运行并在端口8080上侦听的服务器。如果服务器/healthz路径的处理程序返回成功代码,则kubelet认为Container处于活动状态且运行状况良好。如果处理程序返回失败代码,则kubelet将杀死Container并重新启动它。
任何大于或等于200且小于400的代码均表示成功。其他任何代码均指示失败。
您可以在server.go中查看服务器的源代码 。
在Container /healthz处于活动状态的前10秒钟中,处理程序返回状态200。此后,处理程序返回状态500。
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
duration := time.Now().Sub(started)
if duration.Seconds() > {
w.WriteHeader()
w.Write([]byte(fmt.Sprintf("error: %v", duration.Seconds())))
} else {
w.WriteHeader()
w.Write([]byte("ok"))
}
})
容器启动后三秒钟,kubelet将开始执行运行状况检查。因此,前几次健康检查将成功。但是10秒钟后,运行状况检查将失败,并且kubelet将终止并重新启动Container。
定义TCP liveness探针
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
定义 readiness probes
有时,应用程序暂时无法为流量提供服务。例如,应用程序可能需要在启动过程中加载大数据或配置文件,或者在启动后依赖于外部服务。在这种情况下,您不想杀死应用程序,但也不想发送请求。Kubernetes提供了准备就绪探针以检测和缓解这些情况。带有容器的容器报告其容器尚未准备就绪,无法通过Kubernetes Services接收流量。
readiness的配置与liveness类似。唯一的区别是您使用readinessProbe字段而不是livenessProbe字段。
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds:
periodSeconds:
HTTP和TCP就绪性探针的配置也与活动性探针相同。
readiness和liveness可以并行用于同一容器。同时使用这两者可以确保流量不会到达尚未准备就绪的容器,并且可以确保容器在发生故障时重新启动。
Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测的更多相关文章
- Docker Kubernetes 健康检查
Docker Kubernetes 健康检查 提供Probe探测机制,有以下两种类型: livenessProbe:如果检查失败,将杀死容器,然后根据Pod的重启策略来决定是否重启. readines ...
- phpcms调取数据库的两种机制
在phpcms中,模板调取后台的数据有两种机制: 1.在控制器中定义数据,在模板中直接调用. 2.标签机制.即在模块的classes/tag.class中定义标签类,然后在模板中用标签调用 两种调用机 ...
- java SWing事件调用的两种机制
Java(91) /** * java swing中事件调用的两种机制: * (一)响应机制 * (二)回调机制 */ package test; import java.awt.*; impo ...
- Python -- 值转换为字符串的两种机制
可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: & ...
- kubernetes健康检查
有时候容器在running的状态,但是里面的服务挂了,这个就难办了,所以k8s提供了一种检查服务是否健康的方法 Liveness Probe的种类: ● ExecAction:在container中执 ...
- Nginx负载均衡中后端节点服务器健康检查的一种简单方式
摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...
- kubernetes创建资源的两种方式
一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令行的方式直接创建,比如: kubectl run httpd-app --image ...
- 25Spring_事务管理的两种机制
一共有两种事务管理机制:编程式事务管理和声明式事务管理. 1.编程式事务管理企业已经不用了. 2.我们主要讲的是声明式事务管理.声明式事务管理 ,无需要修改原来代码,只需要配置,为目标代码添加事务管理 ...
- centos7下kubernetes(6。kubernetes创建资源的两种方式)
两种方式:1.命令:2.配置文件 之前我们在部署K8S的时候分别用到了命令和配置文件创建K8s资源: 1.命令方式:kubectl run nginx-deployment --image=nginx ...
随机推荐
- Hadoop编程调用HDFS(PYTHON)
1.运行环境 开发工具:PyCharm Python 版本:3.5 Hadoop环境: Cloudera QuickStart 2.GITHUB地址 https://github.com/nbfujx ...
- _stdcall
__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以 ...
- STM32 NVIC中断优先级分组说明
STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个) 中断管理方法 首先,对STM32中断进行分组,组0~4.同时,对每个中断设置一个抢占优先级和一个响应优先级值. 分组配置是 ...
- php获取linux服务器CPU、内存、硬盘使用率的实现代码
define("MONITORED_IP", "172.16.0.191"); //被监控的服务器IP地址 也就是本机地址 define("DB_SE ...
- redis.conf 配置文件介绍
1: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2: 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...
- [CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)
题目描述 小$w$伤心的走上了$Star\ way\ to\ heaven$. 到天堂的道路是一个笛卡尔坐标系上一个$n\times m$的长方形通道(顶点在$(0,0)$和$(n,m)$),小$w$ ...
- IIS的站点配置存储在applicationHost.config
C:\Windows\System32\inetsrv\Config\applicationHost.config
- 汇编指令MOV
格式:MOV DST,SRC 例如: MOV EAX,#050aH ;将十六进制050a 传送到通用寄存器eax中 MOV DI,BX(寄存器到寄存器之间传数) MOV ES,AX(通用寄存器与段寄存 ...
- 信息安全-OAuth2.0:NuGetFromMicrosoft
ylbtech-信息安全-OAuth2.0:NuGetFromMicrosoft 1.返回顶部 1. https://login.microsoftonline.com/common/oauth2/v ...
- 在使用bat 批处理 时将运行结果显示并保存到文件中 echo
实现原理: 因为要输出到文本,所以可以使用call将结果输出到临时文件,完成之后做3件事: 1. 将临时文本内容显示,实现窗口显示的本次运行结果的功能,可先清屏. 2. 将临时文本内容追加到日志文件用 ...