【K8S系列】第九讲:Kubernetes 之探针

发布于:2022-11-08 ⋅ 阅读:(831) ⋅ 点赞:(0)

 

 

目录

​编辑

一、探针是什么

二、探针类型 

2.1 livenessProbe

2.2 readinessProbe

2.3  startupProbe

2.4 总结

2.5 探针示例

三、探测机制

3.1 HTTP GET探针

3.2 TCP套接字探针

3.3 Exec探针

Tips:


一、探针是什么

为了检测得知pod中的容器运行的状态,k8s引入了探针的概念。

探针:简单来说就是为了检测容器运行状态,以保证容器,pod的等整体的正常运行。

在k8s中,最小的单位叫作pod,在pod中运行着一个个容器
简单来说,探针就是kubelet对容器的定期诊断,注意:主体是有kubelet发起
微服务的心跳检测类似,每隔一段时间,检测这个容器是否还正常工作,检测状态分为三种:

  • Success:通过检测
  • Failure:未通过检测
  • Unknown:检测没有正常进行

k8s会根据检测到的不同状态,对容器进行不同的处理

二、探针类型 

探针主要有以下三种类型

  • livenessProbe 
  • readinessProbe
  • startupProbe

2.1 livenessProbe

livenessProbe:存活性探针

从容器启动开始,由kubelet定期执行检测,用于判断容器是不是健康,如果不满足健康条件,那么 Kubelet 会杀死容器(杀死的是container不是pod),并根据restartPolicy重启策略Always,OnFailure,Never)来判断容器是否要进行重启操作;

2.2 readinessProbe

readinessProbe:就绪性探针

用于判断容器内的程序是否存活,如果不满足健康条件,那么会自动从Service的 EndPoint 列表中去除该pod的 IP:Port

有些Pod,需要时间来加载配置或数据,或者需要执行预热过程,以防止第一个用户请求时间太长影响了用户体验。

在这种情况下,不希望该Pod立即开始接收探针请求,尤其是在运行的示例可以正确快速的处理请求的情况下。不要将请求转发到正在启动的Pod中,需要一定的时间去准备,直到完全准备就绪。

这个准备就绪的概念是每个容器特有的东西。

k8s只能检查容器中运行的应用程序是否响应一个简单的GET请求,或者可以响应特定的URL路径通过响应的结果,去判断确定是否准备就绪。

这也是就绪和存活探针的区别。

2.3  startupProbe

startupProbe:启动探针k8s1.16新增加的一种类型

主要解决在慢启动程序或复杂程序中readinessProbe、livenessProbe探针无法较好的判断程序是否启动、是否存活

引入startupProbe探针是为readinessProbe、livenessProbe探针服务。

执行顺序:

如果三个探针同时存在,则先执行startupProbe探针,其他两个探针将会被暂时禁用,直到startupProbe一次探测成功,其他2个探针才启动

如果startupProbe探测失败,kubelet 将杀死容器,并根据restartPolicy重启策略来判断容器是否要进行重启操作。

2.4 总结

启动容器时,可以为k8s配置一个等待时间,经过等待时间后才可以执行第一次准备就绪检查。之后,它会周期性的调用探针,并根据就绪探针的结果采取行动

 

如果某个Pod报告它尚未准备就绪,则会从该服务中删除该Pod。如果Pod再次准备就绪,则重新添加Pod。

就绪探针与存活探针之间的重要区别:如果容器未通过准备检查,则不会被终止或重新启动。

存活探针:通过杀死异常的容器,并用新的正常容器替代他们来保持Pod正常工作

就绪探针:确保只有准备好处理请求的Pod才可以接收探针请求

2.5 探针示例

探针资源 yml 中的常用的配置,如下。可根据具体的需求去设置

spec:
	containers:
		# 就绪探针
		readinessProbe:
			# 检测方式
			httpGet: 
			# 超时时间
			timeoutSeconds: 
			# 延迟时间
			initialDelaySeconds:
			# 失败次数限制
			failureThreshold:
			# 每多少秒检测一次
			periodSeconds:
		# 存活探针
		livenessProbe:
            # 检测方式
			httpGet: 
			# 超时时间
			timeoutSeconds: 
			# 延迟时间
			initialDelaySeconds:
			# 失败次数限制
			failureThreshold:
			# 每多少秒检测一次
			periodSeconds:

三、探测机制

探测机制有三种:

  • HTTP GET探针
  • TCP套接字探针
  • Exec探针

就绪探针/存活探针,都有这三种探测机制。

3.1 HTTP GET探针

该探针,是针对容器的IP地址(或者是指定的端口和地址)执行HTTP GET请求,状态码:

  1. 如果返回状态码是2xx或者3xx,则探测成功
  2. 如果服务器返回错误的状态码或者根本没有反应,那么认定探测失败,容器会被重新启动。

3.2 TCP套接字探针

TCP套接字探针:尝试与容器指定的端口建立连接

  1. 如果连接成功,则探测成功
  2. 如果连接失败,则认定为探测失败,容器将被重新启动

3.3 Exec探针

Exec探针:在容器内执行任意命令,并检查命令的退出状态码,

  1. 如果返回的状态码为0,则探测成功,
  2. 如果返回状态码不为0,则探测失败,容器将被重新启动。

Tips:

如果是java应用,建议用HTTP GET探针、不推荐使用Exec探针,因为java应用程序会消耗大量的计算资源

先到这吧~~~

晚安

 

本文含有隐藏内容,请 开通VIP 后查看