ETCD参数说明:
● –data-dir 指定节点的数据存储目录,若不指定,则默认是当前目录。这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指 定–wal-dir,还会存储WAL文件
● –wal-dir 指定节点的was文件存储目录,若指定了该参数,wal文件会和其他数据文件分开存储
● –name 节点名称
● –initial-advertise-peer-urls 告知集群其他节点的URL,tcp2380端口用于集群通信
● –listen-peer-urls 监听URL,用于与其他节点通讯
● –advertise-client-urls 告知客户端的URL, 也就是服务的URL,tcp2379端口用于监听客户端请求
● –initial-cluster-token 集群的ID
● –initial-cluster 集群中所有节点
● –initial-cluster-state 集群状态,new为新创建集群,existing为已存在的集群
创建etcd高可用集群:
kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes master 机器
搭建etcd集群需要注意的是etcd最少需要三台才能发挥其高可用的功能,因为etcd集群内部使用的是选举制度,通过内部选举一台Leader,而如果当集群内部主机少于三台时,etcd的Leader选举功能就出现问题,导致Leader选举失败,从而etcd不能正常与外界通讯
yum -y install etcd
vim /etc/etcd/etcd.conf
#[Member]
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://当前服务器IP:2380"
ETCD_LISTEN_CLIENT_URLS="http://当前服务器IP:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://当前服务器IP:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://当前服务器IP:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.10.9:2380,etcd2=http://192.168.10.10:2380,etcd3=http://192.168.10.11:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD TLS 配置的坑:Etcd 各个节点间必须保证时钟同步,否则会造成启动失败等错误
vim /usr/lib/systemd/system/etcd.service //修改etcd启动文件
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
• 指定 etcd 的工作目录为 /var/lib/etcd,数据目录为 /var/lib/etcd,需在启动服务前创建这两个目录;
• 注意三台etcd的配置文件中ETCD_NAME的配置,这里三台分别设置的是etcd1、etcd2、etcd3。
启动etcd服务:
待三台etcd都搭建完成之后,可依次启动(在etcd集群中如果只单独启动一台etcd会出现报错)
[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl start etcd
[root@master01 ~]# systemctl enable etcd
验证etcd是否正确启动:
[root@test ~]# etcdctl cluster-health
member 8c632555af4d958d is healthy: got healthy result from http://192.168.10.10:2379
member bc34c6bd673bdf9f is healthy: got healthy result from http://192.168.10.11:2379
member ec065b41856af137 is healthy: got healthy result from http://192.168.10.9:2379
cluster is healthy
[root@test ~]#集群启动正常
添加证书后的集群验证
export ETCDCTL_API=3
etcdctl --cacert=/etc/etcd/ssl/etcd-root-ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem --endpoints=https://192.168.10.9:2379,https://192.168.10.10:2379,https://192.168.10.11:2379 cluster-health
特别提醒:使用前,务必设置环境变量 ETCDCTL_API=3
在 /etc/profile 中加入以下内容:
export ETCDCTL_API=3
注意:如果不设置 ETCDCTL_API=3,则默认是的API版本是2: