etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node.
| 节点名称 | 节点IP | OS版本 | ETCD版本 |
|---|---|---|---|
| node1 | 192.168.0.233 | CentOS 7.9 | v3.5.4 |
| node2 | 192.168.0.200 | CentOS 7.9 | v3.5.4 |
| node3 | 192.168.0.145 | CentOS 7.9 | v3.5.4 |
ETCD 集群采用一主多从的架构。ETCD 集群中任何一个节点都可能成为主节点,节点之间选举主节点采用 Raft 一致性算法。Raft 算法需要一半以上的节点同意才能成为主节点,当节点数量为偶数时,可能会出现两个节点获取同样的票数导致选举失败,所以,ETCD集群节点数量建议采用奇数个。
在上述的三个节点上执行下边的两个过程,主要完成账号的创建与基础开发包的下载更新。
groupadd kube
useradd -d /home/kube -m kube -s /bin/bash -g kube
yum groupinstall -y "Development Tools"
注意:需要在上述三个节点上执行安装准备过程,由于 root 用户的权限太大,所以,不建议使用 root 用户来部署 etcd 集群,后续将会使用 kube 用户部署 etcd。
etcd 集群部署主要分为两种方式,一种是使用etcd开源的源代码编译部署,另一种是使用etcd预编译包安装部署。使用源代码部署需要搭建 golang 开发环境,并且可能涉及到国外的依赖代码库下载,如果网络条件不允许的情况下,不建议采用源代码部署。3.1.1 章节主要介绍源代码部署的方式,3.1.2 章节主要介绍预编译包部署方式。建议选择 3.1.2 章节介绍的部署方式。
请在 etcd 服务器节点上执行下面的操作步骤,但注意配置信息中IP地址一定要与节点实际IP地址对应。
yum install git
yum install golang
cd /opt
su - kube
git clone -b v3.5.4 https://github.com/etcd-io/etcd.git etcd-v3.5.4
cd etcd-v3.5.4
./build.sh
cd /opt
su - kube
wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz
tar -xvf etcd-v3.5.4-linux-amd64.tar.gz
mv etcd-v3.5.4-linux-amd64 etcd-v3.5.4
rm -rf etcd-v3.5.4-linux-amd64.tar.gz
修改 kube 用户的环境变量配置文件。配置文件路径: /home/kube/…bash_profile
ETCD_HOME=/opt/etcd-v3.5.4
PATH=$PATH:$ETCD_HOME
export PATH
mkdir /opt/etcd-v3.5.4/data
cat >/opt/etcd-v3.5.4/etcd.conf <上边的 ETCD_NAME 变量为节点的名称,不同的节点请给予不同的名称,且在 ETCD_INITIAL_CLUSTER节点中引用了所有节点的地址信息。两者要对应上。其次其中涉及到IP地址要根据实际节点的IP地址进行调整,如上边配置中的 192.168.0.233 要替换成实际节点的IP地址。
cat > /usr/lib/systemd/system/etcd.service <systemctl enable etcd
systemctl start etcd
启动第一个 etcd 节点的时候,命令行会卡住,这个属于正常情况,当启动第二个etcd 节点时,卡住的状态将会消失。也就是当集群内第一个 etcd 节点初次启动时,它会阻塞等待至少另一个节点加入集群。当两个节点都正常的加入集群后,阻塞状态将会消失,服务成功启动。
systemctl status etcd
等到所有节点完成 etcd 的安装后,就可以通过下面的方法检查集群内 ETCD 节点的健康状态。
su - kube
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/ssl/etcd.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem --endpoints="https://192.168.0.200:2379,https://192.168.0.145:2379,https://192.168.0.233:2379" endpoint status --write-out='table'
显示信息是:

解决办法:
1。 删除该节点的数据
$ rm /opt/etcd-v3.5.4/data
2。 设置 ETCD_INITIAL_CLUSTER_STATE="existing"
3。 重启节点
$ systemctl restart etcd