3

我正在尝试从 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}

键和值似乎已编码,但我找不到获取纯文本值的方法。

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

4

3 回答 3

3

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

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

这里是关于 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
...
于 2019-08-14T12:47:36.550 回答
0

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

于 2017-08-18T02:19:17.727 回答
0

kubernetes 已知问题:<a href="https://github.com/kubernetes/kubernetes/issues/44670" rel="nofollow noreferrer">https://github.com/kubernetes/kubernetes/issues/44670

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

于 2018-11-01T04:09:37.423 回答