Kubernetes实践之深入掌握Pod——Pod健康检查和服务可用性检查
1|0Pod健康检查和服务可用性检查
Kubernetes对Pod的健康状态可以通过两类探针来检查:
(1)LivenessProbe探针:用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。
(2)ReadinessProbe探针:用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的 Pod,Service与Pod Endpoint的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready状态变为False,则系统自动将其从Service 的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回 后端Endpoint列表。
对于LivenessProbe和ReadinessProbe用法都一样,拥有相同的参数和相同的监测方式。
- initialDelaySeconds:用来表示初始化延迟的时间,也就是告诉监测从多久之后开始运行,单位是秒
- timeoutSeconds: 用来表示监测的超时时间,如果超过这个时长后,则认为监测失败
1|1 LivenessProbe和ReadinessProbe均可配置以下三种实现方式
例子中只使用livenessProbe更换只需要改为readinessProbe:
(1)ExecAction:在容器内部执行一个命令,如果该命令的返回码为0,则表明容器健康
在下面的例子中,通过执行“cat /tmp/health”命令来判断一个容器运行是否正常。在该Pod运行后,将在创建/tmp/health文件10s后删除该文 件,而LivenessProbe健康检查的初始探测时间(initialDelaySeconds)为 15s,探测结果是Fail,将导致kubelet杀掉该容器并重启它
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <code-pre class= "code-pre" id = "pre-tWR5z6" ><code-line class= "line-numbers-rows" >< /code-line >apiVersion: v1 <code-line class= "line-numbers-rows" >< /code-line >kind: Pod <code-line class= "line-numbers-rows" >< /code-line >metadata: <code-line class= "line-numbers-rows" >< /code-line > labels: <code-line class= "line-numbers-rows" >< /code-line > test : liveness <code-line class= "line-numbers-rows" >< /code-line > name: liveness- exec <code-line class= "line-numbers-rows" >< /code-line >spec: <code-line class= "line-numbers-rows" >< /code-line > containers: <code-line class= "line-numbers-rows" >< /code-line > - name: liveness <code-line class= "line-numbers-rows" >< /code-line > image: busybox <code-line class= "line-numbers-rows" >< /code-line > command : [ "sh" , "-c" ] <code-line class= "line-numbers-rows" >< /code-line > args: <code-line class= "line-numbers-rows" >< /code-line > - /bin/sh <code-line class= "line-numbers-rows" >< /code-line > - -c <code-line class= "line-numbers-rows" >< /code-line > - echo ok > /tmp/health ; sleep 10; rm -rf /tmp/health ; sleep 600 <code-line class= "line-numbers-rows" >< /code-line > livenessProbe: <code-line class= "line-numbers-rows" >< /code-line > exec : <code-line class= "line-numbers-rows" >< /code-line > command : <code-line class= "line-numbers-rows" >< /code-line > - cat <code-line class= "line-numbers-rows" >< /code-line > - /tmp/health <code-line class= "line-numbers-rows" >< /code-line > initialDelaySeconds: 15 <code-line class= "line-numbers-rows" >< /code-line > timeoutSeconds: 1 <code-line class= "line-numbers-rows" >< /code-line > <code-line class= "line-numbers-rows" >< /code-line >[root@lab-26 ~] # kubectl apply -f /data/k8s-yaml/test/dp.yaml < /code-pre > |
(2)TCPSocketAction:通过容器的IP地址和端口号执行TCP检 查,如果能够建立TCP连接,则表明容器健康
在下面的例子中,通过与容器内的localhost:80建立TCP连接进行健康检查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <code-pre class= "code-pre" id = "pre-ZN2y4H" ><code-line class= "line-numbers-rows" >< /code-line >apiVersion: v1 <code-line class= "line-numbers-rows" >< /code-line >kind: Pod <code-line class= "line-numbers-rows" >< /code-line >metadata: <code-line class= "line-numbers-rows" >< /code-line > name: pod-with-healthcheck2 <code-line class= "line-numbers-rows" >< /code-line >spec: <code-line class= "line-numbers-rows" >< /code-line > containers: <code-line class= "line-numbers-rows" >< /code-line > - name: nginx <code-line class= "line-numbers-rows" >< /code-line > image: nginx <code-line class= "line-numbers-rows" >< /code-line > ports: <code-line class= "line-numbers-rows" >< /code-line > - containerPort: 80 <code-line class= "line-numbers-rows" >< /code-line > livenessProbe: <code-line class= "line-numbers-rows" >< /code-line > tcpSocket: <code-line class= "line-numbers-rows" >< /code-line > port: 80 <code-line class= "line-numbers-rows" >< /code-line > initialDelaySeconds: 30 <code-line class= "line-numbers-rows" >< /code-line > timeoutSeconds: 1 < /code-pre > |
(3)HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康
在下面的例子中,kubelet定时发送HTTP请求到 localhost:80/_status/healthz来进行容器应用的健康检查(文件是之前build镜像创建的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <code-pre class= "code-pre" id = "pre-4fpKKB" ><code-line class= "line-numbers-rows" >< /code-line >apiVersion: v1 <code-line class= "line-numbers-rows" >< /code-line >kind: Pod <code-line class= "line-numbers-rows" >< /code-line >metadata: <code-line class= "line-numbers-rows" >< /code-line > name: pod-with-healthcheck <code-line class= "line-numbers-rows" >< /code-line >spec: <code-line class= "line-numbers-rows" >< /code-line > containers: <code-line class= "line-numbers-rows" >< /code-line > - name: nginx <code-line class= "line-numbers-rows" >< /code-line > imagePullPolicy: Never <code-line class= "line-numbers-rows" >< /code-line > image: harbor. op .com /public/nginx-hralthz :latest <code-line class= "line-numbers-rows" >< /code-line > ports: <code-line class= "line-numbers-rows" >< /code-line > - containerPort: 80 <code-line class= "line-numbers-rows" >< /code-line > livenessProbe: <code-line class= "line-numbers-rows" >< /code-line > httpGet: <code-line class= "line-numbers-rows" >< /code-line > path: /healthz <code-line class= "line-numbers-rows" >< /code-line > port: 80 <code-line class= "line-numbers-rows" >< /code-line > initialDelaySeconds: 10 <code-line class= "line-numbers-rows" >< /code-line > timeoutSeconds: 1 <code-line class= "line-numbers-rows" >< /code-line > <code-line class= "line-numbers-rows" >< /code-line >[root@lab-26 ~] # kubectl apply -f /data/k8s-yaml/test/dp.yaml <code-line class= "line-numbers-rows" >< /code-line > <code-line class= "line-numbers-rows" >< /code-line >[root@lab-26 ctchat] # kubectl get pod -owide <code-line class= "line-numbers-rows" >< /code-line >NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES <code-line class= "line-numbers-rows" >< /code-line >dapi- test -pod-volume 1 /1 Running 0 6h41m 172.152.106.4 minikube <code-line class= "line-numbers-rows" >< /code-line >pod-with-healthcheck 1 /1 Running 0 44s 172.152.106.6 minikube <code-line class= "line-numbers-rows" >< /code-line >pod-with-healthcheck2 1 /1 Running 0 68m 172.152.106.7 minikube <code-line class= "line-numbers-rows" >< /code-line >[root@lab-26 ctchat] # curl http://172.152.106.6/healthz <code-line class= "line-numbers-rows" >< /code-line >ok < /code-pre > |
__EOF__

本文链接:https://www.cnblogs.com/Wshile/p/12951429.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!