如何在Kubernetes上保持运行docker容器,不关闭?

小蕊 发表于: 2019-08-21   最后更新时间: 2019-08-21  

我现在正在尝试在Kubernetes集群上运行一个带shell(/bin/bash)的简单容器。

有一种方法可以通过使用pseudo-ttydetach选项(docker run命令上的-td选项)来保持容器在Docker容器上运行,不会关闭。

例如,

$ sudo docker run -td ubuntu:latest

在Kubernetes(k8s)该怎么做?

我尝试使用kubectl run-container命令运行容器,如:

kubectl run-container test_container ubuntu:latest --replicas=1

但是容器几秒钟就会退出,并且ReplicationController重复再次启动它,一直反复。

有没有办法让容器在Kubernetes上运行,就像docker run命令中的-td选项一样?



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kubernetes如何让在pod中运行的代码知道其pod的名称
下一条: 如何滚动重启pod而不改变kubernetes(k8s)中的部署yaml?

  • 容器退出其实是它认为完成了。所以你需要为容器提供永不完成的任务,如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntu
    spec:
      containers:
      - name: ubuntu
        image: ubuntu:latest
        # Just spin & wait forever
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "while true; do sleep 30; done;" ]
    
    • 你也可以在DockerfileCMD加上:

      CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"
      

      这也将会保持容器活着,直到被告知停止。使用trapwait可以立即做出反应,仅需要几秒。
      对于基于busybox的镜像(用于基于alpine的镜像),通过sleep无穷尽来保持活跃。此解决方法为你提供了与docker stop相同的即时响应,如上面的例子:

      CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"