kubectl exec 适用于单个命令,但我无法输入 bash shell

kubectl exec works on single commands, but I cannot enter a bash shell

我正在使用 macOS Catalina 10.15.4,我正在使用 minikube v1.11.0 kubernetes 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

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

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.

似乎任何标志,无论是短的还是长的,都在失败,我不明白为什么他们不会。

我不熟悉 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

minikube kubectl 需要在命令后加上 -- 当你想将它与参数一起使用时:

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

你也可以使用普通的kubectl

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

那就用kubectl

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

所以,我找到了解决方案:

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

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