etcd 镜像下载

1
docker pull quay.io/coreos/etcd:v3.5.12

1、单节点 etcd 部署实战-基于配置文件

2.1 创建 etcd 数据目录

1
mkdir -p /data/containers/etcd/{data,config}
  • data 目录:建议, 存储容器持久化数据
  • config 目录:建议, 存储容器使用的配置文件

2.2 创建 etcd 配置文件

etcd 服务配置文件路径为:/data/containers/etcd/config/etcd.conf.yml

1
2
3
4
5
6
7
8
9
10
11
12
name: etcd-s1
data-dir: /var/etcd
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
listen-peer-urls: http://0.0.0.0:2380
initial-advertise-peer-urls: http://0.0.0.0:2380
initial-cluster: etcd-s1=http://0.0.0.0:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
logger: zap
log-level: info
#log-outputs: stderr

特殊参数说明:

name: etcd member 名称,可根据实际情况修改

data-dir: etcd 数据目录,可根据实际情况修改

listen-client-urls: client 流量监听地址,没特殊需求按文档填写即可

advertise-client-urls: 该 member 向外部通告的客户端 url 列表,单节点部署时不需要修改,集群部署模式需修改为容器所在节点对外提供服务的 IP

listen-peer-urls: peer 流量监听地址,没特殊需求按文档填写即可

initial-advertise-peer-urls: 该 member 向同一集群内其他 member 通告的 peer url 列表,单节点部署时不需要修改,集群部署模式需修改为容器所在节点对外提供服务的 IP

initial-cluster: 初始化集群节点信息,单节点部署时不需要修改,集群部署模式需要填写集群中所有 member 的信息

initial-cluster-token: 初始化集群时使用的 token,随便写

initial-cluster-state: 初始化集群状态,可选的值为 new 或者 existing,通常采用 new

2.3 创建 docker-compose 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'

services:
etcd:
container_name: etcd-s1
image: quay.io/coreos/etcd:v3.5.12
command: /usr/local/bin/etcd --config-file=/var/lib/etcd/conf/etcd.conf.yml
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
- ${DOCKER_VOLUME_DIRECTORY:-.}/config/etcd.conf.yml:/var/lib/etcd/conf/etcd.conf.yml
- "/etc/localtime:/etc/localtime:ro"
ports:
- 2379:2379
- 2380:2380
restart: always

networks:
default:
name: etcd-tier
driver: bridge

2.4 创建并启动 etcd 服务

1
2
cd /data/containers/etcd
docker compose up -d

2.5 验证容器状态

  • 查看 etcd 容器状态
1
2
3
[root@docker-node-1 etcd]# docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
etcd-s1 quay.io/coreos/etcd:v3.5.12 "/usr/local/bin/etcd…" etcd 53 seconds ago Up 53 seconds 0.0.0.0:2379-2380->2379-2380/tcp, :::2379-2380->2379-2380/tcp

3. 单节点 etcd 部署实战-基于环境变量

3.1 创建 etcd 数据目录

1
mkdir -p /data/containers/etcd/data
  • data 目录:建议, 存储容器持久化数据

3.2 创建 docker-compose 文件

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
version: '3'

services:
etcd:
container_name: etcd-s1
image: quay.io/coreos/etcd:v3.5.12
environment:
- ETCD_NAME=etcd-s1
- ETCD_DATA_DIR=/var/etcd
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd-s1=http://0.0.0.0:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_LOGGER=zap
- ETCD_LOG_LeveL=info
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
- "/etc/localtime:/etc/localtime:ro"
ports:
- 2379:2379
- 2380:2380
restart: always

networks:
default:
name: etcd-tier
driver: bridge

3.3 创建并启动 etcd 服务

1
2
cd /data/containers/etcd
docker compose up -d

3.4 验证容器状态

  • 查看 etcd 容器状态
1
2
3
[root@docker-node-1 etcd]# docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
etcd-s1 quay.io/coreos/etcd:v3.5.12 "/usr/local/bin/etcd" etcd 17 seconds ago Up 16 seconds 0.0.0.0:2379-2380->2379-2380/tcp, :::2379-2380->2379-2380/tcp

4. etcd 服务可用性测试

为了测试 etcd 服务的可用性,额外再找一台机器安装 etcd 客户端工具用于验证测试。

  • 下载并解压软件包
1
2
3
4
cd /srv
wget https://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gz
tar xvf etcd-v3.5.12-linux-amd64.tar.gz
cd etcd-v3.5.12-linux-amd64