创建一个3个节点的etcd3 集群。
注意:etcd2和etcd3 启动命令是有差别的。
之前我踩了这个坑,耗费了不少时间.
准备3台虚拟机 centos7 1810
etcd1 IP: 10.5.7.61
etcd2 IP: 10.5.7.62
etcd3 IP: 10.5.7.63
在每台虚拟机上安装好docker. 我的虚拟机是从模版创建的,本身自带了docker,所以不用安装.
确保镜像可以下载:
docker pull k8s.gcr.io/etcd:3.3.10
如果下载不了,可以
docker pull ascs/etcd:3.3.10
然后 docker image tag ascs/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
mkdir -p /var/server/etcd/
保存下面的3个脚本 start-etcd-cluster.sh ,依次拷贝到每个虚拟机里/var/server/etcd 目录
chmod +x start-etcd-cluster.sh
cd /var/server/etcd
start-etcd-cluster.sh
etcd1 节点:
[root@etcd1]# more start-etcd-cluster.sh
#!/bin/bash
firewall-cmd --add-port=2379/tcp --permanent --zone=public
firewall-cmd --add-port=2380/tcp --permanent --zone=public
current_file_path=$(cd "$(dirname "$0")"; pwd)
cd ${current_file_path}
ETCD_INITIAL_CLUSTER="etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380"
ETCD_INITIAL_CLUSTER_STATE=new
#export currentHostIp=`ip -4 address show eth0 | grep 'inet' | grep -v grep | awk '{print $2}' | cut -d '/' -f1`
firewall-cmd --reload
firewall-cmd --list-all
#注意防火墙出现奇怪问题,集群可能还无法访问,只能本机访问,需要重现启动可以解决问题. to do
docker stop etcd1
docker rm etcd1
docker run \
--restart=always \
--hostname=etcd1 \
-p 2379:2379 \
-p 2380:2380 \
-v /etc/localtime:/etc/localtime \
-v `pwd`/data:/data \
--name etcd1 \
k8s.gcr.io/etcd:3.3.10 \
etcd \
-name etcd1 \
--initial-advertise-peer-urls http://10.5.7.61:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://10.5.7.61:2379 \
--initial-cluster-token etcd-cluster-of-k8s \
--initial-cluster etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380 \
--initial-cluster-state new \
--data-dir=/data
在etcd2节点
#!/bin/bash
firewall-cmd --add-port=2379/tcp --permanent --zone=public
firewall-cmd --add-port=2380/tcp --permanent --zone=public
current_file_path=$(cd "$(dirname "$0")"; pwd)
cd ${current_file_path}
ETCD_INITIAL_CLUSTER="etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380"
ETCD_INITIAL_CLUSTER_STATE=new
#export currentHostIp=`ip -4 address show eth0 | grep 'inet' | grep -v grep | awk '{print $2}' | cut -d '/' -f1`
firewall-cmd --reload
firewall-cmd --list-all
#注意防火墙出现奇怪问题,集群可能还无法访问,只能本机访问,需要重现启动可以解决问题. to do
docker stop etcd2
docker rm etcd2
docker run \
--restart=always \
--hostname=etcd2 \
-p 2379:2379 \
-p 2380:2380 \
-v /etc/localtime:/etc/localtime \
-v `pwd`/data:/data \
--name etcd2 \
k8s.gcr.io/etcd:3.3.10 \
etcd \
-name etcd2 \
--initial-advertise-peer-urls http://10.5.7.62:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://10.5.7.62:2379 \
--initial-cluster-token etcd-cluster-of-k8s \
--initial-cluster etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380 \
--initial-cluster-state new \
--data-dir=/data
在etcd3节点
#!/bin/bash
firewall-cmd --add-port=2379/tcp --permanent --zone=public
firewall-cmd --add-port=2380/tcp --permanent --zone=public
current_file_path=$(cd "$(dirname "$0")"; pwd)
cd ${current_file_path}
ETCD_INITIAL_CLUSTER="etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380"
ETCD_INITIAL_CLUSTER_STATE=new
#export currentHostIp=`ip -4 address show eth0 | grep 'inet' | grep -v grep | awk '{print $2}' | cut -d '/' -f1`
firewall-cmd --reload
firewall-cmd --list-all
#注意防火墙出现奇怪问题,集群可能还无法访问,只能本机访问,需要重现启动可以解决问题. to do
docker stop etcd3
docker rm etcd3
docker run \
--restart=always \
--hostname=etcd3 \
-p 2379:2379 \
-p 2380:2380 \
-v /etc/localtime:/etc/localtime \
-v `pwd`/data:/data \
--name etcd3 \
k8s.gcr.io/etcd:3.3.10 \
etcd \
-name etcd3 \
--initial-advertise-peer-urls http://10.5.7.63:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://10.5.7.63:2379 \
--initial-cluster-token etcd-cluster-of-k8s \
--initial-cluster etcd1=http://10.5.7.61:2380,etcd2=http://10.5.7.62:2380,etcd3=http://10.5.7.63:2380 \
--initial-cluster-state new \
--data-dir=/data
依次启动 etcd1 etcd2 etcd3 里的/var/server/etcd/start-etcd-cluster.sh
然后,打开浏览器测试
测试: