我怎样才能让容器在Kubernetes上运行?

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

我认为有一种方法可以通过使用伪tty和分离选项( -td docker run命令中的-td选项)来保持容器在Docker容器上docker run

例如

$ sudo docker run -td ubuntu:latest

在kubernetes中有这样的select吗?

我已经尝试使用kubectl run-container命令kubectl run-container

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

但容器会在几秒钟内退出(就像使用docker run命令启动,而不是前面提到的选项),而ReplicationController会再次启动它。

在Docker docker run命令中,是否有任何方法让容器在Kubernetes上运行,如-td选项?

当主进程退出时,容器退出。 做的事情如:

 docker run -itd debian 

坦白地说,容器是一个黑客,只能用于快速testing和例子。 如果你只是想要一个容器来testing几分钟,我会这样做:

 docker run -d debian sleep 300 

这有一个好处,容器会自动退出,如果你忘记了。 或者,你可以在while循环中放置这样的东西while以保持它永远运行,或者只运行一个应用程序,如top 。 所有这些在Kubernetes中都应该很容易做到。

真正的问题是你为什么要这样做? 您的容器应提供服务,其进程将保持容器在后台运行。

你可以在你的Dockerfile使用这个CMD:

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

这将保持你的容器活着,直到它被告知停止。 使用陷阱和等待将使您的容器立即响应停止请求 。 没有陷阱/等待停止将需要几秒钟。

集装箱的运行是为了完成。 你需要为你的容器提供一个永远不会完成的任务。 像这样的东西应该工作:

 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;" ] 

我能够得到这个工作与kubernetes命令sleep infinity ,这将保持打开容器。 看到这个答案的替代品,当不起作用。

  1. 在你的Dockerfile中使用这个命令:

    CMD ["sh", "-c", "tail -f /dev/null"]

  2. build立你的docker形象。

  3. 将它推送到群集或类似的地方,只是为了确保它可用的图像。
  4. kubectl run debug-container -it --image=<your-image>

在我的情况下,initContainer的pod无法初始化。 运行docker ps -a ,然后docker logs exited-container-id-here给了我一个日志消息,其中kubectl logs podname没有显示。 谜团已揭开 :-)