Kubernetes kubectl exec失败,错误为;集装箱<;指挥部>;对于pod无效<;吊舱名称>&引用;

Kubernetes kubectl exec失败,错误为;集装箱<;指挥部>;对于pod无效<;吊舱名称>&引用;,kubernetes,kubectl,minikube,Kubernetes,Kubectl,Minikube,我正在与Minikube合作,我有一个带有一个容器的阿尔卑斯吊舱。 当我跑步时: kubectl exec-it-v=6 alpinec1-7c65db48b4-v2gpc/bin/sh 我收到一个shell,可以在其中运行任何命令(ifconfig,等等) 但是当我试图用-c运行sh时失败了: root:~# kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh -c 'ifconfig' I0722 05:45:25.091111

我正在与Minikube合作,我有一个带有一个容器的阿尔卑斯吊舱。
当我跑步时:
kubectl exec-it-v=6 alpinec1-7c65db48b4-v2gpc/bin/sh

我收到一个shell,可以在其中运行任何命令(
ifconfig
,等等)

但是当我试图用
-c
运行
sh
时失败了:

root:~# kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh -c 'ifconfig'
I0722 05:45:25.091111   80392 loader.go:357] Config loaded from file /home/root/.kube/config
I0722 05:45:25.111876   80392 round_trippers.go:405] GET https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc 200 OK in 16 milliseconds
I0722 05:45:25.232564   80392 round_trippers.go:405] POST https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc/exec?command=%2Fbin%2Fsh&container=ifconfig&container=ifconfig&stdin=true&stdout=true&tty=true 400 Bad Request in 13 milliseconds
                                                                     I0722 05:45:25.232921   80392 helpers.go:201] server response object: [{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc",
  "reason": "BadRequest",
  "code": 400
}]
F0722 05:45:25.233095   80392 helpers.go:119] Error from server (BadRequest): container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc

kubectl将
-c
标志解释为
ifconfig
的标志,而不是
kubectl exec
命令本身的标志,它指定了执行命令的Pod的确切容器;这也是
kubectl
在Pod中查找名为“ifconfig”的容器的原因。有关更多信息,请参阅

相反,使用
--
表示不应由
kubectl exec
解释的标志,而是将其传递给调用的命令(
ifconfig
,在本例中),如下所示:

还要注意,在这种情况下,您实际上不需要从shell调用ifconfig;您也可以直接调用
ifconfig
,而不使用
/bin/sh

$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- ifconfig

kubectl exec似乎需要容器名(无论是否指定)。难道没有一种方法可以只连接pod(而不是容器)吗?不——pod只是一组逻辑容器,所以您总是连接到pod中的容器。通常,您总是需要指定要连接到Pod中的哪个容器(使用
-c
),但Pod只包含一个容器(在这种情况下,实际上没有选择)。这是有意义的,因为容器和Pod共享相同的名称空间,即ip地址。。希望从逻辑上讲,连接到集装箱和连接到吊舱不会有任何区别?
$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- ifconfig