kubernetes 如何使用kubectl命令获取集群ID

svmlkihl  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(181)

我需要使用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"
}

字符串
我需要cluster-id这个特定的json

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


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

soat7uwm

soat7uwm1#

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

"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资源字段的一部分。
您可以尝试使用第二个工具来获取它,使用jq,一个命令行JSON处理器。该工具将jsonpath的输出解释为JSON并相应地解析它。
示例如下:

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


如果安装例如jq失败任何目的,我建议使用已经可用的工具的组合(假设你在Linux上),如grepawksed

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

dvtswwa3

dvtswwa32#

在任何pod中,您都可以运行以下命令来获取该集群的唯一id:
第一个月

相关问题