COOKBOOK-Kubernetes二进制高可用部署-Etcd高可用

所有虚拟机创建 etcd 目录

1
mkdir -p /etc/etcd/data

所有虚拟机下载 etcd 并解压

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载etcd
wget -P /usr/local/src https://github.com/etcd-io/etcd/releases/download/v3.5.14/etcd-v3.5.14-linux-amd64.tar.gz

# 解压
tar -C /usr/local/src -zxvf etcd-v3.5.14-linux-amd64.tar.gz

# 移动可执行文件到bin目录
mv /usr/local/src/etcd-v3.5.14-linux-amd64/etcd /usr/local/bin/
mv /usr/local/src/etcd-v3.5.14-linux-amd64/etcdctl /usr/local/bin/
mv /usr/local/src/etcd-v3.5.14-linux-amd64/etcdutl /usr/local/bin/

# 配置可执行文件的属性
chmod 755 /usr/local/bin/etcd
chmod 755 /usr/local/bin/etcdctl
chmod 755 /usr/local/bin/etcdutl

所有虚拟机创建 etcd systemd 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 创建 etcd systemd 服务文件
cat << EOF > /etc/etcd/etcd.service
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
EnvironmentFile=/etc/etcd/etcd.env
ExecStart=/usr/local/bin/etcd
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 软链到系统服务目录
ln -s /etc/etcd/etcd.service /usr/lib/systemd/system/etcd.service

创建 etcd 环境变量配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 192.168.56.109执行
cat << EOF > /etc/etcd/etcd.env
ETCD_NAME=etcd1
ETCD_DATA_DIR=/etc/etcd/data

ETCD_CLIENT_CERT_AUTH=true
ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.109:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.109:2379

ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key
ETCD_LISTEN_PEER_URLS=https://192.168.56.109:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.109:2380

ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380"
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 192.168.56.110执行
cat << EOF > /etc/etcd/etcd.env
ETCD_NAME=etcd2
ETCD_DATA_DIR=/etc/etcd/data

ETCD_CLIENT_CERT_AUTH=true
ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.110:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.110:2379

ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key
ETCD_LISTEN_PEER_URLS=https://192.168.56.110:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.110:2380

ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380"
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 192.168.56.111执行
cat << EOF > /etc/etcd/etcd.env
ETCD_NAME=etcd3
ETCD_DATA_DIR=/etc/etcd/data

ETCD_CLIENT_CERT_AUTH=true
ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.111:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.111:2379

ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key
ETCD_LISTEN_PEER_URLS=https://192.168.56.111:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.111:2380

ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380"
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
EOF

所有虚拟机启动 etcd 服务

1
systemctl start etcd && systemctl enable etcd

验证 etcd 服务

1
2
3
4
5
6
etcdctl --cacert=/etc/etcd/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.56.109:2379,https://192.168.56.110:2379,https://192.168.56.111:2379 endpoint health

# 结果如下:
# https://192.168.56.109:2379 is healthy: successfully committed proposal: took = 36.035318ms
# https://192.168.56.110:2379 is healthy: successfully committed proposal: took = 38.578044ms
# https://192.168.56.111:2379 is healthy: successfully committed proposal: took = 38.20696ms

(•̀ᴗ•́)و ̑̑

Share