簡介
etcd是一種高可用的、分布式數據庫,以鍵值對的方式存儲數據。在kubernetes環(huán)境里,用戶在master所做的一切比如創(chuàng)建pod、刪除pod等操作都記錄在etcd里,所安裝的flannel或者calico網絡的配置也保存在etcd數據庫里。
主機清單
| 角色 | 主機 |
|---|---|
| etcd1 | 172.16.210.53 |
| etcd2 | 172.16.210.54 |
| etcd3 | 172.16.210.55 |
部署etcd
三臺主機提前寫入hosts,關閉防火墻,selinux
1.所有節(jié)點安裝etcd
yum install -y etcd
2.編輯etcd1主機的配置文件
[root@etcd1 ~]# cd /etc/etcd/
[root@etcd1 etcd]# vim etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
ETCD_LISTEN_PEER_URLS="http://172.16.210.53:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.210.53:2379,http://localhost:2379"
ETCD_NAME="etcd1"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.210.53:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.210.53:2379,http://localhost:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://172.16.210.53:2380,etcd2=http://172.16.210.54:2380,etcd3=http://172.16.210.55:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
參數詳解
ETCD_NAME 節(jié)點名稱,默認為default
ETCD_DATA_DIR 服務運行數據保存的路徑
ETCD_LISTEN_PEER_URLS 監(jiān)聽的同伴通信的地址,比如http://ip:2380,如果有多個,使用逗號分隔。需
要所有節(jié)點都能夠訪問,所以不要使用 localhost!
ETCD_LISTEN_CLIENT_URLS 監(jiān)聽的客戶端服務地址
ETCD_ADVERTISE_CLIENT_URLS 對外公告的該節(jié)點客戶端監(jiān)聽地址,這個值會告訴集群中其他節(jié)點。
ETCD_INITIAL_ADVERTISE_PEER_URLS 對外公告的該節(jié)點同伴監(jiān)聽地址,這個值會告訴集群中其他節(jié)點
ETCD_INITIAL_CLUSTER 集群中所有節(jié)點的信息,格式為
ETCD_INITIAL_CLUSTER_STATE 新建集群的時候,這個值為 new;假如加入已經存在的集群,這個值為
existing。
ETCD_INITIAL_CLUSTER_TOKEN 集群的ID,多個集群的時候,每個集群的ID必須保持唯一
3.拷貝配置文件到其他兩個節(jié)點
[root@etcd1 etcd]# scp etcd.conf 172.16.210.54:/etc/etcd/
[root@etcd1 etcd]# scp etcd.conf 172.16.210.55:/etc/etcd/
4.修改其他兩個節(jié)點的配置文件
[root@etcd2 etcd]# vim etcd.conf ####修改etcd節(jié)點名稱和監(jiān)聽的地址,其他參數保持不變
ETCD_LISTEN_PEER_URLS="http://172.16.210.54:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.210.54:2379,http://localhost:2379"
ETCD_NAME="etcd2"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.210.54:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.210.54:2379,http://localhost:2379"
[root@etcd3 etcd]# vim etcd.conf
ETCD_LISTEN_PEER_URLS="http://172.16.210.55:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.210.55:2379,http://localhost:2379"
ETCD_NAME="etcd3"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.210.55:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.210.55:2379,http://localhost:2379"
5.重啟3個節(jié)點的etcd
systemctl restart etcd
6.查看節(jié)點狀態(tài)
[root@etcd1 etcd]# etcdctl member list ##可以看到3個節(jié)點都已經加入進來
1e986f07f84e3d22: name=etcd3 peerURLs=http://172.16.210.55:2380 clientURLs=http://172.16.210.55:2379,http://localhost:2379 isLeader=true
78ce7c84d3112610: name=etcd1 peerURLs=http://172.16.210.53:2380 clientURLs=http://172.16.210.53:2379,http://localhost:2379 isLeader=false
91c3d42e32b4b5fe: name=etcd2 peerURLs=http://172.16.210.54:2380 clientURLs=http://172.16.210.54:2379,http://localhost:2379 isLeader=false
7.測試同步性
在節(jié)點1創(chuàng)建目錄
[root@etcd1 ~]# etcdctl mkdir /aaa
在其他節(jié)點查看
[root@etcd2 ~]# etcdctl ls /
/aaa
[root@etcd3 ~]# etcdctl ls /
/aaa
可以看到在etcd1上創(chuàng)的目錄可以在其他節(jié)點查看到,注意這個/aaa 目錄不是系統(tǒng)的目錄,是etcd數據庫的目錄
8.增加一個節(jié)點
8.1 4臺節(jié)點同步hosts映射
[root@etcd1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.210.53 etcd1
172.16.210.54 etcd2
172.16.210.55 etcd3
172.16.210.56 etcd4
8.2 在第4個節(jié)點安裝etcd
[root@etcd4 ~]# yum install -y etcd
8.3 拷貝配置文件到第4個節(jié)點
[root@etcd1 ~]#scp /etc/etcd/etcd.conf 172.16.210.56:/etc/etcd/
8.4 修改配置文件
[root@etcd4 ~]# vim /etc/etcd/etcd.conf
TCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
ETCD_LISTEN_PEER_URLS="http://172.16.210.56:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.210.56:2379,http://localhost:2379"
ETCD_NAME="etcd4"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.210.56:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.210.56:2379,http://localhost:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://172.16.210.53:2380,etcd2=http://172.16.210.54:2380,etcd3=http://172.16.210.55:2380,etcd4=http://172.16.210.56:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="existing"
8.5 重啟etcd
[root@etcd4 ~]# systemctl restart etcd ##有報錯可以先不用管
Job for etcd.service failed because the control process exited with error code. See "systemctl status etcd.service" and "journalctl -xe" for details.
8.6在節(jié)點1把節(jié)點4添加進來
[root@etcd1 ~]# etcdctl member add etcd4 http://172.16.210.56:2380
8.7回到節(jié)點4再次重啟etcd
[root@etcd4 ~]# systemctl restart etcd
8.8再次查看節(jié)點狀態(tài)
[root@etcd1 ~]# etcdctl member list ##可以看到etcd4節(jié)點已經加入進來
235ef0a0ac7f415: name=etcd4 peerURLs=http://172.16.210.56:2380 clientURLs=http://172.16.210.56:2379,http://localhost:2379 isLeader=false
1e986f07f84e3d22: name=etcd3 peerURLs=http://172.16.210.55:2380 clientURLs=http://172.16.210.55:2379,http://localhost:2379 isLeader=true
78ce7c84d3112610: name=etcd1 peerURLs=http://172.16.210.53:2380 clientURLs=http://172.16.210.53:2379,http://localhost:2379 isLeader=false
91c3d42e32b4b5fe: name=etcd2 peerURLs=http://172.16.210.54:2380 clientURLs=http://172.16.210.54:2379,http://localhost:2379 isLeader=false
9.刪除節(jié)點
命令格式 etcdctl member remove 節(jié)點id
[root@etcd1 ~]# etcdctl member remove 235ef0a0ac7f415
Removed member 235ef0a0ac7f415 from cluster
[root@etcd1 ~]# etcdctl member list ##可以看到節(jié)點4就已經被刪除了
1e986f07f84e3d22: name=etcd3 peerURLs=http://172.16.210.55:2380 clientURLs=http://172.16.210.55:2379,http://localhost:2379 isLeader=true
78ce7c84d3112610: name=etcd1 peerURLs=http://172.16.210.53:2380 clientURLs=http://172.16.210.53:2379,http://localhost:2379 isLeader=false
91c3d42e32b4b5fe: name=etcd2 peerURLs=http://172.16.210.54:2380 clientURLs=http://172.16.210.54:2379,http://localhost:2379 isLeader=false
如果還需要再把節(jié)點添加進來.必須要要刪除節(jié)點的數據目錄
[root@etcd4 ~]# rm -rf /var/lib/etcd/cluster.etcd/
然后在節(jié)點1把節(jié)點4添加進來
[root@etcd1 ~]# etcdctl member add etcd4 http://172.16.210.56:2380
重啟節(jié)點4的etcd并查看節(jié)點狀態(tài)
[root@etcd4 ~]# systemctl restart etcd
[root@etcd4 ~]# etcdctl member list ##可以看到節(jié)點4已經重新加入進來
1e986f07f84e3d22: name=etcd3 peerURLs=http://172.16.210.55:2380 clientURLs=http://172.16.210.55:2379,http://localhost:2379 isLeader=true
630cc3da6c62df70: name=etcd4 peerURLs=http://172.16.210.56:2380 clientURLs=http://172.16.210.56:2379,http://localhost:2379 isLeader=false
78ce7c84d3112610: name=etcd1 peerURLs=http://172.16.210.53:2380 clientURLs=http://172.16.210.53:2379,http://localhost:2379 isLeader=false
91c3d42e32b4b5fe: name=etcd2 peerURLs=http://172.16.210.54:2380 clientURLs=http://172.16.210.54:2379,http://localhost:2379 isLeader=false