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

小蕊 发表于: 2019-08-21   最后更新时间: 2019-08-21 22:55:06   8,842 游览

我现在正在尝试在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选项一样?

发表于 2019-08-21

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

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;" ]
半兽人 -> 小蕊 4年前

你也可以在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"
小蕊 -> 半兽人 4年前

非常感谢,理解了k8s启动容器的工作原理。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题