
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Etcd 是一款分布式键值存储工具,专为跨集群安全存储数据设计。凭借其可靠性、容错能力和易用性,Etcd 在生产环境中被广泛应用。
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/etcd
如需在生产环境使用 Etcd,可尝试 [VMware Tanzu Application Catalog] (Bitnami 目录的商业版)。
自 2025 年 8 月 28 日起,Bitnami 将升级其公共软件目录,通过新的 [Bitnami Secure Images 计划] 提供精选的强化安全镜像。此次变更包括:
这些变更旨在通过推广软件供应链完整性最佳实践和最新部署方式,提升所有 Bitnami 用户的安全态势。详情见 [Bitnami Secure Images 公告] 。
本 Chart 使用 [Helm] 包管理器在 [Kubernetes] 集群上部署 [etcd] 。
使用发布名称 my-release 安装 Chart:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/etcd
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为实际的 Helm 仓库地址。例如,Bitnami 仓库需使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
上述命令将以默认配置在 Kubernetes 集群部署 Etcd。参数 部分列出了安装时可配置的选项。
提示:使用
helm list查看所有发布。
Bitnami Chart 允许为部署中的所有容器设置资源请求(requests)和限制(limits),相关配置位于 resources 字段(见参数表)。生产环境必须设置资源请求,并根据实际场景调整。
为简化配置,Chart 提供 resourcesPreset 参数,可自动按预设值配置 resources。预设定义见 [bitnami/common Chart] 。但生产环境不建议直接使用 resourcesPreset,需根据具体需求调整。更多容器资源管理信息见 [Kubernetes 官方文档] 。
生产环境强烈建议使用不可变标签,避免因标签指向镜像更新导致部署意外变更。Bitnami 会在主容器版本更新、重大变更或发现严重漏洞时,发布新的 Chart 以更新容器镜像。
设置 metrics.enabled=true 可启用 Etcd 原生 Prometheus 指标暴露,容器和 Service(若 metrics.useSeparateEndpoint=true)将开放指标端口,并添加 Prometheus 自动发现注解。
前提条件
需已安装 Prometheus 或 Prometheus Operator。可通过 [Bitnami Prometheus Helm Chart] 或 [Bitnami Kube Prometheus Helm Chart] 快速部署。
集成 Prometheus Operator
设置 *.metrics.podMonitor.enabled=true 可部署 PodMonitor 对象以集成 Prometheus Operator。需确保集群已安装 Prometheus Operator 的 CRD,否则会报错:
textno matches for kind "PodMonitor" in version "monitoring.coreos.com/v1"
可通过 [Bitnami Kube Prometheus Helm Chart] 安装所需 CRD 和 Prometheus Operator。
Bitnami Chart 在首次启动时配置凭证,后续修改密钥或凭证需手动操作:
SECRET_NAME 和 PASSWORD 占位符):shellkubectl create secret generic SECRET_NAME --from-literal=etcd-root-password=PASSWORD --dry-run -o yaml | kubectl apply -f -
Bitnami Etcd Chart 可快速搭建可扩展、支持灾难恢复的 Etcd 集群,通过环境变量配置静态发现实现集群引导。基于初始副本数和无头服务(headless service)添加的 DNS A 记录,Chart 可自动计算每个节点的对等 URL。
Chart 利用 Kubernetes 特性确保集群引导成功:
更多信息见 [etcd 发现机制] 、[Pod 管理策略] 和 [未就绪 Pod DNS 记录] 。
以下是 3 副本 Etcd 集群的环境配置示例:
| 节点 | 环境变量 | 值 |
|---|---|---|
| 0 | ETCD_NAME | etcd-0 |
| 0 | ETCD_INITIAL_ADVERTISE_PEER_URLS | <[]> |
| 1 | ETCD_NAME | etcd-1 |
| 1 | ETCD_INITIAL_ADVERTISE_PEER_URLS | <[]> |
| 2 | ETCD_NAME | etcd-2 |
| 2 | ETCD_INITIAL_ADVERTISE_PEER_URLS | <[]> |
| 所有 | ETCD_INITIAL_CLUSTER_TOKEN | etcd-cluster-k8s |
| 所有 | ETCD_INITIAL_CLUSTER | etcd-0=<[]>,etcd-1=<[]>,etcd-2=<[]> |
就绪和存活探针默认延迟 60 秒,确保副本有时间启动并相互发现。之后,通过 etcdctl endpoint health 定期检查副本健康状态。
可扩展性
集群扩缩容时,Chart 通过 Etcd 重配置操作添加/移除节点:
etcdctl member remove,并将结果存储在 PV 中。手动删除 Pod 或 Kubernetes 重调度时也会触发此钩子,实现无人工干预的扩缩容。示例流程:
etcdctl member add 重新加入集群,恢复至 3 副本。若钩子执行失败,初始化逻辑会检查 PV 中存储的 etcdctl member remove 输出,通过 etcdctl member update 重新添加节点。此时集群不会自动扩缩容,其他节点可能报错:
textE | rafthttp: failed to dial XXXXXXXX on stream Message (peer XXXXXXXX failed to find local node YYYYYYYYY)
更多信息见 [etcd 运行时配置] 和 [Kubernetes 节点排空] 。
集群更新
更新 Etcd StatefulSet(如通过 helm upgrade 更新 Chart 版本)时,需按 StatefulSet 更新策略替换 Pod。Chart 默认使用“RollingUpdate”策略,按 Pod 序号从大到小依次更新,等待当前 Pod 就绪后再更新前一个。更多信息见 [StatefulSet 更新策略] 。
灾难恢复
若超过 (N-1)/2 节点故障且“pre-stop”钩子未移除故障节点,集群将失去法定人数(quorum),无法达成共识或接受更新,需从快照恢复(所有节点必须使用同一快照)。
Bitnami Etcd Chart 可配置 Kubernetes CronJob 定期创建数据快照并存储在 RWX 卷中。集群故障时,Pod 将自动尝试使用最新快照恢复。启用方法。
Chart 默认配置“软”Pod 反亲和性(Pod AntiAffinity),降低集群整体故障风险。更多信息见 [etcd 恢复] 、[Kubernetes CronJob] 和 [Pod 亲和性与反亲和性] 。
可配置基于角色的访问控制(RBAC)和 TLS 加密增强安全性。
配置 RBAC
设置以下参数启用 RBAC:
textauth.rbac.create=true auth.rbac.rootPassword=ETCD_ROOT_PASSWORD
将创建拥有全部权限的 root 用户及对应角色,其他用户默认使用无权限的 guest 角色。
配置节点间 TLS 加密
设置以下参数启用节点间安全通信:
textauth.peer.secureTransport=true auth.peer.useAutoTLS=true
配置客户端证书
创建包含证书、密钥和 CA 的密钥(Secret),并设置以下参数启用客户端与服务端的安全通信:
textauth.client.secureTransport=true auth.client.enableAuthentication=true auth.client.existingSecret=etcd-client-certs
更多信息见 [etcd 安全模型] 和 [生成自签名证书] 。
通过以下参数启用自动灾难恢复(定期快照 + 自动恢复):
textpersistence.enabled=true disasterRecovery.enabled=true disasterRecovery.pvc.size=2Gi disasterRecovery.pvc.storageClassName=nfs
若同时设置 startFromSnapshot.* 参数,快照将存储在 startFromSnapshot.existingClaim 指定的 PVC 中。
注意:灾难恢复功能需 RWX 访问模式的卷。
两种备份恢复方式:
方法 1:使用 etcd 工具备份数据
etcdctl 创建源集群快照。startFromSnapshot.existingClaim 和 startFromSnapshot.snapshotFilename 指定快照 PVC 和文件名,恢复数据。注意:新部署需使用与源集群相同的凭证。
方法 2:使用 Velero 备份持久卷
通过 [Velero] 备份 PV 并在新集群恢复,适用于:
步骤:
集群内暴露指标的方式:
yamlpodAnnotations: prometheus.io/scrape: "true" prometheus.io/path: "/metrics/cluster" prometheus.io/port: "9000"
集群外可通过 Kubernetes API Proxy 访问指标端点。
两种方式自定义配置:
extraEnvVars 设置额外环境变量,或通过 extraEnvVarsCM/extraEnvVarsSecret 引用 ConfigMap/Secret:yamlextraEnvVars: - name: ETCD_AUTO_COMPACTION_RETENTION value: "0" - name: ETCD_HEARTBEAT_INTERVAL value: "150"
etcd.conf.yml:通过 configuration 参数定义配置,或使用 existingConfigmap 引用现有 ConfigMap。Etcd 保留键空间完整历史,需定期压缩以避免性能下降和存储耗尽。压缩会删除指定修订版前的键信息,释放存储空间。
autoCompactionMode:默认 periodic,可选 periodic(基于时间,如“5m”)或 revision(基于修订版号)。autoCompactionRetention:默认 0(禁用),压缩保留时间(如“10m”)。启用命令:
consoleautoCompactionMode=periodic autoCompactionRetention=10m
通过 sidecars 添加边车容器(如监控 exporter):
yamlsidecars: - name: 镜像名称 image: docker.xuanyuan.run/镜像地址 imagePullPolicy: Always ports: - name: 端口名 containerPort: 1234
通过 initContainers 添加初始化容器:
yamlinitContainers: - name: 镜像名称 image: docker.xuanyuan.run/镜像地址 imagePullPolicy: Always ports: - name: 端口名 containerPort: 1234
通过 extraDeploy 参数部署额外 Kubernetes 对象(如 ConfigMap),直接定义完整对象规格。
通过 affinity 参数自定义亲和性,或使用 bitnami/common Chart 提供的预设(podAffinityPreset、podAntiAffinityPreset、nodeAffinityPreset)。更多信息见 [Kubernetes 亲和性文档] 。
Bitnami Etcd 镜像将数据存储在容器的 /bitnami/etcd 路径,通过 Persistent Volume Claim(PVC)实现持久化。
注意:本文档因 DockerHub 长度限制已精简,完整内容见 [GitHub] 。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 bitnamicharts/etcd 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: