在我的Jenkinsfile中出现错误之后,那个从属代理Pod似乎总是死掉并很快消失。有没有一种方法可以执行它并使它在我处于运行状态时保持 Activity 状态?我正在使用Helm在Kubernetes上运行Jenkins

最佳答案

如果 pods 已经死亡,则无法将kubectl exec放入容器中。

但是,您可以直接将ssh放入运行Pod的节点中,并直接检查(现已停止)容器。 (一旦停止,您就无法在其中添加docker exec了)

像这样:

# this pod will die pretty quickly
$ kubectl run --restart=Never --image=busybox deadpod -- sh -c "echo quick death | tee /artifact"
pod "deadpod" created

$ kubectl describe pod deadpod
Name:           deadpod
Namespace:      default
Node:           nodexxx/10.240.0.yyy
Containers:
  deadpod:
   Container ID: docker://zzzzzzzzz
[...]

$ ssh nodexxx

进入节点之后,您将有几个调试选项。

获取输出:
nodexxx:~# docker logs zzzz
quick death

检查文件系统:
nodexxx:~# mkdir debug; cd debug
nodexxx:~/debug# docker export zzz | tar xv
[...]
nodexxx:~/debug# ls -l; cat artifact
[...]
quick death

从容器创建图像,创建新容器并获得 shell :
nodexxx:~# docker commit zzzz debug
nodexxx:~# docker run -it zzzz sh
/ # cat /artifact
quick death

08-26 13:08