Pod 的健康检查-探针

一、Pod 的健康检查-探针

1.1、探针基本概念

​探针是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler 有三种类型的处理程序:

​1、ExecAction: 在容器内执行指定命令。如果命令退出时返回码为0则认为诊断成功。

2、TCPSocketAction: 对指定端口上的容器的IP地址进行 TCP 检查,如果端口打开则诊断被认为是成功的。

3、HTTPGetAction: 对指定的端口和路径上的容器的IP地址执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的。

每次探测都将获得以下三种结果之:

  • 成功:容器通过了诊断。

  • 失败:容器未通过诊断。

  • 未知:诊断失败,因此不会采取任何行动。

探测方式

​1、livenessProbe: 指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影响。如果容器不提供存活探针,则默认状态为 Success 。

2、readinessProbe: 指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure 如果容器不提供就绪探针,则默认状态为 Success 。

1.2、探针实现

就绪检测:

vim readinessProbe-httpget.yaml

apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
spec:
containers:
- name: readiness-httpget-container
image: docker.io/nginx
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3

我们先运行该 Pod 然后查看其状态:

已经成功开始运行,这个时候我们进入到该 Pod 然后将其 index.html 文件删除后,在看其状态:

这个时候我们可以看到,虽然容器处于 Running 状态,但是却处于 No Ready 的状态,这个时候我们通过kubectl describe pod readiness-httpget-pod 命令,查看一下具体的信息:

我们看到,显示 “Readiness probe failed: HTTP probe failed with statuscode: 404” 就绪探测失败,错误代码 404 表明页面不存在。

1.3、存活检测:

  • EXEC
vim livenessProbe-exec.yaml

apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
spec:
containers:
- name: liveness-exec-container
image: docker.io/busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/live"]
initialDelaySeconds: 1
periodSeconds: 3

然后查看下我们 Pod 的实时状态:

​经过一段时间等待,我们发现 liveness-exec-pod 出现了重启的现象,这是因为,在我们创建这个 Pod 的时候,我们会在 /tmp 下创建一个 live 的文件,60 秒以后会将其删除,当进行存活检测的时候发现该文件没有了,那么 Pod 认为里面的容器死亡了,就会重启,那么就会重新执行一遍 yaml 文件内的配置,这个时候 live 文件又存在了,但是 60 秒以后,又会被删除,就会在重启一遍,以此类推。

  • HTTPGET
vim livenessProbe-httpget.yaml

apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
spec:
containers:
- name: liveness-httpget-container
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
livenessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 10

然后我们查看一下 Pod 的状态:

这个时候我们通过 “kubectl exec liveness-httpget-pod -it – rm -rf /usr/share/nginx/html/index.html” 命令将 index.html 文件删除掉,我们在进行查看 Pod 的状态:

经过一段时间等待,我们发现 liveness-httpget-pod 出现了重启的现象,这是因为,当我们手动删除了 index.html 文件后,当进行存活检测的时候发现该文件没有了,那么 Pod 认为里面的容器死亡了,就会重启,那么就会重新执行一遍 yaml 文件内的配置,这个时候 index.html 文件又存在了,如果我们再次删除该文件,就会在重启一遍,以此类推。

  • TCPSocket
vim livenessProbe-tcp.yaml

apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
spec:
containers:
- name: nginx
image: docker.io/nginx
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 808

然后我们查看一下 Pod 的状态:

​我们可以看到,开始的时候,Pod 创建成功,但是 30 秒以后,重启了第一次,在经过 30 秒以后,又重启了一次,这是因为, nginx 默认开启的端口为 80 ,而当我们开始存活检测的时候,端口为 808 ,因为没有这个端口,所以认定 Pod 死亡,所以重启,当又开始存活检测的时候,依然没有端口,所以继续重启,以此类推。

十一、Pod的健康检查-探针的更多相关文章

  1. Kubernetes中Pod的健康检查

    本文介绍 Pod 中容器健康检查相关的内容.配置方法以及实验测试,实验环境为 Kubernetes 1.11,搭建方法参考kubeadm安装kubernetes V1.11.1 集群 0. 什么是 C ...

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

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

  3. .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查

    上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...

  4. OpenShift添加应用健康检查功能

    什么是健康检查? 对于部署成功的应用来说,通过访问接口.执行特定命令等方式判断应用是否存活.正常的方式称为健康检查. 在 OpenShift 或 Kubernetes 中,健康检查都有两个探针,分别是 ...

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

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

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

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

  7. pod资源的健康检查-readiness探针的httpGet使用

    livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器 readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoint ...

  8. Kubernetes Pod 健康检查

    参考文档: https://jimmysong.io/kubernetes-handbook/guide/configure-liveness-readiness-probes.html 一.Pod的 ...

  9. Pod生命周期和健康检查

    Pod生命周期和健康检查 Pod的生命周期涵盖了前面所说的PostStart 和 PreStop在内 Pod phase Pod的status定义在 PodStatus对象中,其中有一个phase字段 ...

随机推荐

  1. java学习第一天.day04

    顺序结构 代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. 选择结构 选择结构也被称为分支结构.代码根据逻辑 ...

  2. c# 异步进阶————channel [一]

    前言 该系列为异步编程的进阶篇,其实也不能这么讲.世界上本没有进阶篇,只能说是高级篇(高级篇不能说多高级,是对底层的封装的意思),只要是加深理解都是进阶. 本章先介绍一下channel. 正文 下面没 ...

  3. KingbaseES R6 集群手工配置VIP案例

    经常有用户问,V8R6集群搭建时没有配置VIP,搭建完成后,如何添加VIP?以下向大家介绍下手动添加VIP 的过程. 一.操作系统环境 操作系统(UOS): root@uos01:~# cat /et ...

  4. Docker_构建_运行总结

    样例: 构建镜像 build-image-fim-backend.sh echo "开始构建 fim-backend 镜像..." cp -rp ../target/fim-bac ...

  5. 使用【阿里云】服务器、【Xshell】搭建自己的【网站】—— { }

    重置实例密码 打开Xshell连接主机 Apache 服务 安装 yum install httpd* -y 操作 启动 systemctl start httpd.service 查看状态 syst ...

  6. winfrom,窗体抖动功能

    #region 方法一 Point first = this.Location; for (int i = 0; i < 50; i++) { Application.DoEvents(); R ...

  7. Openstack neutron:SDN现状

    目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF -  ...

  8. 《Win10——如何设置开机自启动项》

    Win10--如何设置开机自启动项       1. 为需要自启动的程序创建快捷方式. 2. Win+R输入"shell:startup",按下回车键出现一个文件夹. 3. 将快捷 ...

  9. Visual Studio 2022 Community 不完全攻略

    0. 前言 建议结合视频阅读哦 Visual Studio 2022 Community 不完全攻略 有问题或者意见欢迎评论 ! 1. 下载&安装 Visual Studio Communit ...

  10. 使用Gitlab CI/CD功能在本地部署 Spring Boot 项目

    前提条件: 1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runn ...