Lazy loaded image
etcd 键值存储与 etcdctl
Words 1323Read Time 4 min
2025-10-1
2025-11-10
date
related_level
slug
etcd_kvstore
type
Post
relate_date
summary
配置 etcd 服务集群和 etcd 网关, etcd 客户端使用
status
Published
tags
数据科学
数据存储
实用教程
最新推荐
category
数据科学
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
linux 下载并安装 etcd 二进制文件
安装脚本
vim install.etcd.sh
vim 0.utils.sh
部署 system unit 服务文件
  • vim /etc/systemd/system/etcd.service
  • systemctl daemon-reload
配置并启用 etcd 集群
vim /etc/etcd/etcd.config.yml
  • 自行修改 tls 和 Clustering 中的对应数据
  • client-cert-auth: true 时客户端需要有对应 CA 签名的 client.crt, client.key 才能通信
  • systemctl enable --now etcd
TLS 相关
客户端证书必须包含 clientAuth
  • golang 的 crypto/tls 包在使用证书公钥之前会检查其密钥用法。要使用证书公钥进行客户端身份验证,我们需要在创建证书公钥时将 clientAuth 添加到 Extended Key Usage 中
测试证书
  • curl --cacert $ETCDCTL_CACERT https://127.0.0.1:2379/version
    • 不验证客户端证书
  • curl --cacert $ETCDCTL_CACERT --cert $ETCDCTL_CERT --key $ETCDCTL_KEY \ https://127.0.0.1:2379/version
    • 不验证客户端证书
  • openssl s_client -connect 127.0.0.1:2379 -cert $ETCDCTL_CERT -key $ETCDCTL_KEY -CAfile $ETCDCTL_CACERT -tls1_2
etcd 网关在 etcd.example.com 提供负载均衡
  • etcd gateway start --trusted-ca-file $ETCDCTL_CACERT --listen-addr 0.0.0.0:2379 --endpoints=etcd-s1.example.com:2379,etcd-s2.example.com:2379,etcd-s3.example.com:2379
    • CA 文件仅作客户端验证
    • 端点不添加 https 协议, 因为不作 TLS 终止
etcd 命令行客户端 etcdctl
设置 etcd 集群环境变量
  • 可以设置在 ~/.bashrc, ~/.zshrc 等文件中加载
  • API 版本 ETCDCTL_API, 3.4 之前的版本需要设置
    • export ETCDCTL_API=3
  • 指定集群 ETCDCTL_ENDPOINTS
    • export ETCDCTL_ENDPOINTS="https://etcd-s1.example.com:2379,https://etcd-s2.example.com:2379,https://etcd-s3.example.com:2379"
      • etcd 集群的访问地址,自行修改
  • TLS 认证 ETCDCTL_CACERT, ETCDCTL_CERT, ETCDCTL_KEY
    • export ETCDCTL_CACERT="/path/to/ca.crt" export ETCDCTL_CERT="/path/to/client.crt" export ETCDCTL_KEY="/path/to/client.key"
    • 需要注意 CA 证书是否正常可读
etcdctl 常用指令
增删改查
  • put [options] <key> <value>
    • etcdctl put foo /"Hello World!/"
    • etcdctl put web1 value1
    • etcdctl put web2 value2
    • 可用选项
      • lease 附加到密钥的租约 ID(十六进制)
      • prev-kv 返回修改之前的前一个键值对
      • ignore-value 使用当前值更新键
      • ignore-lease 使用当前租约更新密钥
  • GET [options] <key> [range_end]
    • etcdctl --write-out="json" get foo
    • etcdctl get --from-key foo1
    • etcdctl get --from-key ''
      • 获取所有
  • DEL [options] <key> [range_end]
    • etcdctl del foo
    • etcdctl del --prev-kv key
    • etcdctl del --from-key a
    • etcdctl del --prefix zoo
终端管理
  • etcdctl -w table endpoint status
    • -w json 以 json 格式输出
  • etcdctl endpoint health
集群成员管理
  • etcdctl member list
  • etcdctl member add <memberName> [options]
  • etcdctl member update <memberID> [options]
  • etcdctl member remove <memberID>
基于角色的认证管理
  • etcdctl auth status
  • etcdctl user list
  • etcdctl role list
  • etcdctl role add root
  • etcdctl user add root
  • etcdctl user passwd root
  • etcdctl user grant-role root root
  • etcdctl user get root
etcd GUI 客户端 etcd-workbench
上一篇
警报管理器 Alertmanager 和命令行工具 amtool
下一篇
Kubernetes 部署 CI/CD 工具 Jenkins

Comments
Loading...