ETCD:etcdctl

笑着哭i 提交于 2019-12-05 16:51:22

原文地址:etcdctl
etcdctletcd的命令行客户端。
默认情况下,master分支上使用v3 API。 对于v2 API,请确保设置环境变量ETCDCTL_API = 2。 另请参见READMEv2
如果使用的是v3.4之前的发行版,请将ETCDCTL_API = 3设置为使用v3 API。
全局参数(例如dial-timeout,cacert,--cert,--key)可以通过环境变量设置。

ETCDCTL_DIAL_TIMEOUT=3s
ETCDCTL_CACERT=/tmp/ca.pem
ETCDCTL_CERT=/tmp/cert.pem
ETCDCTL_KEY=/tmp/key.pem

使用ETCDCTL_前缀标志的字符串,将所有字母都转换为大写字母,并用下划线(_)替换破折号(-)。 请注意,前缀为ETCDCTL_的环境变量只能与etcdctl全局标志一起使用。 同样,环境变量ETCDCTL_API是仅在etcdctl内部使用的特殊情况变量。

键值对命令


PUT [选项]

PUT用指定的键分配指定的值。 如果键已经包含一个值,则将其覆盖。
RPC:Put
选项

  • lease --附加到密钥的租约ID(以十六进制表示)。
  • prev-kv --返回修改前的前一个键值对。
  • ignore-value --使用其当前值更新Key。
  • ignore-lease --使用其当前租约更新Key。

输出
OK

示例:

./etcdctl put foo bar --lease=1234abcd
# OK
./etcdctl get foo
# foo
# bar
./etcdctl put foo --ignore-value # 解开依附的租约
# OK
./etcdctl put foo bar --lease=1234abcd
# OK
./etcdctl put foo bar1 --ignore-lease # 使用存在的租约1234abcd
# OK
./etcdctl get foo
# foo
# bar1
./etcdctl put foo bar1 --prev-kv
# OK
# foo
# bar
./etcdctl get foo
# foo
# bar1

备注
如果未将作为命令行参数给出,则此命令尝试从标准输入中读取值。
以'-'开头时,被解释为一个标志。 插入“-”以解决:

./etcdctl put <key> -- <value>
./etcdctl put -- <key> <value>

不支持在使用回车符后在新行中提供,在这种情况下etcdctl可能会挂起。 例如,不支持以下情况:

./etcdctl put <key>\r
<value>

可以具有多行或空格,但是必须为其提供双引号,如下所示:

./etcdctl put foo "bar1 2 3"

GET [选项]

如果指定了range_end,则GET会获取键或键范围[key,range_end)。
RPC:Range
选项

  • hex --以十六进制编码的字符串形式输出键和值
  • limit --最大结果数
  • prefix --通过匹配前缀获取Key
  • order --结果排序; 升序或降序
  • sort-by --排序目标; 创建,键,修改,值或版本
  • rev --指定kv版本
  • print-value-only --与write-out = simple一起使用时仅打印值
  • consistency --Linearizable(l)或Serializable(s)
  • from-key --使用字节比较获取大于或等于给定Key的Key
  • keys-only --仅获取Key

输出
\n\n\n...
示例
首先,用一些键填充etcd:

./etcdctl put foo bar
# OK
./etcdctl put foo1 bar1
# OK
./etcdctl put foo2 bar2
# OK
./etcdctl put foo3 bar3
# OK

获取名为foo的Key:

./etcdctl get foo
# foo
# bar

获取所有的Key:

./etcdctl get --from-key ''
# foo
# bar
# foo1
# bar1
# foo2
# foo2
# foo3
# bar3

获取名称大于或等于foo1的所有键:

./etcdctl get --from-key foo1
# foo1
# bar1
# foo2
# bar2
# foo3
# bar3

获取名称大于或等于foo1且小于foo3的键:

./etcdctl get foo1 foo3
# foo1
# bar1
# foo2
# bar2

备注
如果任何键或值包含不可打印的字符或控制字符,则由于换行而导致简单格式化的输出可能不明确。 要解决此问题,请将--hex设置为对所有字符串进行十六进制编码。

DEL [选项]

如果指定了range_end,则删除指定的键或键范围[key,range_end)。
RPC:DeleteRange
选项

  • prefix --通过匹配前缀删除Key
  • prev-kv --返回已删除的键值对
  • from-key --删除大于或等于给定Key字节的Key

输出
如果DEL成功,则打印以十进制删除的键的数目。
示例

./etcdctl put foo bar
# OK
./etcdctl del foo
# 1
./etcdctl get foo
./etcdctl put key val
# OK
./etcdctl del --prev-kv key
# 1
# key
# val
./etcdctl get key
./etcdctl put a 123
# OK
./etcdctl put b 456
# OK
./etcdctl put z 789
# OK
./etcdctl del --from-key a
# 3
./etcdctl get --from-key a
./etcdctl put zoo val
# OK
./etcdctl put zoo1 val1
# OK
./etcdctl put zoo2 val2
# OK
./etcdctl del --prefix zoo
# 3
./etcdctl get zoo2

TXN [选项]

TXN从标准输入读取多个etcd请求,并将它们作为单个原子事务应用。 交易由条件清单组成,如果所有条件都为真,则应用请求列表;如果任何条件为假,则不应用请求列表。
RPC:Txn
选项

  • hex --将键和值打印为十六进制编码的字符串。
  • interactive --通过交互提示输入交易。
    输入格式
<Txn> ::= <CMP>* "\n" <THEN> "\n" <ELSE> "\n"
<CMP> ::= (<CMPCREATE>|<CMPMOD>|<CMPVAL>|<CMPVER>|<CMPLEASE>) "\n"
<CMPOP> ::= "<" | "=" | ">"
<CMPCREATE> := ("c"|"create")"("<KEY>")" <CMPOP> <REVISION>
<CMPMOD> ::= ("m"|"mod")"("<KEY>")" <CMPOP> <REVISION>
<CMPVAL> ::= ("val"|"value")"("<KEY>")" <CMPOP> <VALUE>
<CMPVER> ::= ("ver"|"version")"("<KEY>")" <CMPOP> <VERSION>
<CMPLEASE> ::= "lease("<KEY>")" <CMPOP> <LEASE>
<THEN> ::= <OP>*
<ELSE> ::= <OP>*
<OP> ::= ((see put, get, del etcdctl command syntax)) "\n"
<KEY> ::= (%q formatted string)
<VALUE> ::= (%q formatted string)
<REVISION> ::= "\""[0-9]+"\""
<VERSION> ::= "\""[0-9]+"\""
<LEASE> ::= "\""[0-9]+\""

输出
如果etcd处理了事务成功列表,则SUCCESS;如果etcd处理了事务失败列表,则FAILURE。 打印已执行的请求列表中每个命令的输出,每个命令之间用空白行分隔。
示例
交互模式下的txn:

./etcdctl txn -i
# compares:
mod("key1") > "0"

# success requests (get, put, delete):
put key1 "overwrote-key1"

# failure requests (get, put, delete):
put key1 "created-key1"
put key2 "some extra key"

# FAILURE

# OK

# OK

非交互模式下的txn:

./etcdctl txn <<<'mod("key1") > "0"

put key1 "overwrote-key1"

put key1 "created-key1"
put key2 "some extra key"

'

# FAILURE

# OK

# OK

备注
在TXN命令中使用多行值时,换行符必须表示为\n。如果使用文字换行符将导致解析失败。这与其他命令(例如PUT)不同,在其他命令中,shell将为我们转换文字换行符。 例如:

./etcdctl txn <<<'mod("key1") > "0"

put key1 "overwrote-key1"

put key1 "created-key1"
put key2 "this is\na multi-line\nvalue"

'

# FAILURE

# OK

# OK

COMPACTION [选项]

COMPACTION丢弃给定修订版之前的所有etcd事件历史记录。 由于etcd使用多版本并发控制模型,因此它将所有关键更新保留为事件历史记录。 当不再需要修订的事件历史记录时,可以将所有被替换的键压缩以回收etcd后端数据库中的存储空间。
RPC: Compact
选项

  • physical --值为true则等待压缩到物理设备并删除所有旧修订
    输出
    打印压缩的修订版本
    示例
./etcdctl compaction 1234
# compacted revision 1234

WATCH [选项] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...]

选项
输入格式
输出
示例
备注

LEASE

LEASE GRANT

输出
示例

LEASE REVOKE

输出
示例

LEASE TIMETOLIVE [选项]

选项
输出
示例

LEASE LIST

输出
示例

LEASE KEEP-ALIVE

输出
示例

集群维护命令


MEMBER

MEMBER ADD [选项]

选项
输出
示例

MEMBER UPDATE [选项]

选项
输出
示例

MEMBER REMOVE

输出
示例

MEMBER LIST

输出
示例

ENDPOINT

选项

ENDPOINT HEALTH

输出
示例

ENDPOINT STATUS

输出
示例

ENDPOINT HASHKV

输出
示例

ALARM

ALARM DISARM

输出
示例

ALARM LIST

输出
示例

DEFRAG [选项]

选项
输出
示例
备注

SNAPSHOT

SNAPSHOT SAVE

输出
示例

SNAPSHOT RESTORE [选项]

选项
输出
示例

SNAPSHOT STATUS

输出
示例

MOVE-LEADER

示例

并发命令


LOCK [选项] [命令 参数1 参数2 ...]

选项
输出
示例
备注

ELECT [选项] [proposal]

选项
输出
示例
备注

权限命令


AUTH

输出
示例

ROLE

ROLE ADD

输出
示例

ROLE GET

输出
示例

ROLE DELETE

输出
示例

ROLE LIST

输出
示例

ROLE GRANT-PERMISSION [选项] [endkey]

选项
输出
示例

ROLE REVOKE-PERMISSION [endkey]

选项
输出
示例

USER

USER ADD [选项]

选项
输出
示例

USER GET [选项]

选项
输出
示例

USER DELETE

选项
输出
示例

USER LIST

输出
示例

USER PASSWD [选项]

选项
输出
示例

USER GRANT-ROLE

选项
输出
示例

USER REVOKE-ROLE

输出
示例

效用命令


MAKE-MIRROR [选项]

选项
输出
示例

MIGRATE [选项]

选项
输出
示例

VERSION

输出
示例

CHECK

CHECK PERF [选项]

选项
输出
示例

CHECK DATASCALE [选项]

选项
输出
示例

退出码


输出格式


Simple

JSON

Protobuf

Fields

兼容性支持


输入兼容性

输出兼容性

TODO:etcd服务器兼容性

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!