kubernetes - 指定 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"}
解决方案
尝试在您的命令中添加-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
了名称:web
nginx
root@kmaster:~# kubectl run web --image=nginx
pod/web created
然后我运行命令来创建命名但带有图像kubectl debug
的副本:web
web-test-1
httpd
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.19
或1.20
. 一般来说,如果kube-apiserver
是在版本X
,kubectl
应该是在版本X-1
或X
或X+1
。
推荐阅读
- asp.net-core - 在 .NET Core 构建/发布中向 web.config 添加配置
- visual-studio-code - 更改 vscode-icons 上的默认文件扩展名图标不起作用
- c# - 函数之间的区别
和匿名异步等待动作 - javascript - 未捕获的 ReferenceError:要求未在 filenae.html 中定义:(电子)
- objective-c - ARC不允许将'BOOL'(又名'bool')隐式转换为'id'
- bash - 使用 shell 脚本检查字符串是否包含数组元素
- go - client.Go 超时重试
- zooming - OpenLayers:OL6 升级后缩放级别更改为非整数
- javascript - 将数组中的最后一个对象推送到下一个数组
- python - 每次准确率都很高,但结果预测是错误的