首页 > 解决方案 > 指定 args 时必须指定现有容器或新图像

问题描述

根据Kubernetes 文档,您可以启动容器的调试版本并在其上运行命令,如下所示:

$ kubectl debug (POD | TYPE[[.VERSION].GROUP]/NAME) [ -- COMMAND [args...] ]

但是当我在现实生活中尝试这样做时,我得到以下信息:

$ kubectl debug mypod \
  --copy-to=mypod-dev \
  --env='PYTHONPATH="/my_app"' \
  --set-image=mycontainer=myimage:dev -- python do_the_debugging.py
error: you must specify an existing container or a new image when specifying args.

如果我不指定-- python do_the_debugging.py我可以创建调试容器,但是我需要一个单独的命令来实际进行调试:

kubectl exec -it mypod-dev -- python do_the_debugging.py

为什么我不能像文档似乎指定的那样在一行中完成所有这些操作?


一些 Kubernetes 细节:

Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-23T02:22:53Z", GoVersion:"go1.15.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.15-eks-ad4801", GitCommit:"ad4801fd44fe0f125c8d13f1b1d4827e8884476d", GitTreeState:"clean", BuildDate:"2020-10-20T23:27:12Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}

标签: kubernetes

解决方案


尝试在您的命令中添加-it和标记。--container在您的特定情况下,它可能如下所示:

$ kubectl debug mypod \
  --copy-to=mypod-dev \
  --env='PYTHONPATH="/my_app"' \
  --set-image=mycontainer=myimage:dev \
  --container=mycontainer -it -- python do_the_debugging.py

我无法重现您的确切问题,因为我没有do_the_debugging.py脚本,但我创建了简单的示例。
首先,我使用图像创建Pod了名称:webnginx

root@kmaster:~# kubectl run web --image=nginx
pod/web created

然后我运行命令来创建命名但带有图像kubectl debug的副本:webweb-test-1httpd

root@kmaster:~# kubectl debug web --copy-to=web-test-1 --set-image=web=httpd --container=web -it -- bash
If you don't see a command prompt, try pressing enter.
root@web-test-1:/usr/local/apache2#

此外,我建议您将集群升级到较新的版本,因为您的客户端和服务器版本非常不同。
您的kubectl版本是1.20,因此您应该kube-apiserver在 version1.191.20. 一般来说,如果kube-apiserver是在版本Xkubectl应该是在版本X-1XX+1


推荐阅读