部署etcd

部署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.target

docker-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"
最后更新于