kubectl exec失败,显示“容器<命令>对pod <pod_name>无效”

E23*_*235 2 kubernetes kubectl minikube

我正在与Minikube合作,我有一个装有一个容器的高山豆荚。
当我跑步时:
kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh

我收到一个外壳,并且可以在其中运行任何命令(ifconfig等)。

但是,当我试图运行sh-c它失败:

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
Run Code Online (Sandbox Code Playgroud)

hel*_*ert 5

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

而是使用--来表示不应再解释的标志,而应按原样kubectl exec传递给调用的命令(ifconfig在本例中为):

$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- /bin/sh -c 'ifconfig'
Run Code Online (Sandbox Code Playgroud)

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

$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- ifconfig
Run Code Online (Sandbox Code Playgroud)