运行 远程 kubernetes 命令会产生错误,即使机器上的相同命令不会

Running remote kubernetes command creates errors, even if the same comand on the machine doesn't

我正在尝试使用 python 和 ssh 远程 运行 一个 kubernetes 命令。如果是 运行 远程,则该命令不起作用,但如果是 运行 直接在机器上,则该命令有效。

"kubectl get po --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\t"}{.metadata.labels.k8s-app}{"\n"}{end}"

如果按原样运行,则接收错误为

"Pods [NotFound] .items[*]}"

如果我用 " 替换 ',反之亦然,错误是“-

Expecting 'EOF'

考虑到命令 运行 直接在机器上,当远程传递给 shell 时会解释某些内容。我尝试了不同的组合,但没有用。

将此发布为社区 wiki

正如@Orion 在评论中指出的那样,您的命令似乎不完整。我已经在我的 GKE 集群上测试过了。

$ kubectl get po --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].
image}{"\t"}{.metadata.labels.k8s-app}{"\n"}{end}
>

当您使用 jsonpath= 时,您使用符号 ' 启动它,但是您没有关闭它。这就是为什么 Kubernetes 仍然期待一些价值。 但是,如果您将 jasonpath' 结束,您将收到如下输出:

$ kubectl get po --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].
image}{"\t"}{.metadata.labels.k8s-app}{"\n"}{end}'
event-exporter-v0.2.4-5f88c66fb7-xwwh6  k8s.gcr.io/event-exporter:v0.2.4        event-exporter
fluentd-gcp-scaler-59b7b75cd7-pw9kf     k8s.gcr.io/fluentd-gcp-scaler:0.5.2     fluentd-gcp-scaler
fluentd-gcp-v3.2.0-6lxd9        gcr.io/stackdriver-agents/stackdriver-logging-agent:1.6.8       fluentd-gcp
fluentd-gcp-v3.2.0-zhtds        gcr.io/stackdriver-agents/stackdriver-logging-agent:1.6.8       fluentd-gcp
heapster-v1.6.1-9bbcd7f79-ld4z7 gcr.io/stackdriver-agents/heapster-amd64:v1.6.1 heapster
kube-dns-6987857fdb-l2dt8       k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13       kube-dns
kube-dns-6987857fdb-r97b8       k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13       kube-dns
kube-dns-autoscaler-bb58c6784-8vq5d     k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.3.0  kube-dns-autoscaler
kube-proxy-gke-stc1-default-pool-094e5c74-6vk4  k8s.gcr.io/kube-proxy:v1.13.7-gke.8
kube-proxy-gke-stc1-default-pool-094e5c74-htr0  k8s.gcr.io/kube-proxy:v1.13.7-gke.8
l7-default-backend-fd59995cd-xz72d      k8s.gcr.io/defaultbackend-amd64:1.5     glbc
metrics-server-v0.3.1-57c75779f-t2rfb   k8s.gcr.io/metrics-server-amd64:v0.3.1  metrics-server
prometheus-to-sd-2jxr5  k8s.gcr.io/prometheus-to-sd:v0.5.2      prometheus-to-sd
prometheus-to-sd-xmfsl  k8s.gcr.io/prometheus-to-sd:v0.5.2      prometheus-to-sd

因为你想运行远程精确命令你必须在开始和结束时使用",与jsonpatch相同。

根据您提供的信息,您的问题的解决方案应该如下命令:

"kubectl get po --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\t"}{.metadata.labels.k8s-app}{"\n"}{end}'"