如何使用kubectl命令获取集群id

问题描述 投票:0回答:2

我需要使用 kubectl 命令获取 cluster-id。

root@vagrant-xenial64:~# kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json}'
{
  "cluster_id": "xxx",
  "cluster_name": "prod-yyy-mmm",
  "cluster_type": "rrr",
  "cluster_pay_tier": "vvv",
  "datacenter": "cse",
  "account_id": "456777",
  "created": "2018-06-32323dffdf:35:48+0000"
}

我需要这个特定json的

cluster-id

root@vagrant-xenial64:~# kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json.cluster_id}'
root@vagrant-xenial64:~# 

以上命令返回空字符串。 我也尝试了很多其他组合

kubernetes jsonpath kubectl
2个回答
6
投票

您的

ConfigMap
资源
data
字段包含一个字符串,当您运行
jsonpath
通过
'{.data.cluster-config\.json}'
选择它时,该字符串将按原样解释。我的意思是,您使用的 shell 会将其打印为 JSON,位于
stdout
,尽管它在 Kubernetes 中的存储方式不同。如果您运行
kubectl get cm cluster-info -n kube-system -o json
并查看
data
字段,它可能看起来像这样:

"data": {
    "cluster-config.json": "{\n  \"cluster_id\": \"xxx\",\n  \"cluster_name\": \"prod-yyy-mmm\",\n  \"cluster_type\": \"rrr\",\n  \"cluster_pay_tier\": \"vvv\",\n  \"datacenter\": \"cse\",\n  \"account_id\": \"456777\",\n  \"created\": \"2018-06-32323dffdf:35:48+0000\"\n}\n"
}

您将无法使用

jsonpath
访问该字符串中的“字段”,因为它实际上不是
ConfigMap
API 资源
字段的一部分。

您可以尝试使用第二个工具来获取它,使用命令行 JSON 处理器

jq
。该工具会将
jsonpath
的输出即时解释为 JSON 并进行相应的解析。

示例:

kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json}' | jq '.cluster_id'
"xxx"

如果安装例如

jq
无法实现我建议使用现有工具组合(假设您使用的是 Linux)的任何目的,例如
grep
awk
sed
:

kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json}' | grep cluster_id | awk '{ print $2 }' | sed -e 's/"//' -e 's/",//'
xxx

0
投票

在任何 Pod 中,您可以运行以下 cmd 来获取该集群的唯一 ID。

cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt | md5sum

© www.soinside.com 2019 - 2024. All rights reserved.