代码之家  ›  专栏  ›  技术社区  ›  ambikanair

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

  •  0
  • ambikanair  · 技术社区  · 7 年前

    我需要使用kubectl命令的集群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:~# 
    

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   mikejoh    7 年前

    你的 ConfigMap 资源 data -字段包含一个字符串,当您运行 jsonpath 通过 '{.data.cluster-config\.json}' .我的意思是,您使用的shell将在 stdout 尽管它在库伯内特斯的储存方式不同。如果你跑 kubectl get cm cluster-info -n kube-system -o json 看看 数据 -它可能看起来像这样:

    "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 resource 领域。

    你可以尝试使用第二个工具来获取它,使用 jq ,一个命令行json处理器。此工具将解释 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
    
    推荐文章