微信公众号搜索DevOps和k8s全栈技术,点击关注即可,每天会分享技术和生活点滴,共同成长,共同进步~

Pod 常见的状态

Pending:挂起,我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。已经创建了但是没有适合它运行的节点叫做挂起,这其中也包含集群为容器创建网络,或者下载镜像的过程。

Running:Pod内所有的容器都已经被创建,且至少一个容器正在处于运行状态、正在启动状态或者重启状态。

Succeeded:Pod中所以容器都执行成功后退出,并且没有处于重启的容器。

Failed:Pod中所以容器都已退出,但是至少还有一个容器退出时为失败状态。
Unknown:未知状态,所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的,如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown

Pod重启策略

Always:      只要容器失效退出就重新启动容器。

OnFailure:  当容器以非正常退出后重新启动容器。
Never:        无论容器状态如何,都不重新启动容器。

如果pod的restartpolicy没有设置,那么默认值是Always。

Pod常见状态转换场景

Pod的存活性探测与就序性探测

1、Pod 探针机制
在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为某也意外情况致使程序挂掉。那么如何监控这些容器状态稳定性,保证服务在运行期间不会发生问题,发生问题后进行重启等机制,就成为了重中之重的事情,考虑到这点 kubernetes 推出了活性探针机制。有了活性探针后能保证程序在运行中如果挂掉能够自动重启,但是还有个经常遇到的问题,比如说,在Kubernetes 中启动Pod,显示明明Pod已经启动成功,且能访问里面的端口,但是却返回错误信息。还有就是在执行滚动更新时候,总会出现一段时间,Pod对外提供网络访问,但是访问却发生404,这两个原因,都是因为Pod已经成功启动,但是 Pod 的的容器中应用程序还在启动中导致,考虑到这点Kubernetes推出了就绪探针机制。
2、Pod 两种探针简介
LivenessProbe(存活探针):

存活探针主要作用是,用指定的方式进入容器检测容器中的应用是否正常运行,如果检测失败,则认为容器不健康,那么 Kubelet 将根据 Pod 中设置的 restartPolicy (重启策略)来判断,Pod 是否要进行重启操作,如果容器配置中没有配置livenessProbe存活探针,Kubelet 将认为存活探针探测一直为成功状态。
ReadinessProbe(就绪探针):

用于判断容器中应用是否启动完成,当探测成功后才使 Pod 对外提供网络访问,设置容器 Ready 状态为 true,如果探测失败,则设置容器的 Ready 状态为 false。对于被 Service 管理的 Pod,Service 与 Pod、EndPoint 的关联关系也将基于 Pod 是否为 Ready 状态进行设置,如果 Pod 运行过程中 Ready 状态变为 false,则系统自动从 Service 关联的 EndPoint 列表中移除,如果 Pod 恢复为 Ready 状态。将再会被加回 Endpoint 列表。通过这种机制就能防止将流量转发到不可用的 Pod 上。
3、Pod 探针的探测方式与结果
目前 LivenessProbe 和 ReadinessProbe 两种探针都支持下面三种探测方法:
    ExecAction:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。
    HTTPGetAction:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器 健康。
    TCPSocketAction:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。
探针探测结果有以下值:

Success:表示通过检测。
Failure:表示未通过检测。
Unknown:表示检测没有正常进行。

4、Pod 探针的相关属性
探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为(Probe):
    initialDelaySeconds:Pod 启动后首次进行检查的等待时间,单位“秒”。
    periodSeconds:检查的间隔时间,默认为 10s,单位“秒”。
    timeoutSeconds:探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
    successThreshold:探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
    failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,最小值为 1s。
5、两种探针的区别
ReadinessProbe 和 livenessProbe 可以使用相同探测方式,只是对 Pod 的处置方式不同:
readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。
livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

探针使用示例

1、LivenessProbe 探针使用示例
(1)、通过exec方式做健康探测
示例文件 liveness-exec.yaml

apiVersion: v1
kind: Pod
metadata:name: liveness-execlabels:app: liveness
spec:containers:- name: livenessimage: busyboxargs:                       #创建测试探针探测的文件- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600livenessProbe:initialDelaySeconds: 10   #延迟检测时间periodSeconds: 5          #检测时间间隔exec:command:- cat- /tmp/healthy

容器启动设置执行的命令:

/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

容器在初始化后,首先创建一个 /tmp/healthy 文件,然后执行睡眠命令,睡眠 30 秒,到时间后执行删除 /tmp/healthy 文件命令。而设置的存活探针检检测方式为执行 shell 命令,用 cat 命令输出 healthy 文件的内容,如果能成功执行这条命令,存活探针就认为探测成功,否则探测失败。在前 30 秒内,由于文件存在,所以存活探针探测时执行 cat /tmp/healthy 命令成功执行。30 秒后 healthy 文件被删除,所以执行命令失败,Kubernetes 会根据 Pod 设置的重启策略来判断,是否重启 Pod。
(2)、通过HTTP方式做健康探测
示例文件 liveness-http.yaml

apiVersion: v1
kind: Pod
metadata:name: liveness-httplabels:test: liveness
spec:containers:- name: livenessimage: mydlqclub/springboot-helloworld:0.0.1livenessProbe:initialDelaySeconds: 20   #延迟加载时间periodSeconds: 5          #重试时间间隔timeoutSeconds: 10        #超时时间设置httpGet:scheme: HTTPport: 8081path: /actuator/health

上面 Pod 中启动的容器是一个 SpringBoot 应用,其中引用了 Actuator 组件,提供了 /actuator/health 健康检查地址,存活探针可以使用 HTTPGet 方式向服务发起请求,请求 8081 端口的 /actuator/health 路径来进行存活判断:

任何大于或等于200且小于400的代码表示探测成功。
任何其他代码表示失败。

如果探测失败,则会杀死 Pod 进行重启操作。
httpGet探测方式有如下可选的控制字段:

scheme: 用于连接host的协议,默认为HTTP。
host:要连接的主机名,默认为Pod IP,可以在http request head中设置host头部。
port:容器上要访问端口号或名称。
path:http服务器上的访问URI。
httpHeaders:自定义HTTP请求headers,HTTP允许重复headers。

(3)、通过TCP方式做健康探测
示例文件 liveness-tcp.yaml

apiVersion: v1
kind: Pod
metadata:name: liveness-tcplabels:app: liveness
spec:containers:- name: livenessimage: nginxlivenessProbe:initialDelaySeconds: 15periodSeconds: 20tcpSocket:port: 80

TCP 检查方式和 HTTP 检查方式非常相似,在容器启动 initialDelaySeconds 参数设定的时间后,kubelet 将发送第一个 livenessProbe 探针,尝试连接容器的 80 端口,如果连接失败则将杀死 Pod 重启容器。

2、ReadinessProbe 探针使用示例

Pod 的ReadinessProbe 探针使用方式和 LivenessProbe 探针探测方法一样,也是支持三种,只是一个是用于探测应用的存活,一个是判断是否对外提供流量的条件。这里用一个 Springboot 项目,设置 ReadinessProbe 探测 SpringBoot 项目的 8081 端口下的 /actuator/health 接口,如果探测成功则代表内部程序以及启动,就开放对外提供接口访问,否则内部应用没有成功启动,暂不对外提供访问,直到就绪探针探测成功。
示例文件 readiness-exec.yaml

apiVersion: v1
kind: Service
metadata:name: springbootlabels:app: springboot
spec:type: NodePortports:- name: serverport: 8080targetPort: 8080nodePort: 31180- name: managementport: 8081targetPort: 8081nodePort: 31181selector:app: springboot
---
apiVersion: v1
kind: Pod
metadata:name: springbootlabels:app: springboot
spec:containers:- name: springbootimage: mydlqclub/springboot-helloworld:0.0.1ports:- name: servercontainerPort: 8080- name: managementcontainerPort: 8081readinessProbe:initialDelaySeconds: 20   periodSeconds: 5          timeoutSeconds: 10   httpGet:scheme: HTTPport: 8081path: /actuator/health

3、ReadinessProbe + LivenessProbe 配合使用示例
一般程序中需要设置两种探针结合使用,并且也要结合实际情况,来配置初始化检查时间和检测间隔,下面列一个简单的 SpringBoot 项目的 Deployment 例子。

apiVersion: v1
kind: Service
metadata:name: springbootlabels:app: springboot
spec:type: NodePortports:- name: serverport: 8080targetPort: 8080nodePort: 31180- name: managementport: 8081targetPort: 8081nodePort: 31181selector:app: springboot
---
apiVersion: apps/v1
kind: Deployment
metadata:name: springbootlabels:app: springboot
spec:replicas: 1selector:matchLabels:app: springboottemplate:metadata:name: springbootlabels:app: springbootspec:containers:- name: readinessimage: mydlqclub/springboot-helloworld:0.0.1ports:- name: server containerPort: 8080- name: managementcontainerPort: 8081readinessProbe:initialDelaySeconds: 20 periodSeconds: 5      timeoutSeconds: 10        httpGet:scheme: HTTPport: 8081path: /actuator/healthlivenessProbe:initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 httpGet:scheme: HTTPport: 8081path: /actuator/health

技术交流

学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群

微信:luckylucky421302

按如下指纹可关注公众号

版权声明:本文为CSDN博主「超级小豆丁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32641153/article/details/100614499

Kubernetes Pod健康检查-livenessProbe和readinessProbe相关推荐

  1. kubernetes之pod健康检查

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

  2. Kubernetes之健康检查与服务依赖处理

    本文讲的是Kubernetes之健康检查与服务依赖处理[编者的话]对线上业务来说,保证服务的正常稳定是重中之重,对故障服务的及时处理避免影响业务以及快速恢复一直是开发运维的难点.Kubernetes提 ...

  3. 理论+实操:K8S的pod健康检查——live、ready、startup

    一:健康检查概述 又被称为探针(probe),探针是检查pod资源 注意:规则可以同时定义 1.1 探针策略类型 livenessProbe 如果检查失败不存活,将杀死容器,根据Pod的restart ...

  4. kuberbetes Pod 健康检查

    判断 Pod 健康状态的两种方式 livenessProbe 存活性探针 readinessProbe 就绪性探针 1.livenessProbe 存活性探针 用于判断容器是否存活,即 Running ...

  5. pod健康检查之容器的存活探针、就绪探针、启动探针

    前言 环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6 为什么需要存活探针和就绪探针 在前面我们介绍过,可以通过配置restartPo ...

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

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

  7. k8s核心技术-Pod(健康检查)_健康检查的方式_以及pod崩溃后如何处理---K8S_Google工作笔记0023

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们给pod做健康检查,有两种方案,一种是容器检查,比如容器死掉了,这样能知道. 但是有时候,比如 ...

  8. k8s pod健康检查(存活、就绪检查):livenessProbe策略配置示例

  9. 浅析Kubernetes Pod重启策略和健康检查

    使用Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力,几乎可以提供服务零停机时间的保障.在创建一个Pod资源后,Kubernetes会为它选择worker节点,然后将其调度到节点上 ...

  10. Knative Serving 健康检查机制分析

    作者|  阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...

最新文章

  1. JS实现HashMap
  2. 数据民工,也能移动办公了:目标检测标注App上线Google Play,分分钟创建私人数据集...
  3. 描述linux系统从开机到登陆界面的启动过程
  4. python 读取txt
  5. java 接口和抽象类的区别6_JAVA基础篇-接口和抽象类的区别
  6. 1910101811-2
  7. 软件架构设计箴言理解
  8. db2 导入数据_IBM BigInsights大数据迁移
  9. 这本京东断货王的Python神书,刷爆整个编程圈!| 测评
  10. Rplidar A1/A2使用及Hector_SLAM建图
  11. 彩钢板进行BS 476-3屋顶外露部分防火测试
  12. python websockets 网络聊天室V1
  13. ZBrush中的法线贴图你知道吗?
  14. Windows10 启动 Docker Desktop 时报错 Containers feature is disabled
  15. ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建
  16. 华为路由器ws5200虚拟服务器,华为路由器配置dhcp怎么弄?华为路由WS5200设置DHCP服务器方法...
  17. 网站制作中关于版权声明的写法
  18. QQ登录提示:登录超时,请检查您的网络或者本机防火墙设置(错误码:0x00000001)
  19. 深度学习入门笔记(四):向量化
  20. 32631、32649分别代表什么坐标系?

热门文章

  1. s5p6818/fs4418系统移植之uboot的移植
  2. python爬虫做毕业设计_毕业设计之 --- 爬虫
  3. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
  4. 计算机专业女生网名,微信名字大全女生_女孩微信网名大全
  5. JS特效之超级好看的鼠标小尾巴
  6. 计算机闹铃音乐是什么歌,适合当闹铃的歌曲
  7. 电脑维修小知识(我抄的!)
  8. 判断div是否在可视区内
  9. 9.2练习题6 东风谷早苗 题解
  10. Python数据分析-google play store的app数据分析