我正在通过CLI工具kubectl
访问Kubernetes,并且试图获取所有上下文名称的列表,每行一个。
我知道JSONPath可用于提取和格式化特定的输出。我真的很想要我想要的东西
kubectl config view -o=jsonpath="{.contexts[*].name}"
但是这会将所有名称放在同一行。我正在尝试使用range
列出所有用换行符分隔的名称:
kubectl config view -o=jsonpath='{range .contexts[*]}{.name}{"\n"}{end}'
但这给我一个错误:
error: unexpected arguments: [.contexts[*]}{.name}{"\n"}{end}]
See 'kubectl config view -h' for help and examples.
我已经阅读了kubectl
文档,并且我所做的与https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/#list-containers-by-pod确实很相似,命令是
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
但是我看不到哪里出了问题。
答案 0 :(得分:2)
您的命令在kubectl 1.9.2中对我有效
如果仍然无法使用,则可以在bash中使用tr来用新行替换空格:
mInstance = this;
答案 1 :(得分:1)
我知道了。我一直在使用@ahmetb的kubectl-aliases脚本,该脚本运行正常,没有问题,但是自述文件中的建议之一是:
在运行之前打印完整命令:将其添加到您的.bashrc或.zshrc文件中:
function kubectl() { echo "+ kubectl $@"; command kubectl $@; }
我在.bashrc中具有该函数声明,并且正在删除jsonpath
参数的引号。当我注释掉该声明并打开一个新的shell后,该命令便正常工作了。