Kubernetes day2
对于etcd的操作和备份
Etcd的操作 - Etcdctl
Etcd的规划
- 最好用 固态盘, Pod数量比较多的情况下会非常非常慢, 内存要大.
- 类似于redis 或者 Zookeeper, KV的存储.
- 支持watch机制,可以通知给node节点的数据变化.
- etcd consul zookeeper 的区别
| 名称 | 优点 | 缺点 | 接口 | 一致性算法 |
|---|---|---|---|---|
| zookeeper | 1.功能强大,不仅仅只是服务发现 2.提供watcher机制能实时获取服务提供者的状态 3.dubbo等框架支持 |
1.没有健康检查 2.需在服务中集成sdk,复杂度高 3.不支持多数据中心 |
sdk | Paxos |
| consul | 1.简单易用,不需要集成sdk 2.自带健康检查 3.支持多数据中心 4.提供web管理界面 |
1.不能实时获取服务信息的变化通知 | http/dns | Raft |
| etcd | 1.简单易用,不需要集成sdk 2.可配置性强 |
1.没有健康检查 2.需配合第三方工具一起完成服务发现 3.不支持多数据中心 |
http | Raft |
Etcdctl 的命令
- 查看etcd的成员清单
1 | ]$ etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/kubernetes.pem --key=/etc/kubernetes/ssl/kubernetes-key.pem --write-out=table --endpoints="192.168.31.21:2379,192.168.31.22:2379,192.168.31.23:2379" member list |
- 查看etcd的节点状态
1 | ]$ etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/kubernetes.pem --key=/etc/kubernetes/ssl/kubernetes-key.pem --endpoints="192.168.31.21:2379,192.168.31.22:2379,192.168.31.23:2379" endpoint status -w table |
- 查看etcd存储的数据
1 | ]$ etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/kubernetes.pem --key=/etc/kubernetes/ssl/kubernetes-key.pem --endpoints="192.168.31.21:2379,192.168.31.22:2379,192.168.31.23:2379" get /registry/ --prefix --keys-only | head |
- 查看etcd中的pod信息
1 | ]$ etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/kubernetes.pem --key=/etc/kubernetes/ssl/kubernetes-key.pem --endpoints="192.168.31.21:2379,192.168.31.22:2379,192.168.31.23:2379" get /registry/ --prefix --keys-only | grep pod |
- 其他的操作
- get / put / del 等基础操作
Watch机制
watch机制是通过不断的查看数据,发生变化就主动的通知客户端,v3支持watch固定的key,也可以watch一个范围的数据。
1 | # watch 一个pod的信息, 然后手动delete这个pod , 查看etcd 的watch行为和输出的结果。 |
数据备份恢复和WAL日志
WAL: watch ahead log - 预写日志, 可以通过预写日志来进行数据库的恢复。
WAL记录了整个数据变化的过程,在操作写入数据之前先进行wal日志的写入。
etcd v2 的时候直接复制和备份目录,备份文件的方案
etcd v3 的备份和恢复, 使用快照的方式。
备份使用的命令和恢复的命令不太一样, etcdctl vs etcdutl
可以写脚本来进行数据进行备份和恢复。
1 | ]$ etcdctl snapshot save |
数据恢复的流程:
- 创建新的etcd集群
- 停止kubernetes以及其他的依赖etcd 的服务。
- 停止空白的新的集群
- 使用备份的文件进行集群的恢复
- 使用在集群的每个节点恢复相同的备份文件
- 每个节点启动etcd的集群并且进行验证
- 启动Kubernetes的相关集群和组件。
- 查看恢复的结果,验证各个组件的相关服务是否已经正常恢复。
Etcd节点的维护
- etcdctl add-etcd
- etcdctl del-etcd
资源清单以及API
相关的外部服务接口
- Container Runtime Interface - CRI
- runc
- RKT
- Container Storage Interface - CSI
- Container Network Interface - CNI
Node的相关操作
- cordon
- uncordon
- drain
- taint
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Liarlee's Notebook!


