架构说明
可以有多种方式来部署 etcd.
方案一: 外部单节点
个人测试环境首选, 资源消耗少;
方案二: 外部集群
私有生产环境推荐, 不开启 ssl, 要节约很多CPU资源和同步开销;
方案三: 外部集群 + ssl
公有云或非可控环境, 还是老实上 ssl 加个密吧;
方案四: 内部独立节点
即 kubeadm 初始化时, 每个 master 初始化一个独立的 etcd 节点, 非 etcd 集群;
方案五: 内部集群节点
即 kubeadm 初始化时, 每个 master 初始化一个 etcd 节点, 组成 etcd 集群;
个人更推荐外部集群方式, 减少关联耦合度, 方便后期升级维护啥的。
外部集群又可以分 docker 部署方式和 systemd 部署方式, 更推荐 systemd 方式部署; 这种核心组件少和别的组件耦合太多。
说明
我之前的环境是独立一个物理机开 3 节点 kvm 虚拟机来跑 ssl etcd, 发现就算是空跑, 也要占 10%CPU。
如果再部署好了 k8s 集群 5 节点空跑后, 这台只跑 etcd 的机器 cpu 就烧到 20+% 了, 个人环境没有必要;
于是后来降级, 物理机通过 docker 跑 3 节点 etcd,不使用 ssl, cpu 就只占 3-4%;
再后来干脆单节点运行, CPU占用就几乎忽略不计了
systemd 部署方式
/opt/k8s/etcd/etcd.env
1
2
3
4
5
6
|
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/opt/k8s/etcd/data"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
|
/usr/lib/systemd/system/etcd.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/k8s/etcd/etcd.env
ExecStart=/opt/k8s/etcd/etcd
Restart=on-failure
RestartSec=3
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
|
docker-compose 部署方式
镜像准备
1
2
3
4
|
# v3.4.24
docker pull quay.io/coreos/etcd:v3.4.24
docker tag quay.io/coreos/etcd:v3.4.24 registry.wait/cwx/coreos/etcd:v3.4.24
docker push registry.wait/cwx/coreos/etcd:v3.4.24
|
示例采用的是单节点多实例的方式, 根据实际情况拆开来即可
docker-compose.yml
下载 docker-compose.yml
docker compose up -d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
version: '3'
services:
etcd1:
image: registry.wait/cwx/coreos/etcd:v3.4.24
environment:
- ETCD_NAME=etcd1
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2370
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER_STATE=new
ports:
- 2370:2370
etcd2:
image: registry.wait/cwx/coreos/etcd:v3.4.24
environment:
- ETCD_NAME=etcd2
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2371
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2371
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER_STATE=new
ports:
- 2371:2371
etcd3:
image: registry.wait/cwx/coreos/etcd:v3.4.24
# networks:
# - etcd
environment:
- ETCD_NAME=etcd3
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2372
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2372
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER_STATE=new
ports:
- "2372:2372"
|