今日总结 – Kubernetes 1.19.0——ETCD

ETCD流程

ETCD集群是一个分布式系统,使用Raft协议来维护集群内各个节点状态的一致性.

主机状态Leader,Follower,Candidate.

当集群初始化时候,每个节点都是Follower角色.

通过心跳与其他节点同步数据.

当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选主投票.

配置etcd集群,建议可能是奇数个节点,而不要偶数个节点.

ETCD搭建

同之前搭建k8s 1.19.0版本一样,首先准备好3台机器

Etcd1:192.168.135.81

Etcd2:192.168.135.82

Etcd3:192.168.135.83

先在所有etcd节点上安装etcd

对于etcd来说,配置文件在/etc/etcd这个目录下面

其中[Member]用于配置单节点,[Clustering]用于配置集群

配置文件

ETCD_DATA_DIR=”/var/lib/etcd/cluster.etcd”    —数据保留路径

ETCD_LISTEN_PEER_URLS=”http://192.168.135.81:2380,http://localhost:2380″

ETCD_LISTEN_CLIENT_URLS=”http://192.168.135.81:2379,http://localhost:2379″

ETCD_NAME=”etcd-81″  —节点名

ETCD_INITIAL_ADVERTISE_PEER_URLS=”http://192.168.135.81:2380″

ETCD_ADVERTISE_CLIENT_URLS=”http://localhost:2379,http://192.168.26.135:2379″

ETCD_INITIAL_CLUSTER=”etcd-81=http://192.168.135.81:2380,etcd-82=http://192.168.135.82:2380,etcd-83=http://192.168.135.83:2380″ —初始化节点的时候的所有节点

ETCD_INITIAL_CLUSTER_TOKEN=”etcd-cluster” —相当于一种密钥,需在所有节点都一致

ETCD_INITIAL_CLUSTER_STATE=”new”  

参数含义

ETCD_NAME 节点名称,默认为default ETCD_DATA_DIR

服务运行数据保存的路径 ETCD_LISTEN_PEER_URLS

监听的同伴通信的地址,比如http://ip:2380,如果有多个,使用逗号分隔。需要 所有节点都能够访问,所以不要使用 localhost!

ETCD_LISTEN_CLIENT_URLS 监听的客户端服务地址.

ETCD_ADVERTISE_CLIENT_URLS 对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点.

ETCD_INITIAL_ADVERTISE_PEER_URLS 对外公告的该节点同伴监听地址,这个值会告诉集群中其他节点.

ETCD_INITIAL_CLUSTER 集群中所有节点的信息,格式为 ETCD_INITIAL_CLUSTER_STATE 新建集群的时候,这个值为 new;假如加入已经存在的集群,这个值为 existing.

ETCD_INITIAL_CLUSTER_TOKEN 集群的ID,多个集群的时候,每个集群的ID必须保持唯一.

在所有节点的这份配置文件需保持同步(不同节点ip不同,注意红框中需修改成对应的ip)

注:ip一定要写对

然后依次启动3个节点的etcd服务

查看集群状态信息 etcdctl member list

Leader已选出

到此etcd集群搭建完成

验证

现在在各节点通过etcdctl查看根下无任何数据

在Leader节点创建一个文件aa成功后,所有节点均有该文件

(不管在哪个节点创建或删除,均会同步至所有节点,此处为节约篇幅省略)

注:这里的根并不是系统的,而是指的etcd子系统的根/

ETCD的管理

版本管理

以上篇幅均采用的是ETCD的v2写法.

对于ETCD来说,它有2个版本,设置成v3版,子命令会增多,并且以键值对存储

通过export命令将环境设置成v3版本后子命令就变多了

注:各节点需同时设置同步

定义一个键值对

查看k1的值(各节点均一样,为节约篇幅这里只截图一个节点)
也可以远程连接到其他机器进行查询

快照备份

对ETCD做快照(数据备份),可通过恢复快照的方式把数据恢复

etcdctl snapshot save snap1.db

快照里包含我们所写数据的,比如k1=v1

需同步至其他节点

模拟数据被清空数据恢复

删除数据

开始恢复数据:

在所有节点上关闭etcd,并删除/var/lib/etcd/里的所有数据

在所有节点将快照文件的所属组改成etcd

所有节点运行

etcdctl snapshot restore snap1.db –name etcd-8X –initial-cluster etcd-81=http://192.168.135.81:2380,etcd-82=http://192.168.135.82:2380,etcd-83=http://192.168.135.83:2380 –initial-advertise-peer-urls http://192.168.135.8X:2380 –data-dir /var/lib/etcd/cluster.etcd

注意红框需要改成对应节点的ip

所有节点运行chown -R etcd.etcd /var/lib/etcd/改成etcd所属组

然后所有节点systemctl start etcd服务后查看,数据已恢复

正文完