【问题标题】:kubectl exec works on single commands, but I cannot enter a bash shellkubectl exec 适用于单个命令,但我无法输入 bash shell
【发布时间】:2020-10-30 13:04:24
【问题描述】:

我在 ma​​cOS Catalina 10.15.4 上,我正在使用 minikube v1.11.0kubernetes v1.18.3,两者从 brew 安装。 Minikube 使用 docker 引擎初始化。

初始化命令是这样设置的:

      containers:
        - name: database
          image: "mysql:5.6"
          imagePullPolicy: IfNotPresent
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: 12345
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: password
            - name: MYSQL_DATABASE
              value: db

我正在尝试为我正在运行的一个 kubectl 容器打开一个 bash 脚本。 从在线研究看来,这应该是在我的终端中打开一个 bash 窗口的命令:

minikube kubectl exec -it --namespace=tools test-pod -- bash

但是,当我运行它时,我得到以下回溯:

Error: unknown shorthand flag: 'i' in -it See 'minikube kubectl --help' for usage.

它似乎不希望我在命令中使用任何参数。是我遗漏了什么,还是我试图使用已弃用的命令?

注意:我可以运行 exec,但不能用于打开 bash 脚本。例如,我可以运行以下命令:

minikube kubectl exec test-pod -- ls /

它会输出以下内容:

kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
bin
boot
dev
docker-entrypoint-initdb.d
entrypoint.sh
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

编辑:我尝试了以下命令:

minikube kubectl exec --stdin --tty --namespace=tools test-pod -- sh

我得到了以下回溯:

Error: unknown flag: --stdin
See 'minikube kubectl --help' for usage.

似乎任何标志,无论是短的还是长的,都失败了,我不知道为什么它们不会失败。

【问题讨论】:

    标签: bash docker kubernetes kubectl minikube


    【解决方案1】:

    我对 minikube 不熟悉,但您应该可以使用以下命令查询命令的语法:

    minikube kubectl exec --help
    

    短标志可能已被长标志替换:

    minikube kubectl exec --stdin --tty ...
    

    也有可能容器不包含 bash 而是另一个 shell:

    minikube kubectl exec --stdin --tty --namespace=tools test-pod -- sh
    minikube kubectl exec --stdin --tty --namespace=tools test-pod -- ash
    

    【讨论】:

    • 我尝试运行上述建议,但它抛出了以下错误:“错误:未知标志:--stdin 请参阅'minikube kubectl --help'以了解用法。” - 它似乎不接受任何标志,长或短。有什么你可能知道的原因吗?
    【解决方案2】:

    minikube kubectl 需要在命令后使用--,以便将其与参数一起使用:

    $ minikube kubectl -- exec --stdin --tty --namespace=tools test-pod -- sh
    

    你也可以使用普通的kubectl

    如果只是确保您的 ~/.kube/config 指向正确的 minikube 上下文/集群。通常,您从 shell 运行的任何 minikube 命令都会导致它更改您的 minikube 集群的上下文。即minikube ssh

    那就用kubectl

    $ kubectl exec --stdin --tty --namespace=tools test-pod -- sh
    

    【讨论】:

      【解决方案3】:

      所以,我想出了解决办法:

      根据我的配置,使用 minikube start --driver=docker 初始化 minikube 并不能成功初始化所有内容。我将驱动程序更改为virtualbox,minikube 能够 ssh 并继续运行,没有任何问题。

      使用 docker 驱动程序进行设置似乎很容易出现问题,正如 GitHub 线程所示:https://github.com/kubernetes/minikube/issues/7332

      【讨论】:

      • 想出了一个答案。看我的回答。
      猜你喜欢
      • 2011-03-28
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2016-09-07
      相关资源
      最近更新 更多