Kubernetes学习之Pod探测

本文详细介绍了Kubernetes中Pod的存活性和就绪性探测机制,包括Exec、HTTP和TCP三种探测类型。存活性探测用于判断容器是否运行正常,而就绪性探测则确认容器是否准备好提供服务。当探测失败时,根据重启策略,kubelet会采取相应行动,如重启容器。文中通过具体示例展示了不同探测方式的工作原理和配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Pod存活性探测
  有不少的应用长时间持续运行后逐渐转为不可用状态,并且仅能通过重启操作来恢复,Kubernetes的容器存活性探测机制可发现诸如此类的问题,并根据探测结果结合重启策略触发后续的行为。存活性探测是隶属于容器级别的配置,kubelet可基于它判定何时需要重启一个容器,该诊断操作由容器的处理器(handler)进行定义的。Kubernetes支持三种处理器用于Pod的探测:
  1)ExecAction:在容器中执行一个命令,并根据其返回的状态码进行诊断的操作称为Exec探测,状态码为0表示探测诊断成功,否则Pod即为不健康状态
  2)TCPSocketAction:通过与容器的某TCP端口尝试建立连接进行诊断,端口能够成功打开即为正常状态,否则为不健康状态
  3)HTTPGetAction:通过向容器IP地址的某个指定端口的指定path发起HTTP GET请求进行诊断,响应码为2XX或3XX时即为成功,否则为失败
在这里插入图片描述
  存活性探测:用于判定容器是否处于"运行"状态;一旦此类检测未通过,kubelet将杀死容器并根据其restartPolicy决定是否将其重启;未定义存活性检测的容器默认状态为"Success"
  就绪性探测:用于判断容器是否准备就绪并可对外提供服务;未通过检测的容器意味着其尚未准备就绪,端点控制器(如Service对象)会将其IP从所有匹配到此Pod对象的Service对象的端点列表中移除;检测通过之后,会再次将其IP添加至端点列表中

二、容器的重启策略
  容器程序发生崩溃或容器申请超出限制等原因都可能会导致Pod对象的终止,此时是否应该重建该Pod对象则取决于其重启策略(restartPolicy)属性的定义:
  1)Always:但凡Pod对象终止就将其重启,此为默认设定
  2)OnFailure:仅在Pod对象出现错误时方才将其重启
  3)Never:从不重启
  需要注意的是,restartPolicy适用于Pod对象中的所有容器,而且它仅用于控制在同一节点上重新启动Pod对象的相关容器。首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作的延迟时长依次是10秒、20秒、40秒、80秒、160秒和300秒,300秒是最大延迟。事实上,一旦绑定到一个节点,Pod对象将永远不会被重新绑定到另一个节点上,它要么被重启,要么终止,直到节点发生故障或者被删除。

三、Exec探针
  exec类型的探针通过在目标容器中执行由用户自定义的命令来判断容器的健康状态,若命令状态返回值为0则表示"成功"通过检测,其它值均为"失败"状态。

1)编写exec探针yaml文件

]# cat exec.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: exec-pod
  labels: 
    test: liveness-exec
spec:
  containers:
  - name: liveness-exec-demo
    image: busybox
    imagePullPolicy: IfNotPresent
    args: ["/bin/sh","-c"," touch /tmp/healthy; sleep 60; rm -rf /tmp/healthy; sleep 600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/healthy"]

]# kubectl apply -f exec.yaml 
pod/exec-pod created

2)检测Pod内文件是否存在

]# kubectl get pods -o wide 
NAME       READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
exec-pod   1/1     Running   0          12s   10.244.1.42   node1   <none>           <none>

]# kubectl exec exec-pod -it -- /bin/sh
/ # ls /tmp/ -l 
total 0
-rw-r--r--    1 root     root             0 Aug  1 11:21 healthy
/ # exit

此处可以看到容器中是存在此文件的

3)再次查看Pod状态

]# kubectl get pods -o wide 
NAME       READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
exec-pod   1/1     Running   1          2m37s   10.244.1.42   node1   <none>           <none>

# kubectl exec exec-pod -it -- /bin/sh
/ # ls -l /tmp/
total 0

过了60秒之后,再次查看Pod的状态发现该Pod已经重启了一次,说明Pod的存活性检测失败了,再进入Pod中查看文件已经被删除了

4)查看Pod的详细信息

]# kubectl describe pods exec-pod
Name:         exec-pod
Namespace:    default
Priority:     0
Node:         node1/172.16.2.101
Start Time:   Sat, 01 Aug 2020 19:21:03 +0800
Labels:       test=liveness-exec
Annotations:  Status:  Running
IP:           10.244.1.42
IPs:
  IP:  10.244.1.42
Containers:
  liveness-exec-demo:
    Container ID:  docker://e06871bd25c2b0d556821a2bd87de0e2f4862bb43bb90cb2b7e5fe2b6b740772
    Image:         busybox
    Image ID:      docker-pullable://busybox@sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
    Port:          <none>
    Host Port:     <none>
    Args:
      /bin/sh
      -c
       touch /tmp/healthy; sleep 60; rm -rf /tmp/healthy; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值