Home ETCD基础
Post
Cancel

ETCD基础

etcd 概念

etcd 命令

设置key

1
2
3
4
5
6
# 设置 koo:voo
etcdctl put koo voo

# 设置带有租约的 koo:voo
# lease租约需要单独设置,设置过期时间
etcdctl put koo voo --lease xxxxxxxx

读取key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 读取key
# 响应示例:
# koo
# voo
etcdctl get koo

# 读取key, 展示16进制
# 响应示例:
# \x6b\x6f\x6f
# \x76\x6f\x6f
etcdctl get koo --hex

# 读取key
# 响应示例:
# voo
etcdctl get koo --print-value-only

# 读取范围的key: [koo, zoo)
etcdctl get koo zoo

# 读取所有前缀的key: ko
etcdctl get --prefix ko

# 读取有限制数据的前缀key: ko
etcdctl get --prefix --limit=2 ko

# 读取key的更多详细信息:
# 响应示例:
# {"header":{"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":36,"raft_term":2},"kvs":[{"key":"a29v","create_revision":36,"mod_revision":36,"version":1,"value":"dm9v"}],"count":1}
etcdctl get koo -w=json

# 读取>=某个key的所有key:
etcdctl get --from-key koo

revision

etcd 全局会有revision版本管理,任何的创建、更新、删除操作,版本会自动更新。在上面读取key更多信息的命令中,可以查看到当前的revision. 若想读取key的历史版本时,可通过--rev=${版本}来查看。

1
2
3
4
5
6
# 读取历史版本的内容:
etcdctl get koo --rev=6
etcdctl get koo --rev=5

# 指定最小的revision, 小于该版本的会被删除
etcdctl compact 38

删除key

删除与读取key的命令类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
etcdctl del koo

# 删除[koo, voo)范围的key
etcdctl del koo zoo

# 删除key并展示出来删除的key/value
etcdctl del --prev-kv koo

# 删除所有前缀koo的key
etcdctl del --prefix koo

# 删除>=key的所有key
etcdctl del --from-key koo

监控key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 监控key的变更:
etcdctl watch koo

# 监控key的变更, 以16进制展示:
etcdctl watch koo --hex

# 监控范围的key,[koo,zoo)
etcdctl watch koo zoo

# 监控包含固定前缀的key
etcdctl watch --prefix koo

# 交互式
etcd watch -i
watch koo
progress # 查看当前的revision

租约lease

key无法单独设置过期时间,必须与lease绑定来实现key的过期功能。 一个lease可以绑定到多个key上,实现一组key的同时过期。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建一个60秒ttl的租约
# 响应示例:
# lease 32695410dcc0ca06 granted with TTL(60s)
etcdctl lease grant 60


# 回撤一个租约
etcdctl lease revoke 32695410dcc0ca06

# 保持租约存活
# 这是一个阻塞式命令,它会定期刷新租约的ttl, 到最初设置的ttl
etcdctl lease keep-alive 32695410dcc0ca06

# 查询租约的信息
# 响应示例:
# lease 694d5765fc71500b granted with TTL(500s), remaining(258s)
etcdctl lease timetolive 694d5765fc71500b

# 查看租约绑定的key
# 响应示例:
# lease 694d5765fc71500b granted with TTL(500s), remaining(132s), attached keys([zoo2 zoo1])
etcdctl lease timetolive --keys 694d5765fc71500b

用户与角色

在etcd中,有一个特殊的user: root、一个特殊的role: root。默认情况下etcd是关闭鉴权的,在开启之前必须创建好root用户。 开启权限之后,交互命令需要加上用户信息:--user ${username}:${password}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 创建root用户
etcdctl user add root
# 开启权限认证
etcdctl auth enable
# 关闭权限认证
etcdctl --user root:rootpw auth disable

# 查看用户列表
etcdctl user list

etcdctl user add myusername
# 授予、回收用户角色
etcdctl user grant-role myusername role1
etcdctl user revoke-role myusername role1

# 查看用户
etcdctl user get myusername

# 修改用户密码
etcdctl user passwd myusername

# 删除用户
etcdctl user delete myusername

# 查看角色列表
etcdctl role list

# 创建角色
etcdctl role add myrolename

# 授予角色权限,权限包含对一个或一个范围内的可以的读写权限
etcdctl role grant-permission myrolename read foo
etcdctl role grant-permission myrolename --prefix read foo
etcdctl role grant-permission myrolename write foo
etcdctl role grant-permission myrolename readwrite key1 key5

# 查看角色
etcdctl role get myrolename

# 回收角色拥有的key权限
etcdctl role revoke-permission myrolename foo


# 删除角色
etcdctl role delete myrolename

http api

etcd提供了基于gRPC协议的client库,来与etcd cluster通讯。 针对没有实现gRPC的语言,etcd提供了json gRPC gateway, gateway将client http json转成grpc消息,与etcd cluster通讯。

gateway 请求示例:http请求示例

所有api文档:api reference

This post is licensed under CC BY 4.0 by the author.