我现在尝试在Kubernetes集群上使用shell (/bin/bash)运行一个简单的容器。
我认为有一种方法可以通过使用伪tty和detach选项(Docker run命令上的-td选项)来保持容器在Docker容器上运行。
例如,
$ sudo docker run -td ubuntu:latest
Kubernetes中有这样的选项吗?
我尝试使用kubectl run-container命令运行一个容器,如下所示:
kubectl run-container test_container ubuntu:latest --replicas=1
但是容器会退出几秒钟(就像使用没有上面提到的选项的docker run命令启动一样)。ReplicationController会重复启动。
有没有办法让容器在Kubernetes上运行,比如docker run命令中的-td选项?
为了保持POD运行,它应该执行某些任务,否则Kubernetes会发现它没有必要,因此它会停止。保持POD运行的方法有很多。
当我需要一个POD连续运行而不做任何有用的操作时,我也遇到过类似的问题。以下是对我有效的两种方法:
运行容器时运行sleep命令。
在容器内运行一个无限循环。
虽然第一种方法比第二种方法简单,而且可能满足要求,但它不是最好的方法。因为,在sleep命令中分配的秒数是有限制的。
但是在容器内运行无限循环的容器永远不会退出。
但是,我将描述这两种方式(考虑到您正在运行busybox容器):
1. 睡眠命令
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
ports:
- containerPort: 80
command: ["/bin/sh", "-ec", "sleep 1000"]
2. 无限循环
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
ports:
- containerPort: 80
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
运行pod命令:
kubectl apply -f <pod-yaml-file-name>.yaml
希望能有所帮助!
我对这个问题的一些看法。假设kubectl正在工作,那么与您在问题中提到的docker命令等效的最接近的命令将是这样的。
$ kubectl run ubuntu --image=ubuntu --restart=Never --command sleep infinity
上面的命令将在默认的命名空间中创建一个Pod,它将执行带无限参数的sleep命令——这样你就有了一个在前台运行的进程,使容器保持活跃。
后续可以通过运行kubectl exec命令与Pod进行交互。
$ kubectl exec ubuntu -it -- bash
这种技术对于创建Pod资源和特别调试非常有用。