将 docker run 命令转换为 kubectl 一次性执行

Dea*_*ano 0 docker kubernetes minio

我正在尝试运行一次 docker 映像,以使用流行的S3 客户端 minio执行任务,我正在处理的环境使用 Kubernetes。

我可以获得 shell 访问权限来执行任务,如下所示:

docker run -it minio/mc --restart=Never --rm /bin/sh
Run Code Online (Sandbox Code Playgroud)

同样,我可以在 K8S 集群中运行 busybox 映像。

kubectl run busybox -i --tty --image=busybox --restart=Never --rm -- sh
Run Code Online (Sandbox Code Playgroud)

但是,我无法让 mc 客户端像前面的示例一样工作。

kubectl run minio -i --tty  --image=minio/mc --restart=Never --rm --  /bin/sh
Run Code Online (Sandbox Code Playgroud)

我的 shell 会退出,关于如何保持 shell 打开有什么想法吗?或者如何在它死之前将 bash 命令传递给它?

Daz*_*kin 6

当 Pod 中的容器运行一些完成的进程时,就会出现此问题。当它的容器退出时,Pod 就完成了。更常见的是在 Pod 中包含连续运行的容器。

因此,解决这个完成问题的方法是保持容器运行:

  1. 在 Pod 中运行容器:
kubectl run minio \
--image=minio/mc \
--restart=Never \
--command \
--  /bin/sh -c 'while true; do sleep 5s; done'
Run Code Online (Sandbox Code Playgroud)

注意Podwhile通过容器中的循环保持运行

注意图像的入口点被--command和覆盖/bin/sh

  1. 执行到容器中,例如:
kubectl exec --stdin --tty minio -- mc --help
Run Code Online (Sandbox Code Playgroud)