k8s环境-部署etcd

k8s环境-部署etcd

架构说明

可以有多种方式来部署 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"
Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2023-03-23 00:00 UTC