代码之家  ›  专栏  ›  技术社区  ›  gunit

有没有办法将SSH(exec)放到Kubernetes-Jenkins从吊舱中进行调试?

  •  2
  • gunit  · 技术社区  · 7 年前

    在我的Jenkinsfile中出现错误后,那个奴隶代理pod似乎总是很快死去并离开。有没有一种方法可以在我在里面的时候执行并保持它的活力?我用Helm在Kubernetes上运行Jenkins

    1 回复  |  直到 7 年前
        1
  •  5
  •   Janos Lenart    7 年前

    如果吊舱已经死了,你不能 kubectl exec 放入容器中。

    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
    

    一旦你用ssh连接到节点 您有几个调试选项。

    获取输出:

    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
    

    从容器中创建图像,创建新容器并获取外壳:

    nodexxx:~# docker commit zzzz debug
    nodexxx:~# docker run -it zzzz sh
    / # cat /artifact
    quick death