1、获取etcdctl 命令行工具

kubeadm 部署的 k8s ,etcd 是封装在 pod 中

13c600dcab344fea9ddf1f8baaf3eaa7.png

从 pod 中拿到 etcdctl,先查看在 pod 中 etcdctl 的位置

f440ed37a5514845ab8e2c480c687b34.png

获取  etcdctl 并放入/usr/bin下

kubectl -n kube-system cp etcd-k8s-master:/usr/local/bin/etcdctl /usr/bin/etcdctl

chmod +x /usr/bin/etcdctl

a885eaf49a764924b42a66e0123b162e.png

2、查看etcd集群成员节点

输入 etcdctl 提示需要指定版本,etcdctl  的 v2 跟 v3 版本差异很大,k8s 默认使用 v3 版本

2f9f725e2c63412b9d601641d177c9a4.png

直接输入 etcdctl ,提示需要证书认证才能使用,所以需要指定 ETCDCTL_API=3

export ETCDCTL_API=3

c9dd68d8cc4a4190a548edb45c4568fd.png

etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key member list -w table

22e3191606514d8faf19e50b4ab8c944.pngendpoints 执行要操作那个etcd 
--cacert  --cert  -key 都是指定证书
member list 显示集群的信息
其中etcd 签发了很多证书,用哪套都行。peer 是etcd集群通信用的。

1303de4df0b5488da5c907183fc3b16f.png

-w table 使用table表格显示

3224677ab4474a788bf3cbdbe52c1673.png

etcdctl 加入别名

[root@k8s-master nginx]# alias etcdctl='etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'

[root@k8s-master nginx]# etcdctl member list -w table
+------------------+---------+------------+---------------------------+---------------------------+
|        ID        | STATUS  |    NAME    |        PEER ADDRS         |       CLIENT ADDRS        |
+------------------+---------+------------+---------------------------+---------------------------+
| b7501a7e3ce53d2b | started | k8s-master | https://192.168.18.7:2380 | https://192.168.18.7:2379 |
+------------------+---------+------------+---------------------------+---------------------------+
[root@k8s-master nginx]#

363b21a88e5b479b99580530051ac5e3.png

etcdctl endpoint status -w table   # 当前节点为leader (IS LEADER ) DB_SIZE 数据库大小  RAFT TERM 做了几轮选举06d64152ed4e4d9b8b56d143ea0cd128.png

3、etcd 数据库介绍

etcd 是一个key=value类型的数据库,如下写入一个key,查看value

05963b17a6ce4091a514a89716e87da6.png

etcd 数据库可以按照目录层次存储,也可以按照目录查看数值
如下在 /admin目录下存储一个key1,并 key1 的数值等于 value1。在 /admin目录下存储一个key2,并 key2 的数值等于value2。查看 /admin目录下的key和对应的 value。--prefix=true
检索前缀的意思,意思是检索 /admin目录下的所有

4d5765288dd74abb88c418e5de3634d0.png

etcdctl 的 watch 命令,意思是时刻观察事件,就跟tail -f 一样,一致在检测变化

e40f53e9d85d415b9802012d6978bf66.png

 etcdctl watch /admin/key1 时刻观察/admin/key1的时间,一旦发生改变立马检测到

dee389af166f47f69d6d8c34b449c983.png

 watch 可以按照目录的形式监控目录下的文件

4e8c4385bcf647c6850d3edec016efe4.png

4、查看 k8s 的动态变化

k8s 资源存储在etcd哪里呢?etcd 数据都是从 / 开始的,我们查看 / 都有啥, --keys-only 只看key不看value

etcdctl get / --prefix=true --keys-only

170337132c2b4b559d6949738a5aee76.png

通过上图可以看到,k8s资源都是在 / 下创建的各种资源,其中 pod 资源在 /registry/pods/下

09717c25812347b1a87fbe8b55c706d0.png

所以,我们得出,kubectl 通过yaml 形式、或者kubectl edit 的形式,将需要调度的信息告知apiserver,apiserver 在将信息存储到 etcd 中,kubelet 通过 apiserver 监听发现 etcd 数据变化了,立马拉取新的策略进行构建。

etcd中的目录,是按照什么形式创建的k8s数据

kubectl api-resources

a9fd4c8096764561ab9d126e4c4fdf0f.png

5、etcd 备份恢复

方式一、直接备份 etcd 目录

cp /var/lib/etcd/ /tmp/hostname-etcd_$(date +"%Y-%m-%d_%H:%M").db

方式二:etcd 快照

1、备份快照

etcdctl snapshot save "hostname-etcd_$(date +"%Y-%m-%d_%H:%M").db"

简单查看备份是否正确,两个对比差不多大

87fbf67d1c564454a0fdf96bbb86ee56.png

2、恢复

1、停止etcd 和 apiserver

2、移走当前数据目录(注意,需要所有的集群节点)

mv /var/lib/etcd/ tmp

3、恢复快照(集群所有节点都需要操作,而且必须用一个.db)

etcdctl snapshot restore hostname-etcd_2022-08-29_20:27.db --data-dir=/var/lib/etcd/

6、etcd 清理

如果etcd的数据库很大,一般都是 event 很大,默认都是1h后自动清除,如果etcd数据库很大,需要查看  

4ee17330508049b0a8b33bba21892306.png

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐