Как получить идентификатор кластера с помощью команды kubectl - PullRequest
0 голосов
/ 26 июня 2018

Мне нужен идентификатор кластера с помощью команды kubectl.

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 Ответ

0 голосов
/ 27 июня 2018

Поле ConfigMap resource data содержит строку, которая интерпретируется как есть, когда вы запускаете jsonpath, чтобы выбрать ее через '{.data.cluster-config\.json}'. Я имею в виду, что используемая вами оболочка будет печатать ее в формате 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 полей.

Вы можете попытаться использовать второй инструмент для его извлечения, используя jq, процессор JSON командной строки. Этот инструмент интерпретирует вывод jsonpath как JSON на лету и анализирует его соответствующим образом.

* * 1 022 Пример: * 1 023 *
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
...