前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >etcd 命令

etcd 命令

作者头像
小石头
发布2022-11-10 21:35:38
发布2022-11-10 21:35:38
55500
代码可运行
举报
文章被收录于专栏:小石头小石头
运行总次数:0
代码可运行

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
代码语言:javascript
代码运行次数:0
复制
[root@node2 ~]# etcdctl set /testdir/testkey "helloworld"
helloworld
2. get
代码语言:javascript
代码运行次数:0
复制
[root@node2 ~]# etcdctl get /testdir/testkey
helloworld
[root@node2 ~]# 

支持--sort,对返回结果进行排序
3. update
代码语言:javascript
代码运行次数:0
复制
[root@node2 ~]# etcdctl update /testdir/testkey hello
hello
[root@node2 ~]# etcdctl get /testdir/testkey
hello
[root@node2 ~]# 
4. mk
代码语言:javascript
代码运行次数:0
复制
如果给定的键不存在,则创建,否则报错

[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
代码语言:javascript
代码运行次数:0
复制
删除某个键,键不存在就报错
[root@node2 ~]# etcdctl rm /testdir/testkey2
PrevNode.Value: hello

--dir 如果键是空目录或者是键值对则删除
--recursive  删除目录和所有子键
6. watch
代码语言:javascript
代码运行次数:0
复制
监控一个键值的变化,发现键值更新后就回退出

--forever 一直监测,知道用户按CTRL+C退出
7. exec-watch
代码语言:javascript
代码运行次数:0
复制
监测一个键值的变化,一旦键值发生更新,执行指定的命令
[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
代码语言:javascript
代码运行次数:0
复制
如果给定的目录不存在则创建,存在会报错

[root@node2 ~]# etcdctl mkdir /test/testc --ttl 10 
--ttl 超时时间单位s,10s后目录会被删除
9. rmdir
代码语言:javascript
代码运行次数:0
复制
删除一个空目录,或键值对。若目录不为空,会报错。

[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
代码语言:javascript
代码运行次数:0
复制
创建一个空目录,如果目录已经存在会报错

[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
代码语言:javascript
代码运行次数:0
复制
用于更新已经存在的目录属性(目前只有存活时间)
[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
代码语言:javascript
代码运行次数:0
复制
   --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
代码语言:javascript
代码运行次数:0
复制
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
代码语言:javascript
代码运行次数:0
复制
对用户进行管理,
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
代码语言:javascript
代码运行次数:0
复制
是否启用访问验证。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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • etcdctl命令全局选项参数
  • etcd命令预览
  • 数据类操作
    • 1. set
    • 2. get
    • 3. update
    • 4. mk
    • 5. rm
    • 6. watch
    • 7. exec-watch
    • 8. mkdir
    • 9. rmdir
    • 11. setdir
    • 12. updatedir
  • 非数据类操作
    • 1. backup
    • 2. cluster-health
    • 3. member
    • 4. role
    • 5. user
    • 6. auth
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档