探针-就绪探测、存活探测

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

  ExecActive:在容器内执行指定命令,若命令退出时返回码为0,则认为诊断成功

  TCPSockeAction:对指定端口上的容器的ip地址进行tcp检查,如果端口打开,则诊断为成功

  HTTPGetAction:对指定端口和路径上的容器ip地址执行HTTP Get请求,如果相应的状态码>200且<400,则诊断是成功的

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

  成功:容器通过了诊断

  失败:容器未通过诊断

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

两种探测方式

  • livenessProbe(存活检测):指示容器是否正在运行,如果存活检测失败,则kubelet会杀死容器,并且容器将受到其重启策略的影响。如果容器不提供存活探针,则默认状态为Success
  • readinessProbe(就绪探测):指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与Pod匹配的所有的service的端点中删除该Pod的IP地址,初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success

测试

## 就绪探测
## 创建yaml文件
vim readinessProbe-httpget.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: hub.vfancloud.com/test/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index1.html
initialDelaySeconds: 1 #Pod开启后,延迟1s再进行检测
periodSeconds: 3 #检测间隔时长
... ## 查看Pod状态,状态为运行,却没ready
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
readiness-httpget-pod 0/1 Running 0 14s ## 查看描述,报错404
[root@Centos8 k8sYaml]# kubectl describe pod readiness-httpget-pod
Warning Unhealthy 0s (x2 over 2s) kubelet, testcentos7 Readiness probe failed: HTTP probe failed with statuscode: 404 ## 添加index1.html即可ready
[root@Centos8 k8sYaml]# kubectl exec -it readiness-httpget-pod -- touch /usr/share/nginx/html/index1.html
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
readiness-httpget-pod 1/1 Running 0 5m5s

存活检测

## 存活检测,只要存活检测失败,就会重启Pod
## 创建exec yaml文件
vim livenessProbe-exec.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox:v1
imagePullPolicy: IfNotPresent
command: ['sh','-c','touch /tmp/live ;sleep 60; rm -f /tmp/live; sleep 3600']
livenessProbe:
exec:
command: ['test','-e','/tmp/live'] #检测有无/tmp/live文件
initialDelaySeconds: 1 #Pod开启后,延迟1s再进行检测
periodSeconds: 3 #检测间隔时长
... ## 前60s Pod是正常运行状态
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
liveness-exec-pod 1/1 Running 0 5s
readiness-httpget-pod 1/1 Running 0 39m ## 60s后,Pod已经出错重启一次
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
liveness-exec-pod 1/1 Running 1 118s
readiness-httpget-pod 1/1 Running 0 41m ## 创建httpGet yaml文件
vim livenessProbe-httpget.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
namespace: default
spec:
containers:
- name: liveness-httpget-container
image: hub.vfancloud.com/test/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
livenessProbe:
httpGet:
port: 80
path: /index.html #请求此文件内容
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 10 #最大请求时长
... ## 查看pod
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
liveness-httpget-pod 1/1 Running 0 3s ## 测试删除index.html文件,Pod已经开始重启
[root@Centos8 k8sYaml]# kubectl exec -it liveness-httpget-pod -- rm -f /usr/share/nginx/html/index.html
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
liveness-httpget-pod 1/1 Running 1 84s ## 创建tcp yaml文件
vim livenessProbe-tcp.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
namespace: default
spec:
containers:
- name: nginx
image: hub.vfancloud.com/test/myapp:v1
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket: #检测8080是否存在
port: 8080
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 10
... ## 因为镜像内没开启8080,所以Pod会一直重启
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
liveness-httpget-pod 1/1 Running 1 18s

Kubernetes-7:Pod健康检查原理-探针(就绪检测、存活检测)的更多相关文章

  1. kubernetes之pod健康检查

    目录 kubernetes之pod健康检查 1.概述和分类 2.LivenessProbe探针(存活性探测) 3.ReadinessProbe探针(就绪型探测) 4.探针的实现方式 4.1.ExecA ...

  2. Kubernetes中Pod健康检查

    目录 1.何为健康检查 2.探针分类 2.1.LivenessProbe探针(存活性探测) 2.2.ReadinessProbe探针(就绪型探测) 3.探针实现方法 3.1.Container Exe ...

  3. K8s-Pod健康检查原理与实践

    Pod健康检查介绍 默认情况下,kubelet根据容器运行状态作为健康依据,不能监视容器中应用程序状态,例如程序假死.这将会导致无法提供服务,丢失流量.因此重新健康检查机制确保容器健康幸存.Pod通过 ...

  4. Kubernetes Pod 健康检查

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

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

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

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

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

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

    使用liveness探针httpget方式检测pod健康,httpGet方式使用的最多 [root@k8s-master1 tanzhen]# cat nginx_pod_httpGet.yaml a ...

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

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

  9. K8s中Pod健康检查源代码分析

    了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行.如果liveness探测为fail,则kubelet会kill掉容器,并且会触发restart设置的策略. ...

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

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

随机推荐

  1. VUE手稿1

  2. Java uuid生成随机32位

    import java.util.UUID; /** * @ClassName:UuidUtils * @Description:uuid工具类 * @Author:chenyb * @Date:20 ...

  3. Spring DI(依赖注入)自动装配 @Autowired、@Resource注解

    @Autowired:一部分功能是查找实例,从Spring容器中根据类型(Java类)获取对应的实例:另一部分功能就是赋值,将找到的实例,装配给另一个实例的属性值.(注:一个Java类型在同一个Spr ...

  4. 全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

    全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类 摘要 本文主要介绍了串口通信协议的基本概念.串口通信的基本流程.如何使用 Python 语言创建一个 ...

  5. [oeasy]python0117 文字的演化_埃及圣书体_象形文字_楔形文字

    埃及圣书体 回忆上次内容 两河流域 苏美尔文明 所使用的 楔形文字 不是象形文字     ​   添加图片注释,不超过 140 字(可选)   楔形文字的字型 究竟是怎么来的呢?   巴别塔 苏美尔的 ...

  6. Langchain 与 LlamaIndex:LLM 应用开发框架的比较与使用建议

    Langchain 和 Llamaindex 是两种广泛使用的主流 LLM 应用开发框架.两者有什么不同?我们该如何使用?以下我根据各类资料和相关文档做了初步选型. 一.Langchain 1. 适用 ...

  7. TIER 0: Meow

    TIER 0: Meow Virtual Machine 虚拟机 (VM) 指通过软件模拟完整计算机系统 可以实现环境隔离 模型宿主机不具备的架构 虚拟机的工作原理:在物理机器的操作系统上,以一个应用 ...

  8. 学习笔记--Java合集

    学习笔记--Java合集 JDK8 基础篇 我的第一个Java程序 Java标识符 Java 字面值 Java中的变量 Java中的数据类型 Java 运算符 Java 控制语句 方法 Java方法基 ...

  9. 记一些java里的数据结构

    0.Vector:过期的,被arraylist取代了 0.1Stack:也不建议使用 1.双向链表LinkedList:由list实现的接口类 2.队列Queue:操作为add remove elem ...

  10. 百度翻译network里没有sug(文章发布时间2022年10月)

    百度翻译已经更新,现在的百度翻译分为两个阶段翻译,第一个阶段识别你的翻译字符是什么类型语言 第二阶段生成随机sign加携带token以post表单方式上传数据,返回json数据 尚硅谷在B站发布的的爬 ...