如何检查特定脚本执行是否由 Kubernetes pod 完成

How to check a particular script execution is completed by a Kubernetes pod

我有一个 daemonset,它部署容器来检查几个挂载点的状态。此 daemonset 部署是通过 python 脚本完成的,在部署命令后不久,我正在收集将由上述 daemonset pods 创建的日志。我看到在触发 daemonset 创建后很快就会复制日志,出于同样的原因,日志不完整。

经过一些调查,我发现daemonset pods 仍在执行脚本和写入 logs.Meanwhile 主脚本已经跳转到下一个使用 [=11 复制日志的命令=] 命令。

有什么办法可以让我根据只有脚本执行完成才复制日志的条件来等待

这是我的部分代码

# 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

因此您还需要检查 pods 是否处于 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>

希望对您有所帮助