导出etcd中的kubernetes配置信息

功能描述

kubernetes的持久化机制是通过etcd实现的,即所有的配置信息会存储到etcd中。所以如果想要备份kubernetes中的集群配置信息,只要备份etcd的数据即可。本文将描述如何从etcd读取对应的kubernetes配置,并转成常见的yml格式。另外会开一篇新文章描述etcd数据的备份和导入。

具体操作

前提

假设现在已经将k8s信息导入到了本地启动的etcd里(或者直接操作k8s集群的etcd,不建议!)。请参考上篇备份线上kubernetes存在etcd的配置,并在本地启动etcd加载数据

开始

  • 获取配置对应的key
# 所有k8s配置都是/registry/...开头的key,所以`registry/ --prefix`可以筛选出所有的kubernetes使用的键。--keys-only表示只打印键不打印值。这一步的输出会发现有一些k8s的关键字,但大多数信息是乱码的
etcdctl get /registry/ --prefix --keys-only
  • 根据key获取配置value。比如我想获取一个在namespace demo-ns下的deployment service001,那么可以使用。这一
etcdctl get /registry/deployments/demo01/service001
root@3d1db1302961:/opt/bitnami/etcd# etcdctl get /registry/deployments/demo-ns/service001
/registry/deployments/demo-ns/service001
k8s

apps/v1
Deployment�'
�
service001demo-ns"*$59cf8abf-af8f-41bd-8bfc-230c23a9913228��ŕZ
appservice001Z(
k8s.kuboard.cn/nameservice001b'
!deployment.kubernetes.io/revision12b,
k8s.kuboard.cn/workloadservice001z��
MozillaUpdateapps/v���FieldsV1:�
...
  • 解码编码信息
    在这个回答etcd v3 can't read encoded values里指出k8s使用的编码格式为protobuf,因此会输出乱码,可以使用工具auger来编码得到可视化信息,但这个仓库需要自己编译工具,我已经编译好了,点击下载
# 下载工具
root@3d1db1302961:/opt/bitnami/etcd# curl -O https://github.com/ghdefe/auger/releases/download/1.0/auger
root@3d1db1302961:/opt/bitnami/etcd# chmod +x auger
root@3d1db1302961:/opt/bitnami/etcd# mv auger /usr/local/bin/auger

# 编码值
root@3d1db1302961:/opt/bitnami/etcd# etcdctl get /registry/deployments/demo-ns/service001 | auger decode
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "12"
    k8s.kuboard.cn/workload: service001
  creationTimestamp: "2022-06-21T07:45:14Z"
...

以上输出的内容就是k8s的yml格式配置内容

posted @ 2022-09-27 14:59  小小记录本  阅读(350)  评论(0编辑  收藏  举报