docker/desktop-kubernetes-etcd本镜像为 etcd 的 Docker 镜像,是 k8s.gcr.io/etcd 仓库中部分标签的镜像,提供与上游 etcd 一致的功能和特性。etcd 是一个分布式、可靠的键值存储系统,基于 Raft 共识算法实现数据一致性,专为共享配置和服务发现设计。
/registry/pods/my-pod)。v3.5.10 对应 Kubernetes 1.24+),确保集群组件兼容性。通过 Docker 命令拉取镜像,指定标签(标签列表需参考上游 k8s.gcr.io/etcd 仓库,如 v3.5.10):
bashdocker pull <镜像仓库地址>/etcd:<tag> # 替换 <镜像仓库地址> 和 <tag>,例如原镜像地址为 k8s.gcr.io/etcd
适用于开发或测试环境,快速启动单节点 etcd 服务:
bashdocker run -d \ --name etcd-single \ --publish 2379:2379 \ # 客户端通信端口 --publish 2380:2380 \ # 节点间通信端口(集群模式使用) --volume etcd-data:/var/lib/etcd \ # 数据持久化(Docker 卷) <镜像仓库地址>/etcd:<tag> \ etcd \ --name=etcd-node-1 \ # 节点名称(集群内唯一) --data-dir=/var/lib/etcd \ # 数据存储目录 --advertise-client-urls=[***] \ # 客户端通信地址(对外暴露) --listen-client-urls=[***] \ # 监听客户端连接地址(容器内) --initial-advertise-peer-urls=[***] \ # 节点间通信地址(对外暴露) --listen-peer-urls=[***] \ # 监听节点间连接地址(容器内) --initial-cluster=etcd-node-1=[***] \ # 初始集群配置(单节点) --initial-cluster-token=etcd-cluster-token \ # 集群令牌(确保唯一性) --initial-cluster-state=new # 集群状态(new 表示新建集群)
适用于测试环境模拟 etcd 集群,使用 Docker Compose 编排 3 个节点:
创建 docker-compose.yml 文件:
yamlversion: '3' services: etcd-1: image: <镜像仓库地址>/etcd:<tag> container_name: etcd-1 ports: - "2379:2379" # 客户端端口 - "2380:2380" # 节点间通信端口 volumes: - etcd-data-1:/var/lib/etcd command: - etcd - --name=etcd-1 - --data-dir=/var/lib/etcd - --advertise-client-urls=[***] - --listen-client-urls=[***] - --initial-advertise-peer-urls=[***] - --listen-peer-urls=[***] - --initial-cluster=etcd-1=[***] - --initial-cluster-token=etcd-cluster-token - --initial-cluster-state=new networks: - etcd-net etcd-2: image: <镜像仓库地址>/etcd:<tag> container_name: etcd-2 ports: - "2381:2379" - "2382:2380" volumes: - etcd-data-2:/var/lib/etcd command: - etcd - --name=etcd-2 - --data-dir=/var/lib/etcd - --advertise-client-urls=[***] - --listen-client-urls=[***] - --initial-advertise-peer-urls=[***] - --listen-peer-urls=[***] - --initial-cluster=etcd-1=[***] - --initial-cluster-token=etcd-cluster-token - --initial-cluster-state=new networks: - etcd-net etcd-3: image: <镜像仓库地址>/etcd:<tag> container_name: etcd-3 ports: - "2383:2379" - "2384:2380" volumes: - etcd-data-3:/var/lib/etcd command: - etcd - --name=etcd-3 - --data-dir=/var/lib/etcd - --advertise-client-urls=[***] - --listen-client-urls=[***] - --initial-advertise-peer-urls=[***] - --listen-peer-urls=[***] - --initial-cluster=etcd-1=[***] - --initial-cluster-token=etcd-cluster-token - --initial-cluster-state=new networks: - etcd-net volumes: etcd-data-1: etcd-data-2: etcd-data-3: networks: etcd-net: driver: bridge
启动集群:
bashdocker-compose up -d
etcd 数据需持久化存储以避免容器重启后数据丢失,支持以下两种方式:
etcd-data:/var/lib/etcd。bashdocker run -d \ --name etcd \ -v /host/path/to/etcd/data:/var/lib/etcd \ # 主机目录绑定到容器内数据目录 <镜像仓库地址>/etcd:<tag> \ ... # 其他参数
etcd 主要通过命令行参数配置,常用参数说明如下:
| 参数 | 描述 | 示例值 |
|---|---|---|
--name | 节点名称,集群内唯一 | etcd-node-1 |
--data-dir | 数据存储目录 | /var/lib/etcd |
--advertise-client-urls | 对外暴露的客户端通信地址(供客户端连接) | [***] |
--listen-client-urls | 监听客户端连接的地址(容器内地址,通常为 0.0.0.0:2379) | [***] |
--initial-advertise-peer-urls | 对外暴露的节点间通信地址(供其他节点连接) | [***] |
--listen-peer-urls | 监听节点间连接的地址(容器内地址,通常为 0.0.0.0:2380) | [***] |
--initial-cluster | 初始集群成员配置,格式为 <节点名>=<节点间通信地址>,... | etcd-1=[***] |
--initial-cluster-token | 集群令牌,用于标识集群唯一性,新建集群时需指定 | etcd-cluster-token-123 |
--initial-cluster-state | 集群状态,new 表示新建集群,existing 表示加入现有集群 | new |
--client-cert-auth | 是否启用客户端证书认证(HTTPS 时) | true |
--trusted-ca-file | 可信 CA 证书文件路径(HTTPS 时) | /etc/etcd/ssl/ca.pem |
使用 etcdctl 工具(容器内已内置)与 etcd 服务交互:
进入容器:
bashdocker exec -it etcd-single sh
存储键值对:
bashetcdctl put /my-key "my-value"
获取键值对:
bashetcdctl get /my-key
监听键变化:
bashetcdctl watch /my-key # 另一个终端执行 put 操作,此终端会输出变化
etcdctl snapshot save 备份数据,确保故障时可恢复。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务