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

时间:2020-09-08 16:02:00

标签: docker kubernetes minio

我正在尝试运行一个docker映像一次,以使用我正在使用的流行的S3 client minio环境使用Kubernetes来执行任务。

我可以通过shell访问来执行如下任务:

this.doLogin(this.loginData)
    .then( () => {
        this.$router.replace('/')
        .catch( error => {
            console.log(error)
        })
    })
    .catch( e => {
        console.log(e)
    })

类似地,我可以在K8S集群中运行busybox映像。

docker run -it minio/mc --restart=Never --rm /bin/sh

但是,我无法使该mc客户端以与上一个示例相同的方式工作。

kubectl run busybox -i --tty --image=busybox --restart=Never --rm -- sh

我的外壳会退出,关于如何保持外壳打开的任何想法?或如何在死之前将bash命令传递给它?

1 个答案:

答案 0 :(得分:3)

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

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

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

注意,容器中的while循环使Pod保持运行状态

注意,图像的入口点被--command/bin/sh

覆盖
  1. 执行到容器中,例如:
kubectl exec --stdin --tty minio -- mc --help