目录
- etcdctl命令全局选项参数
- etcd命令预览
- 数据类操作
- 非数据类操作
etcdctl命令全局选项参数
参数 | 说明 |
---|---|
--debug | 输出调试信息,显示执行命令的时候发起的请求 |
--no-sync | 发出请求钱不主动同步集群信息 |
--output, -o 'simple' | 输出响应消息的格式,可以为simple,json或extended |
--discovery-srv, -D | 通过域名查询,来探测集群成员信息 |
--peers, -C | 集群中成员地址列表,用逗号隔开 |
--endpoint | 集群中成员地址列表 |
--cert-file | 如果集群需要https认证,提供TLS的证书文件路径 |
--key-file HTTPS | 认证的证书文件路径 |
--ca-file | 域名相关的根证书文件路径 |
--username, -u username[:password] | 用户名和密码验证信息 |
--timeout '1s' | 请求的连接超时,默认为1s |
--total-timeout '5s' | 命令执行总超时,默认为5s |
--version, -v | 打印版本信息 |
etcd命令预览
etcd支持的命令大体上可以分为两类,数据类操作、非数据类操作
数据类操作
命令 | 说明 |
---|---|
set | 设置键对应的值 |
get | 获取键对应的值 |
update | 更新键对应的值 |
mk | 创建新的值 |
rm | 删除键值或目录 |
watch | 监控某键值的变化 |
exec-watch | 监控到某键值变化时,执行的命令 |
ls | 列出目录下的内容 |
mkdir | 创建新的目录 |
rmdir | 删除空目录或者一个键值 |
setdir | 创建目录(允许目录已经存在) |
updatedir | 更新已经存在的目录 |
非数据类操作
命令 | 说明 |
---|---|
backup | 备份指定的目录 |
cluster-health | 检查etcd集群健康情况 |
member | 添加、删除或列出成员,需要带具体的子命令 |
import | 导入快照 |
user | 用户添加、权限管理,需要带具体子命令 |
role | 角色添加、权限管理,需要带具体子命令 |
auth | 全局认证管理 |
数据类操作
1. set
[root@node2 ~]# etcdctl set /testdir/testkey "helloworld"
helloworld
2. get
[root@node2 ~]# etcdctl get /testdir/testkey
helloworld
[root@node2 ~]#
支持--sort,对返回结果进行排序
3. update
[root@node2 ~]# etcdctl update /testdir/testkey hello
hello
[root@node2 ~]# etcdctl get /testdir/testkey
hello
[root@node2 ~]#
4. mk
如果给定的键不存在,则创建,否则报错
[root@node2 ~]# etcdctl mk /testdir/testkey2 hello
hello
[root@node2 ~]#
[root@node2 ~]# etcdctl mk /testdir/testkey hello
Error: 105: Key already exists (/testdir/testkey) [16]
【set与mk区别】 当键存在是set会修改键的值,mk则会报错
5. rm
删除某个键,键不存在就报错
[root@node2 ~]# etcdctl rm /testdir/testkey2
PrevNode.Value: hello
--dir 如果键是空目录或者是键值对则删除
--recursive 删除目录和所有子键
6. watch
监控一个键值的变化,发现键值更新后就回退出
--forever 一直监测,知道用户按CTRL+C退出
7. exec-watch
监测一个键值的变化,一旦键值发生更新,执行指定的命令
[root@node2 ~]# etcdctl exec-watch /testdir/testkey -- sh -c 'ls /'
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
该命令会一直执行下去,不会像watch一样,监测到一次更新后就退出
8. mkdir
如果给定的目录不存在则创建,存在会报错
[root@node2 ~]# etcdctl mkdir /test/testc --ttl 10
--ttl 超时时间单位s,10s后目录会被删除
9. rmdir
删除一个空目录,或键值对。若目录不为空,会报错。
[root@node2 ~]# etcdctl mkdir /testa
[root@node2 ~]# etcdctl rmdir /testa/
[root@node2 ~]#
[root@node2 ~]# etcdctl ls /testdir/
/testdir/testkey
/testdir/testkey2
[root@node2 ~]# etcdctl rmdir /testdir/
Error: 108: Directory not empty (/testdir) [28]
[root@node2 ~]#
11. setdir
创建一个空目录,如果目录已经存在会报错
[root@node2 ~]# etcdctl setdir /etc/testb
[root@node2 ~]# etcdctl ls /etc/testb
[root@node2 ~]# etcdctl setdir /etc/testb
Error: 102: Not a file (/etc/testb) [34]
[root@node2 ~]#
12. updatedir
用于更新已经存在的目录属性(目前只有存活时间)
[root@node2 ~]# etcdctl mkdir /test/testc --ttl 10
[root@node2 ~]# etcdctl mkdir /test/testc --ttl 30
[root@node2 ~]# etcdctl updatedir /test/testc --ttl 300
[root@node2 ~]#
非数据类操作
1. backup
--data-dir value 数据目录路径
--wal-dir value Path to the etcd wal dir
--backup-dir value 备份数据到指定目录
--backup-wal-dir value Path to the backup wal dir
--with-v3 Backup v3 backend data
[root@node2 ~]# cat /etc/etcd/etcd.conf |grep data-dir
data-dir: "/opt/etcd_data"
[root@node2 ~]# ls /opt/etcd_data
member
[root@node2 ~]# etcdctl backup --data-dir /opt/etcd_data --backup-dir /tmp/
2019-06-05 22:37:20.757947 I | ignoring EntryConfChange raft entry
2019-06-05 22:37:20.758148 I | ignoring EntryConfChange raft entry
2019-06-05 22:37:20.758170 I | ignoring EntryConfChange raft entry
2019-06-05 22:37:20.758314 I | ignoring member attribute update on /0/members/cf5538a4dab95927/attributes
2019-06-05 22:37:20.758356 I | ignoring member attribute update on /0/members/a3d1fb0d28ed2953/attributes
2019-06-05 22:37:20.758387 I | ignoring member attribute update on /0/members/8816eaa680e63c73/attributes
2019-06-05 22:37:20.758455 I | ignoring v3 raft entry
2019-06-05 22:37:20.758484 I | ignoring member attribute update on /0/members/cf5538a4dab95927/attributes
2019-06-05 22:37:20.758509 I | ignoring member attribute update on /0/members/a3d1fb0d28ed2953/attributes
2019-06-05 22:37:20.758534 I | ignoring member attribute update on /0/members/8816eaa680e63c73/attributes
2019-06-05 22:37:20.758575 I | ignoring member attribute update on /0/members/8816eaa680e63c73/attributes
2019-06-05 22:37:20.758608 I | ignoring member attribute update on /0/members/a3d1fb0d28ed2953/attributes
2019-06-05 22:37:20.758633 I | ignoring member attribute update on /0/members/cf5538a4dab95927/attributes
2019-06-05 22:37:20.758720 I | ignoring v3 raft entry
2019-06-05 22:37:20.758870 I | ignoring member attribute update on /0/members/cf5538a4dab95927/attributes
2019-06-05 22:37:20.758891 I | ignoring member attribute update on /0/members/a3d1fb0d28ed2953/attributes
2019-06-05 22:37:20.758902 I | ignoring member attribute update on /0/members/8816eaa680e63c73/attributes
[root@node2 ~]# ls /tmp/member/
snap wal
[root@node2 ~]#
snap 快照目录,保存节点状态快照文件
wal 保存了数据库预写日志信息
【预写日志】预写日志要求数据库在发生实际提交前必须先将操作写入日志,可以保障系统在崩溃后根据日志状态恢复状态。
2. cluster-health
3. member
4. role
add 添加一个角色
get 查询角色细节
list 列出所有用户角色
remove 删除用户角色
grant 添加路径到角色控制 ,r:w:rw
revoke 删除某路径的用户角色信息
默认带有root,guest两种角色,前者为最高权限用户,后者为不带验证情况下的用户
添加一个角色
[root@node2 ~]# etcdctl role add read_testdir
Role read_testdir created
[root@node2 ~]#
设置该角色具有对/testdir/目录有读权限
[root@node2 ~]# etcdctl role grant read_testdir -path '/testdir/*' -read
Role read_testdir updated
[root@node2 ~]#
5. user
对用户进行管理,
add 添加一个用户
get 查询用户细节
list 列出所有用户
remove 删除用户
grant 添加用户到j角色
revoke 删除用户角色
passwd 修改用户的密码
默认情况下,需要先创建(启用)root用户作为etcd集群的最高权限管理员
[root@node2 ~]# etcdctl user add root
New password:
User root created
[root@node2 ~]# etcdctl user add test1
New password:
User test1 created
[root@node2 ~]#
分配已有角色给用户
[root@node2 ~]# etcdctl user grant test1 -roles read_testdir
User test1 updated
[root@node2 ~]#
查看用户细节
[root@node2 ~]# etcdctl user get test1
User: test1
Roles: read_testdir
-
[root@node2 ~]# etcdctl user get test1 #用户具有多种角色
User: test1
Roles: read_testdir root
删除用户角色
[root@node2 ~]# etcdctl user revoke test1 -roles read_testdir
User test1 updated
[root@node2 ~]#
6. auth
是否启用访问验证。enable为启用,disable为禁用。
[root@node2 ~]# etcdctl user list
Insufficient credentials
[root@node2 ~]# etcdctl --username root:123 user list 使用--username 用户名:密码访问
root
test1
[root@node2 ~]#
参考
《Docker技术入门与实战》 第二版
https://blog.csdn.net/fnatic_/article/details/84307332