昊梵体育网

Docker Compose 安装 Etcd

在云原生环境下,etcd 是最核心的存储组件之一,也是很多云原生应用都依赖的存储组件,如 Kubernetes、Core

在云原生环境下,etcd 是最核心的存储组件之一,也是很多云原生应用都依赖的存储组件,如 Kubernetes、CoreDNS、Rook等。

etcd 在2026年5月最新版本

v3.6.11

v3.5.30

v3.4.44

etcd 的 Docker 容器镜像托管在 Quay.io 和 Gcr.io 两个平台,藏云阁提供镜像的同步

registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11

registry.cncfstack.com/gcr.io/etcd-development/etcd:v3.6.11

etcd 项目最初由 CoreOS 公司创建并开源,因此其早期镜像托管在 CoreOS 活跃使用的 quay.io 上。随着 etcd 成为 CNCF(云原生计算基金会) 的项目,并成为 Kubernetes 的核心数据存储,它与 Kubernetes 生态的联系愈发紧密。为了让 Kubernetes 集群的部署和运行更加稳定高效,etcd 官方在 2017 年底决定将 gcr.io 作为主要分发渠道之一,但同时也明确表示 quay.io 上的镜像不会被废弃,会继续维护。

其他 etcd 资源:

etcd 官方网站镜像地址: https://etcd.website.cncfstack.com

etcd Code 代码仓库镜像: https://cncfstack.com/code/etcd-io/etcd

etcd Logo: https://cncfstack.com/p/etcd/logo/

etcd HelmChart: https://cncfstack.com/p/etcd/helmchart

docker-compose.yml

单机使用 docker-compose 运行 etcd 可以直接使用如下配置。

核心需要注意的配置是 /data/etcd 这个挂载,要指定一个宿主机上的目录,用来保存 etcd 的数据。由于 etcd 是 IO 敏感型的,强烈推荐使用 SSD 类型的磁盘来挂载。

services:  etcd:    container_name:etcd    image:registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11    restart:unless-stopped    deploy:      resources:        limits:          cpus:'2'          memory:2G    ports:      -"2379:2379"      -"2380:2380"    volumes:      -/data/etcd:/var/lib/etcd      -/etc/localtime:/etc/localtime:ro    environment:      -ETCD_NAME=etcd-node01      -ETCD_DATA_DIR=/var/lib/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=etcd-node01=http://0.0.0.0:2380      -ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster-token      -ETCD_INITIAL_CLUSTER_STATE=new      -ETCD_AUTO_COMPACTION_MODE=revision      -ETCD_AUTO_COMPACTION_RETENTION=1000      -ETCD_QUOTA_BACKEND_BYTES=4294967296      -ETCD_SNAPSHOT_COUNT=50000      -ETCD_LOG_LEVEL=info      -ETCD_LOGGER=zap      -ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381    healthcheck:      test: ["CMD","etcdctl","endpoint","health"]      interval:30s      timeout:10s      retries:5      start_period:30s    logging:      driver:"json-file"      options:        max-size:"10m"        max-file:"3"

在 docker-compose.yml 目录下执行如下命令启动

docker-compose up -d

etcdctl alias

etcd 在基于容器部署时,在宿主机上是没有 etcdctl 工具,而直接使用 docker run 运行 etcdctl 命令太长也不方便。

可以通过添加一个 alias 别名的方式来简化命令。

IP=`ip addr show eth0 |grep"inet\ "|awk -F'/''{print $1}'|awk'{print $2}'`alias etcdctl="docker run -i --rm registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11 etcdctl --endpoints http://${IP}:2379 "

后续可以直接使用 etcdctl 命令来操作 etcd。

验证

验证过程用于判断 etcd 是否安装成功,能否正常读写数据

查看etcd容器状态

使用 docker compose ls 命令查看 etcd 容器状态

# docker compose ls  |grep etcdetcd                running(1)          /xxxxxx/etcd/docker-compose.yml

查看etcd健康状态

etcd 集群健康状态可以通过 etcdctl endpoint health 命令查看

# etcdctl endpoint healthhttp://192.168.1.1:2379 is healthy: successfully committed proposal: took = 2.373165ms

验证etcd数据读写

读写数据测试

# etcdctl put aa bbOK# etcdctl get aaaabb