0%

在Kubernetes集群上如何保持容器一直运行

问题描述

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

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

例如,

1
$ sudo docker run -td ubuntu:latest

在Kubernetes有这样的选择吗?

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

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

但是容器几秒后会退出(就像使用docker run命令启动而没有上面提到的选项)。并且ReplicationController会重复启动它。

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

高票回答

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

1
docker run -itd debian

坦率地说,容器打开是一个只能用于快速测试和示例的黑客攻击。如果你只想要一个容器进行几分钟的测试,我会这样做:

1
docker run -d debian sleep 300

其优点是,如果忘记了容器,容器将自动退出。或者,可以在while循环中放置类似的内容以使其永久运行,或者只运行top等应用程序。所有这些在Kubernetes中应该很容易做到。

1
2
3
4
5
6
7
8
9
10
11
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;" ]

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

原文链接

How can I keep a container running on Kubernetes?