云原生之K8S中Pod健康检测、服务可用性检查详解

如题所述

第1个回答  2022-06-12

中秋明月,豪门有,贫家也有。极慰人心。 ——烽火戏诸侯《剑来》

探测的目的 : 用来维持 pod的健壮性,当pod挂掉之后,deployment会生成新的pod,但如果pod是正常运行的,但pod里面出了问题,此时deployment是监测不到的。故此需要探测(probe)-pod是不是正常提供服务的

Kubernetes 对 Pod 的 健康 状态可以通过两类探针来检查: LivenessProbe 和 ReadinessProbe , kubelet定期执行这两类探针来诊断容器的 健康 状况。都是通过deployment实现的

LivenessProbe 和 ReadinessProbe 均可配置以下三种实现方式。

对于每种探测方式,需要设置 initialDelaySeconds 和 timeoutSeconds 等参数,它们的含义分别如下。

Kubernetes的ReadinessProbe机制可能无法满足某些复杂应用对容器内服务可用状态的判断

Pod的Readiness Gates在Pod定义中的ReadinessGate字段进行设置。下面的例子设置了一个类型为www.example.com/feature-1的新ReadinessGate:

用于判断容器是否存活(Running状态) ,如果LivenessProbe探针探测到容器不 健康 ,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理

在容器内部执行一个命令,如果该命令的返回码为0,则表明容器 健康 。

资源文件定义

运行这个deploy。当pod创建成功后,新建文件,并睡眠30s,删掉文件在睡眠。使用liveness检测文件的存在

运行超过30s后。文件被删除,所以被 健康 检测命中,pod根据重启策略重启

99s后已经从起了第二次

查看节点机docker中的容器ID,前后不一样,确定是POD被杀掉后重启。

通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器 健康 。
创建资源文件,即相关参数使用

运行deploy,这个的探测机制访问Ngixn的默认欢迎页

当欢迎页被删除时,访问报错,被检测命中,pod重启

通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器 健康 。
资源文件定义

访问8080端口,但是8080端口未开放,所以访问会超时,不能建立连接,命中检测,重启Pod

用于判断容器服务是否可用(Ready状态) ,达到Ready状态的Pod才可以接收请求。负责不能进行访问

资源文件定义,使用钩子建好需要检查的文件

创建3个有Ngixn的pod,通过POD创建一个SVC做测试用

修改主页文字

修改标签

要删除文件检测

使用POD创建SVC

测试SVC正常,三个POD会正常 负载

删除文件测试

会发现pod-liveness的pod已经不提供服务了

kube-apiserver.yaml中的使用,两种探针同时使用