- 需要搭建俩个虚拟机(centOS7安装)
- 俩个虚拟机里面安装docker
- 俩个虚拟机里面安装etcd
静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况,这时可通过已经搭建的etcd来辅助搭建新的etcd集群。通过已有的etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io
etcd.conf1
#########################################################
###### 请根据各节点实际情况修改配置:1/3/4/5/6/7 ######
#########################################################
#[Member]
#1.节点名称,必须唯一
ETCD_NAME="etcd01"#2.设置数据保存的目录
ETCD_DATA_DIR="/var/lib/etcd"#3.用于监听其他etcd member的url
ETCD_LISTEN_PEER_URLS="http://192.168.44.138:2380"#4.该节点对外提供服务的地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.44.138:2379,http://127.0.0.1:2379"#[Clustering]
#5.对外公告的该节点客户端监听地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.138:2379"#6.该节点成员对等URL地址,且会通告集群的其余成员节点
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.138:2380"#7.集群中所有节点的信息
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"#8.创建集群的token,这个值每个集群保持唯一
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"#9.初始集群状态,新建集群的时候,这个值为new;
ETCD_INITIAL_CLUSTER_STATE="new"#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
# 为了兼容flannel,将默认开启v2版本,故配置文件中设置
ETCD_ENABLE_V2="true"
etcd.conf2
#########################################################
###### 请根据各节点实际情况修改配置:1/3/4/5/6/7 ######
#########################################################
#[Member]
#1.节点名称,必须唯一
ETCD_NAME="etcd02"#2.设置数据保存的目录
ETCD_DATA_DIR="/var/lib/etcd"#3.用于监听其他etcd member的url
ETCD_LISTEN_PEER_URLS="http://192.168.44.139:2380"#4.该节点对外提供服务的地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.44.139:2379,http://127.0.0.1:2379"#[Clustering]
#5.对外公告的该节点客户端监听地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.44.139:2379"#6.该节点成员对等URL地址,且会通告集群的其余成员节点
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.44.139:2380"#7.集群中所有节点的信息
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.44.138:2380,etcd02=http://192.168.44.139:2380"#8.创建集群的token,这个值每个集群保持唯一
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"#9.初始集群状态,新建集群的时候,这个值为new;
ETCD_INITIAL_CLUSTER_STATE="new"#10.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
# 为了兼容flannel,将默认开启v2版本,故配置文件中设置
ETCD_ENABLE_V2="true"
修改/etc/etcd/etcd.conf文件后,要先删除/var/lib/etcd目录下保存的数据,再重新启用服务,不然失败
cd /var/lib/etcd && rm -rf *
etcd.service
[Unit]
Description=Etcd Server
Documentation=https://github.com/etcd-io/etcd
After=network.target[Service]
User=root
Type=notify
## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
systemctl daemon-reload
firewall-cmd --zone=public --add-port=2379/tcp --permanent 开启2379
firewall-cmd --zone=public --add-port=2380/tcp --permanent 开启2380
firewall-cmd --reload 重启
firewall-cmd --list-port 查看开启防火墙的端口
然后启动
master-16 etcd[25461]: request cluster ID mismatch (got bdd7c7c32bde1208 want 698851d67fea3c17)
原因: 集群ip地址变化后,除了修改/etc/etcd/etcd.conf 文件并重新启用服务外,还需要删除/var/lib/etcd目录下保存的数据
解决办法 :删除了etcd集群所有节点中的--data_dir的内容
systemctl daemon-reload 刷新
systemctl enable etcd 启动
systemctl start etcd 启动
systemctl status etcd 查看状态
systemctl stop etcd 停止
systemctl restart etcd 重启
在另一台虚拟机做同样操作
各节点重启启动完成后,在任意节点执行etcdctl member list可列所有集群节点信息
etcdctl member list
etcdctl member list -w table
etcdctl endpoint health
etcdctl endpoint status
http命令
etcdctl --endpoints=http://192.168.44.139:2379,http://192.168.44.139:2379,http://192.168.44.139:2379 endpoint health
etcdctl --endpoints=http://192.168.44.139:2379 endpoint health
etcdctl --endpoints=http://192.168.44.139:2379 member list -w table