运行 远程 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}'"
我正在尝试使用 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}'"