有没有办法SSH(exec)进入Kubernetes Jenkins从属pod进行调试?

gun*_*nit 2 jenkins kubernetes

在我的Jenkins文件出错后,那个slave-agent pod似乎总是死掉并且很快就消失了.当我进去时,有没有办法进入它并保持它活着?我使用Helm在Kubernetes上运行Jenkins

Jan*_*art 5

如果吊舱已经死了,你就无法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
Run Code Online (Sandbox Code Playgroud)

一旦你进入节点ssh,你有几个调试选项.

得到输出:

nodexxx:~# docker logs zzzz
quick death
Run Code Online (Sandbox Code Playgroud)

检查文件系统:

nodexxx:~# mkdir debug; cd debug
nodexxx:~/debug# docker export zzz | tar xv
[...]
nodexxx:~/debug# ls -l; cat artifact
[...]
quick death
Run Code Online (Sandbox Code Playgroud)

从容器创建一个图像,创建一个新容器并获取一个shell:

nodexxx:~# docker commit zzzz debug
nodexxx:~# docker run -it zzzz sh
/ # cat /artifact
quick death
Run Code Online (Sandbox Code Playgroud)