etcd v3 не может читать закодированные значения

Я пытаюсь получить значения из etcd v3 в кластере kubernetes. Значения выглядят закодированными и не возвращаются полностью. когда -w simple, значение возвращается с большим количеством вопросительных знаков в маленьких бриллиантах. Когда используешь -w json, значение возвращается так:

ubuntu@k8s-master-0:~$ etcdctl --endpoints=https://127.0.0.1:2379 -w json get /registry/services/specs/default/kubernetes-bootcamp
{"header":{"cluster_id":13533136872321707204,"member_id":12171258639343793897,"revision":1142056,"raft_term":53},"kvs":[{"key":"L3JlZ2lzdHJ5L3NlcnZpY2VzL3NwZWNzL2RlZmF1bHQva3ViZXJuZXRlcy1ib290Y2FtcA==","create_revision":863556,"mod_revision":863556,"version":1,"value":"azhzAAoNCgJ2MRIHU2VydmljZRLaAQp3ChNrdWJlcm5ldGVzLWJvb3RjYW1wEgAaB2RlZmF1bHQiACokNzBhNDdlZDgtODFjZS0xMWU3LWE2ZGMtZmExNjNlYmZlNzM5MgA4AEILCLOmzMwFEOaHwTdaGgoDcnVuEhNrdWJlcm5ldGVzLWJvb3RjYW1wegASWwoXCgASA1RDUBiYPyIHCAAQkD8aACjR+QESGgoDcnVuEhNrdWJlcm5ldGVzLWJvb3RjYW1wGgwxMC4yMzMuNTIuNzEiDExvYWRCYWxhbmNlcjoETm9uZUIAUgAaAgoAGgAiAA=="}],"count":1}

Ключ и значение, кажется, закодированы, но я не могу найти способ вернуть значение в виде простого текста.

Как я могу получить текстовое значение для данного ключа?

2 ответа

Немного опоздал на шоу, но вот как я смог это сделать. Потому что в etcd pre-v3 данные хранились в простом виде json и поскольку v3 находится в двоичном формате, необходим дополнительный шаг декодирования.

Вы можете проверить это репо для деталей: https://github.com/jpbetz/auger

А вот документы Kubernetes, касающиеся кодирования protobuf

И рабочий пример:

etcdctl get "/registry/pods/default/nginx-dbddb74b8-62hh7" --prefix -w simple | auger decode

Теперь ответ простой текст:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubernetes.io/limit-ranger: 'LimitRanger plugin set: cpu request for container
      nginx'
  creationTimestamp: 2019-08-12T14:11:57Z
...

По умолчанию в kube 1.6 и выше значения хранятся в кодировке protobuf, а не в JSON.

kubernetes известная проблема: https://github.com/kubernetes/kubernetes/issues/44670

Как упоминалось в выпуске, инструмент openshift ( https://github.com/openshift/origin/tree/master/tools/etcdhelper) может помочь прочитать значение. Это работает для меня, но это действительно не удобно.

Другие вопросы по тегам