Kubernetes--Pod存活性探测(设置exec探针)

有不少应用程序长时间持续运行后会逐渐转为不可用状态,并且仅能通过重启操作恢复,Kubernetes的容器存货性探测机制可发现诸如此类的问题,并根据探测结果结合重启策略触发后续的行为。存活性探测是隶属于容器级别的配置,kubelet可基于它判定何时需要重启一个容器。

Pod spec为容器列表中的相应容器定义其专用的探针(存活性探测机制)即可启用存活性探测。目前,Kubernetes的容器支持存活性探测的方法包含以下三种:ExecAction、TCPSocketAction和HTTPGetAction。

设置exec探针

exec类型的探针通过在目标容器中执行由用户自定义的命令来判定容器的健康状态,若命令状态返回值为0则表示“成功”通过检测,其值均为“失败”状态。“sepc.containers.livenessProbe.exec”字段用于定义此类检测,它只有一个可用属性“command”,用于指定要执行的命令。下面是定义在资源清单文件liveness-exec.yaml中的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness-exec
  name: liveness-exec
spec:
  containers:
  - name: liveness-exec-demo
    image: busybox
    args: ["/bin/sh", "-c", "touch /tmp/hea;thy; sleep 60; rm -rf /tmp/healthy; sleep 600"]
    livenessProbe:
      exec:
        command: ["test", "-e", "/tmp/healthy"]

  

上面的资源清单中定义了一个Pod对象,基于busybox镜像启动一个运行“touch/tmp/healthy;sleep 60;rm -rf/tmp/healthy;slepp 600”命令的容器,此命令在容器启动时创建/tmp/healthy文件,并于60秒之后将其删除。存活性探针运行“test -e/tmp/healthy”命令检查/tmp/hralthy文件的存在性,若文件存在则返回状态码0,表示成功通过测试。

首先,执行类似如下的命令,创建Pod对象liveness-exec:

1
2
]$ kubectl apply -f liveness-exec.yaml
pod “liveness-ecex” created

  

在60秒之内使用“kubectl describe pods/liveness-exec”查看其详细信息,其存活性探针不会出现错误。而超过60秒之后,再次运行“kubectl describe pods/liveness-exec”查看其详细信息可以发现,存活性探测出现了故障,并且隔更长一段时间之后再查看甚至还可以看到容器重启的相关信息。

另外,输出信息的“Containers”一段中还清晰地显示了容器健康状态检测及状态变化的相关信息;容器当前处于“Running”状态,但前一次是为“Terminated”,原因是退出码为137的错误信息,它表示进程是被外部信号所终止的。137事实上是由两部分数字之和生成的;128+signum,其中signum是导致进程终止的信号和数字标识,9表示SIGKILL,这意味着进程是被强行终止的。

将容器重启完成后再次查看,容器已经处于正常运行状态,直到文件再次被删除,存活性探测失败而重启。从下面的命令显示可以看出liveness-exec在4分钟时间内已然重启了两次:


1
2
3
]$ kubectl get pods liveness-exec
NAME            READY   STATUS    RESTARTS   AGE
liveness-exec   1/1     Running   2          40m

  需要特别说明的是,exec指定的命令运行于容器中,会消耗容器的可用资源配额,另外考虑到探测操作的效率本身等因素,探测操作的命令应该尽可能的简单和轻量。


posted @   Zix-  阅读(406)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示