etcd 命令

目录

  • 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

转载于:https://www.cnblogs.com/mldblue/articles/10984657.html

你可能感兴趣的:(etcd 命令)