Directly access data objects stored in etcd by kubernetes.
Encodes and decodes Kubernetes objects from the binary storage encoding used to
store data to etcd. Supports data conversion to YAML, JSON and Protobuf.
Automatically determines if etcd data is stored in JSON (kubernetes1.5 and
earlier) or binary (kubernetes1.6 and newer) and decodes accordingly.
Why?
In earlier versions of kubernetes, data written to etcd was stored as JSON
and could easily be inspected or manipulated using standard tools such as
etcdctl. In kubernetes1.6+, for efficiency reasons, much of the data is
now stored in a binary storage representation, and is non-trivial to decode– it
contains a enveloped payload that must be unpacked, type resolved and decoded.
This tool provides kubernetes developers and cluster operators with simple way
to access the binary storage data via YAML and JSON.
Installation
Check out and build:
git clone https://github.com/etcd-io/auger
cd auger
make build
Run:
build/auger -h
Use cases
Access data via etcdctl
A kubernetes developer or cluster operator needs to inspect the data actually
stored to etcd for a particular kubernetes object.
E.g., decode a pod from etcd v3, where <pod-name> is the name of one of your pods:
A kubernetes developer or etcd developer needs to modify state of an object stored in etcd.
E.g. Write an updated pod to etcd v3:
cat updated-pod.yaml | auger encode | ETCDCTL_API=3 etcdctl put /registry/pods/default/<pod-name>
Access data directly from db file
A cluster operator, kubernetes developer or etcd developer is needs to inspect
etcd data without starting etcd. In extreme cases, it may not be possible to
start etcd and inspecting the data may help a etcd developer understand what
state it is in.
E.g. find an etcd value by it’s key and extract it from a boltdb file:
Auger
Directly access data objects stored in
etcdbykubernetes.Encodes and decodes Kubernetes objects from the binary storage encoding used to store data to
etcd. Supports data conversion toYAML,JSONandProtobuf.Automatically determines if etcd data is stored in
JSON(kubernetes1.5and earlier) or binary (kubernetes1.6and newer) and decodes accordingly.Why?
In earlier versions of
kubernetes, data written toetcdwas stored asJSONand could easily be inspected or manipulated using standard tools such asetcdctl. Inkubernetes1.6+, for efficiency reasons, much of the data is now stored in a binary storage representation, and is non-trivial to decode– it contains a enveloped payload that must be unpacked, type resolved and decoded.This tool provides
kubernetesdevelopers and cluster operators with simple way to access the binary storage data viaYAMLandJSON.Installation
Check out and build:
Run:
Use cases
Access data via etcdctl
A kubernetes developer or cluster operator needs to inspect the data actually stored to etcd for a particular kubernetes object.
E.g., decode a pod from etcd v3, where
<pod-name>is the name of one of your pods:Modify data via etcdctl
A kubernetes developer or etcd developer needs to modify state of an object stored in etcd.
E.g. Write an updated pod to etcd v3:
Access data directly from db file
A cluster operator, kubernetes developer or etcd developer is needs to inspect etcd data without starting etcd. In extreme cases, it may not be possible to start etcd and inspecting the data may help a etcd developer understand what state it is in.
E.g. find an etcd value by it’s key and extract it from a boltdb file:
Query for specific data directly from a db file:
Consistency and corruption checking
First get a checksum and latest revsion from one of the members:
Then compare it with the other members: