4. etcdctl 命令行工具:安装、配置与核心操作

etcdctl 是 etcd 的官方命令行客户端,是压测沙盘中执行数据写入、读取、监听和集群状态检查的核心工具。本章覆盖 etcdctl 的安装方式、版本对齐策略、常用命令语义以及安全连接验证,确保你在后续压测脚本中能准确调用。

4.1 安装与版本兼容性

etcdctl 与 etcd 服务端采用相同的版本号体系,但客户端二进制可独立下载。版本不匹配会导致协议握手失败或 API 字段解析异常,因此在沙盘构建中必须遵循“大版本一致、小版本 ≥ 服务端”的原则。

安装方式 适用场景 版本获取命令
从 etcd 发布包解压 单节点或集群快速部署 etcdctl version
go install 编译安装 开发环境、自定义分支 go install go.etcd.io/etcd/v3/etcdctl@latest
容器镜像内自带 Kubernetes 或 Docker 沙盘 docker exec <container> etcdctl version
版本兼容性红线:etcdctl v3.4.x 不能连接 etcd v3.5+ 集群(gRPC API 版本不匹配)。压测沙盘建议统一使用 etcd v3.5.x 系列,etcdctl 版本 ≥ 3.5.0。

4.2 常用命令:put / get / del / watch

etcdctl 的 v3 API 使用 etcdctl put、get、del、watch 四个原子操作构建所有数据流。下面以压测沙盘中最典型的键值操作为例,列出命令格式与关键参数。

命令 语法 压测常用参数
put etcdctl put <key> <value> --lease 绑定租约,--ignore-value 仅更新 key
get etcdctl get <key> --prefix 前缀扫描,--limit 限制返回条数
del etcdctl del <key> --prefix 批量删除,--from-key 范围删除
watch etcdctl watch <key> --prefix 监听前缀,--rev 从指定版本开始
压测提示:使用 --prefix 进行范围操作时,etcd 内部会触发线性化读或串行化读。压测脚本中建议先通过 get --prefix 预热缓存,再执行 put 写入,避免读压力与写压力叠加导致延迟抖动。

4.3 TLS 连接测试

生产级压测沙盘必须启用 TLS 加密。etcdctl 通过 --cacert、--cert、--key 三个参数建立双向认证通道。测试 TLS 连接是否正常,推荐使用 etcdctl endpoint health 和 etcdctl member list 两条命令。

# 带 TLS 的健康检查
etcdctl --endpoints=https://192.168.1.10:2379 \
  --cacert=/etc/etcd/ca.pem \
  --cert=/etc/etcd/client.pem \
  --key=/etc/etcd/client-key.pem \
  endpoint health

# 输出示例
# https://192.168.1.10:2379 is healthy: successfully committed proposal: took = 2.345ms
排障要点:如果 TLS 连接失败,先检查证书 CN 是否匹配 endpoints 中的主机名或 IP。etcdctl 默认不跳过证书验证,--insecure-skip-tls-verify 仅用于临时调试,压测沙盘不应使用。
etcdctl TLS 连接测试流程 etcdctl 客户端 --cert / --key / --cacert TLS 握手 etcd 服务端 端口 2379 证书验证 endpoint health 成功 / 失败 TLS 连接测试关键检查点 1. 证书链:ca.pem 必须包含签发 client 证书的根 CA 2. 主机名匹配:证书 CN/SAN 与 --endpoints 中的域名或 IP 一致 3. 密钥权限:client-key.pem 文件权限建议设为 600 4. 协议版本:etcd v3.5 要求 TLS 1.2 或 1.3

4.4 配置持久化与端点管理

为避免每次命令重复输入 endpoints 和证书路径,etcdctl 支持环境变量和配置文件两种持久化方式。压测沙盘中推荐使用环境变量,便于脚本动态切换集群地址。

配置方式 示例 优先级
环境变量 ETCDCTL_ENDPOINTS=https://10.0.0.1:2379 高(覆盖配置文件)
命令行参数 --endpoints=https://10.0.0.1:2379 最高(覆盖环境变量)
配置文件 ~/.etcdrc 或 /etc/etcd/etcdctl.conf 低(默认值)
# 压测沙盘推荐的环境变量配置模板
export ETCDCTL_ENDPOINTS="https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379"
export ETCDCTL_CACERT="/etc/etcd/ca.pem"
export ETCDCTL_CERT="/etc/etcd/client.pem"
export ETCDCTL_KEY="/etc/etcd/client-key.pem"
export ETCDCTL_DIAL_TIMEOUT="5s"
export ETCDCTL_COMMAND_TIMEOUT="10s"

# 配置后可直接执行
etcdctl put /sandbox/key1 "value1"
etcdctl get /sandbox/key1
沙盘最佳实践:将上述环境变量写入 /etc/profile.d/etcdctl.sh,确保每次登录 shell 自动加载。压测脚本中通过 source /etc/profile.d/etcdctl.sh 继承配置,避免硬编码证书路径。

4.5 本章小结

  • 版本对齐:etcdctl 与服务端大版本必须一致,推荐统一使用 v3.5.x。
  • 核心命令:put/get/del/watch 构成压测数据平面的全部操作,--prefix 和 --limit 是范围操作的关键参数。
  • TLS 验证:使用 endpoint health 作为连接测试的黄金命令,证书链和主机名匹配是排障重点。
  • 配置持久化:环境变量方式最适合沙盘动态切换,命令行参数用于临时覆盖。