etcd v3无法读取编码值

时间:2017-08-17 20:34:55

标签: kubernetes etcd etcd3

我试图从kubernetes集群中的etcd v3中检索值。这些值似乎已编码,不会完全恢复。当-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}

键和值似乎是编码的,但我找不到恢复纯文本值的方法。

如何获取给定密钥的纯文本值?

3 个答案:

答案 0 :(得分:0)

默认情况下,在kube 1.6及更高版本中,值以protobuf编码存储,而不是JSON

答案 1 :(得分:0)

kubernetes的已知问题:https://github.com/kubernetes/kubernetes/issues/44670

如问题中所述,openshift工具(https://github.com/openshift/origin/tree/master/tools/etcdhelper)可以帮助读取该值。 它对我有用,但确实不方便。

答案 2 :(得分:0)

演出晚了一点,但这就是我能够做到的。 由于在etcd v3之前的版本中,数据以纯json存储,并且由于v3是二进制格式,因此需要额外的解码步骤。

您可以查看此仓库以了解详细信息: https://github.com/jpbetz/auger

here是有关protobuf编码的Kubernetes文档

工作示例是:

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
...