云原生之K8S中Pod健康检测、服务可用性检查详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生之K8S中Pod健康检测、服务可用性检查详解相关的知识,希望对你有一定的参考价值。
参考技术A中秋明月,豪门有,贫家也有。极慰人心。 ——烽火戏诸侯《剑来》
探测的目的 : 用来维持 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中的使用,两种探针同时使用
以上是关于云原生之K8S中Pod健康检测、服务可用性检查详解的主要内容,如果未能解决你的问题,请参考以下文章
关于 Kubernetes中Pod健康检测和服务可用性检查的一些笔记(LivenessProbe+ReadinessProbe)
云原生之kubernetes实战k8s集群核心资源对象之Pod
云原生之kubernetes实战在k8s环境下部署Discuz论坛系统