首页 > 解决方案 > 如何检查特定脚本执行是否由 Kubernetes pod 完成

问题描述

我有一个守护程序集,它部署容器来检查几个挂载点的状态。这个 daemonset 部署是从 python 脚本完成的,在部署命令之后不久,我正在收集将由上述 daemonset pod 创建的日志。我看到在触发守护程序创建后不久就会复制日志,并且出于同样的原因,日志不完整。

经过一番调查,我发现daemonset pods仍在执行脚本和写入日志。同时主脚本已经跳转到下一个命令复制日志的kubectl cp命令。

有没有什么办法可以根据仅在脚本执行完成时复制日志的条件来等待。

这是我拥有的代码的一部分

# Create diag pod
cmd = "kubectl apply -f diagnostic_daemon.yaml"
(rc, cmd_out, cmd_err) = cmdHandle.cmd_run(cmd)
if cmd_err.strip():
    print "ERROR: Unbale to create diag POD. Exiting!!!"
    print "> " + REDC + cmd_err.strip() + ENDC
    sys.exit(1)

# wait for the daemonset pod to reach running state
check_daemonset_state("cos-plugin-diag")

print "\n*****Collecting cos-plugin-diag logs*****"
# Collect diag pod logs
global nodeQdigl

标签: kubernetesdaemonset

解决方案


因此,您还需要检查 pod 是否处于Running状态(pod 中的所有容器)

# wait for the pod 
check_pod_state("cos-plugin-diag")

因此,例如,如果 Pod 有 2 个容器,您应该检查2/2

例子:

NAME                                                                 READY     STATUS    RESTARTS   AGE
calico-node-9wnst                                                    2/2       Running   0          6d

您需要检查日志文件中确定日志结尾的字符串的另一方面,您可以使用

kubectl logs <pod-name> -c <container-if-multiple-containers> -n <your-namespace>

希望能帮助到你


推荐阅读