菜单

etcdctl 命令行工具

相关源文件

etcdctl 是 etcd 的命令行客户端工具,etcd 是一个分布式可靠的键值存储。此命令行接口提供了广泛的命令来与 etcd 集群进行交互,用于操作键值对、管理集群成员、处理身份验证、执行维护任务以及利用分布式并发原语。

有关程序化客户端 API 的信息,请参阅 客户端 API

概述

来源

命令执行流程

来源

配置

etcdctl 可以使用命令行标志和环境变量进行配置。环境变量的形式为 ETCDCTL_<FLAG_NAME>,其中连字符 (-) 被下划线 (_) 取代。

全局标志

标志环境变量默认描述
--endpointsETCDCTL_ENDPOINTS127.0.0.1:2379etcd 服务器端点的逗号分隔列表
--dial-timeoutETCDCTL_DIAL_TIMEOUT2秒客户端连接超时
--command-timeoutETCDCTL_COMMAND_TIMEOUT5秒短运行命令超时
--insecure-transportETCDCTL_INSECURE_TRANSPORTtrue禁用传输安全
--insecure-skip-tls-verifyETCDCTL_INSECURE_SKIP_TLS_VERIFYfalse跳过服务器证书验证
--cacertETCDCTL_CACERT使用此 CA 捆绑包验证证书
--certETCDCTL_CERT使用此 TLS 证书文件标识安全客户端
--keyETCDCTL_KEY使用此 TLS 密钥文件标识安全客户端
--userETCDCTL_USER用于身份验证的用户名[:密码]
--write-outETCDCTL_WRITE_OUTsimple输出格式 (fields, json, protobuf, simple, table)
--hexETCDCTL_HEXfalse将字节字符串打印为十六进制编码字符串

来源

键值操作

etcdctl 提供用于管理 etcd 中键值数据的命令。

PUT

将值分配给一个键。

etcdctl put [options] <key> <value>

选项

  • --lease: 要附加到键的 Lease ID
  • --prev-kv: 返回修改前的上一个键值对
  • --ignore-value: 使用其当前值更新键
  • --ignore-lease: 使用其当前 Lease 更新键

来源

GET

检索键或键范围的值。

etcdctl get [options] <key> [range_end]

选项

  • --hex: 将键和值打印为十六进制编码字符串
  • --limit: 最大结果数
  • --prefix: 获取具有匹配前缀的键
  • --from-key: 获取大于或等于给定键的键
  • --order: 结果顺序 (ASCEND 或 DESCEND)
  • --sort-by: 排序目标 (CREATE, KEY, MODIFY, VALUE, VERSION)
  • --rev: 指定 kv 版本
  • --consistency: 可线性化 (l) 或可序列化 (s)
  • --keys-only: 只获取键

来源

DEL

删除一个键或键范围。

etcdctl del [options] <key> [range_end]

选项

  • --prefix: 删除具有匹配前缀的键
  • --prev-kv: 返回已删除的键值对
  • --from-key: 删除大于或等于给定键的键

来源

TXN

将多个操作作为单个原子事务执行。

etcdctl txn [options]

选项

  • --interactive: 通过交互式提示输入事务

事务格式包括

  1. 比较条件 (If)
  2. 成功操作 (Then)
  3. 失败操作 (Else)

来源

WATCH

监视键或前缀的变化。

etcdctl watch [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...]

选项

  • --hex: 将键和值打印为十六进制编码字符串
  • --interactive: 开始一个交互式监视会话
  • --prefix: 监视前缀
  • --prev-kv: 获取事件前的上一个键值对
  • --rev: 开始监视的版本

来源

Lease 管理

Lease 是带有时间限制的键,可以附加到键上。

LEASE GRANT

创建具有指定生存时间的新 Lease。

etcdctl lease grant <ttl>

来源

LEASE REVOKE

销毁 Lease 并删除附加的键。

etcdctl lease revoke <leaseID>

来源

LEASE TIMETOLIVE

检索 Lease 信息。

etcdctl lease timetolive <leaseID> [options]

选项

  • --keys: 获取附加到此 Lease 的键

来源

LEASE LIST

列出所有活动的 Lease。

etcdctl lease list

来源

LEASE KEEP-ALIVE

刷新 Lease 以防止过期。

etcdctl lease keep-alive [options] <leaseID>

选项

  • --once: 将 KeepAlive 时间重置为其原始值并立即退出

来源

集群维护

用于管理 etcd 集群成员和状态的命令。

MEMBER

提供管理 etcd 集群成员的命令。

MEMBER ADD

将新成员添加到集群。

etcdctl member add <memberName> [options]

选项

  • --peer-urls: 与新成员关联的 URL 列表,用逗号分隔
  • --learner: 将成员添加为学习者(不参与投票)

来源

MEMBER REMOVE

将成员从集群中移除。

etcdctl member remove <memberID>

来源

MEMBER UPDATE

更新现有成员的 peer URL。

etcdctl member update <memberID> [options]

选项

  • --peer-urls: 要更新成员的 URL 列表,用逗号分隔

来源

MEMBER LIST

列出集群中的所有成员。

etcdctl member list [options]

选项

  • --consistency: 可线性化 (l) 或可序列化 (s)

来源

MEMBER PROMOTE

将学习者成员提升为投票成员。

etcdctl member promote <memberID>

来源

ENDPOINT

提供查询 endpoint 状态的命令。

ENDPOINT HEALTH

检查 endpoint 的健康状况。

etcdctl endpoint health [options]

选项

  • --cluster: 从集群成员列表中获取并使用所有 endpoint

来源

ENDPOINT STATUS

检索 endpoint 状态。

etcdctl endpoint status [options]

选项

  • --cluster: 从集群成员列表中获取并使用所有 endpoint

来源

ENDPOINT HASHKV

检索每个 endpoint 的 KV 存储的哈希值。

etcdctl endpoint hashkv [options]

选项

  • --cluster: 从集群成员列表中获取并使用所有 endpoint
  • --rev: 要哈希的最大修订版本

来源

SNAPSHOT

管理 etcd 快照的命令。

SNAPSHOT SAVE

拍摄 etcd 后端数据库的瞬时快照。

etcdctl snapshot save <filename>

来源

DEFRAG

对 etcd 成员的存储进行碎片整理。

etcdctl defrag [options]

选项

  • --cluster: 对集群中的所有成员进行碎片整理

来源

COMPACTION

丢弃所有早于指定修订版本的 etcd 事件历史。

etcdctl compaction [options] <revision>

选项

  • --physical: 等待碎片整理完成以物理删除旧版本

来源

ALARM

提供管理 etcd 告警的命令。

ALARM DISARM

解除所有告警。

etcdctl alarm disarm

来源

ALARM LIST

列出所有告警。

etcdctl alarm list

来源

MOVE-LEADER

将领导权从 Leader 转移到集群中的另一个成员。

etcdctl move-leader <target-member-id>

来源

DOWNGRADE

管理集群范围内的降级到之前的小版本。

etcdctl downgrade <validate|enable|cancel> [options]

来源

并发原语

etcdctl 提供分布式并发原语。

LOCK

获取一个给定名称的分布式互斥锁。

etcdctl lock [options] <lockname> [command arg1 arg2 ...]

选项

  • --ttl: 锁会话的秒数

锁的持有状态会一直保持,直到 etcdctl 终止或指定的命令完成。

来源

ELECT

参与领导者选举。

etcdctl elect [options] <election-name> [proposal]

选项

  • --listen: 观察选举,而不是参与

来源

认证和安全

管理 etcd 认证系统的命令。

AUTH

启用或禁用认证。

etcdctl auth <enable|disable|status>

来源

ROLE

管理 etcd 的 RBAC 系统中的角色。

ROLE ADD

创建新角色。

etcdctl role add <role-name>

来源

ROLE GET

列出详细的角色信息。

etcdctl role get <role-name>

来源

ROLE DELETE

删除角色。

etcdctl role delete <role-name>

来源

ROLE LIST

列出所有角色。

etcdctl role list

来源

ROLE GRANT-PERMISSION

授予角色键权限。

etcdctl role grant-permission [options] <role-name> <permission-type> <key> [end-key]

选项

  • --prefix: 授予前缀权限
  • --from-key: 授予大于或等于给定键的键的权限

来源

ROLE REVOKE-PERMISSION

撤销角色的键权限。

etcdctl role revoke-permission <role-name> <permission-type> <key> [end-key]

选项

  • --prefix: 撤销前缀权限
  • --from-key: 撤销大于或等于给定键的键的权限

来源

USER

管理 etcd 认证系统中的用户。

USER ADD

创建用户。

etcdctl user add <user-name or user:password> [options]

选项

  • --interactive: 从标准输入读取密码,而不是通过交互式终端

来源

USER GET

列出详细的用户信息。

etcdctl user get <user-name>

来源

USER DELETE

删除用户。

etcdctl user delete <user-name>

来源

USER LIST

列出所有用户。

etcdctl user list

来源

USER GRANT-ROLE

授予用户角色。

etcdctl user grant-role <user-name> <role-name>

来源

USER REVOKE-ROLE

撤销用户的角色。

etcdctl user revoke-role <user-name> <role-name>

来源

输出格式

etcdctl 支持多种输出格式,可以通过 `--write-out` 标志指定。

简单格式

默认输出格式,每对键值对一行。

JSON 格式

以 JSON 对象格式输出。

字段格式

显式标记每个字段的输出。

表格格式

以 ASCII 表格格式输出(针对某些命令)。

来源

性能和诊断工具

etcdctl 提供用于检查 etcd 集群性能和运行状况的工具。

CHECK PERF

检查 etcd 集群的性能。

etcdctl check perf [options]

选项

  • --load: 工作负载模型(s, m, l, xl)
  • --prefix: 性能检查的键前缀
  • --auto-compact: 测试后自动压缩存储
  • --auto-defrag: 测试后自动碎片整理存储

来源

CHECK DATASCALE

检查不同工作负载的内存使用情况。

etcdctl check datascale [options]

选项

  • --load: 工作负载模型(s, m, l, xl)
  • --prefix: 数据规模检查的键前缀
  • --auto-compact: 测试后自动压缩存储
  • --auto-defrag: 测试后自动碎片整理存储

来源

镜像工具

将一个 etcd 键值存储镜像到另一个 etcd 集群。

etcdctl make-mirror [options] <destination>

选项

  • --prefix: 要镜像的键前缀
  • --dest-prefix: 目标键前缀
  • --no-dest-prefix: 镜像到目标集群的根目录

来源

架构与实现

etcdctl 是一个使用 cobra 命令行库进行命令处理,并使用 etcd v3 客户端库 (clientv3) 与 etcd 服务器通信的 Go 程序。

来源

etcdctl 首先使用 cobra 库解析命令行参数,然后构建一个配置了指定选项的 clientv3.Client,通过客户端执行请求的操作,最后使用适当的打印程序格式化输出。

环境变量

除了命令行标志,etcdctl 还可以通过环境变量进行配置。大多数命令行标志都有对应的环境变量,前缀为 ETCDCTL_,连字符(-)转换为下划线(_)。

例如

  • --endpoints 对应 ETCDCTL_ENDPOINTS
  • --dial-timeout 对应 ETCDCTL_DIAL_TIMEOUT

来源