部署etcd
k8s内的etcd架构选型
可以有多种方式来部署 etcd.
1: 外部单节点:个人测试环境首选, 资源消耗少;
2. 外部集群模式:私有生产环境推荐, 不开启 ssl, 要节约很多CPU资源和同步开销;
3. 外部集群模式 + ssl: 公有云或非可控环境, 还是老实上 ssl 加个密吧;
4. 内部独立节点 即 kubeadm 初始化时, 每个 master 初始化一个独立的 etcd 节点, 非 etcd 集群;
5. 内部集群节点 即 kubeadm 初始化时, 每个 master 初始化一个 etcd 节点, 组成 etcd 集群;
个人更推荐外部集群方式, 减少关联耦合度, 方便后期升级维护啥的。
外部集群推荐使用 systemd 二进制部署, 减少环境依赖和冲突;
说明
我的homelab环境早期使用独立一台物理机开 3 节点 kvm 虚拟机来跑 ssl etcd, 发现就算是空跑, 底层也要占 10%CPU。
当另外部署好了 k8s 集群 5 节点空跑后, 这台只跑 etcd 的机器 cpu 就烧到 20+% 了, 消耗较多;
改为物理机通过 docker 跑 3 节点 etcd,不使用 ssl, cpu 就只占 3-4%;
最后干脆etcd单节点运行, CPU占用就几乎忽略不计了
systemd 部署方式
/opt/k8s/etcd/etcd.env
#[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
[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.targetdocker-compose 部署方式
镜像准备
# 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示例采用的是单节点多实例的方式, 根据实际情况拆开来即可
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"最后更新于