1

ETCD快速入门-03 常用命令 - Surpassme

 1 year ago
source link: https://www.cnblogs.com/surpassme/p/16578301.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

3. ETCD 常用命令

    etcdctl是一个命令行的客户端,它提供了一些命令,可以方便我们在对服务进行测试或者手动修改数据库内容。etcdctl与kubectl和systemctl的命令原理及操作类似,其基本用法如下所示:

etcdctl [global options] command [command options] [args...]

具体的命令选项参数可以通过 etcdctl command --help来获取相关帮助

    etcd 在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),数据库操作围绕对键值目录的 CRUD完成生命周期的管理。

    若需要指定集群,可以在~/.bashrc添加以下内容:

HOST_1=127.0.0.1:23791
HOST_2=127.0.0.1:23792
HOST_3=127.0.0.1:23793
ENDPOINTS=${HOST_1},${HOST_2},${HOST_3}
# 如果需要使用原生命令,在命令开头加一个\ 例如:\etcdctl command
alias etcdctl="etcdctl --endpoints=${ENDPOINTS}"
alias etcdctljson="etcdctl --endpoints=${ENDPOINTS} --write-out=json"
alias etcdctltable="etcdctl --endpoints=${ENDPOINTS} --write-out=table"

    以上添加完成后,source一下使其生效

source ~/.bashrc

3.1 查看etcd版本

etcdctl version

1107960-20220811232629104-937351375.png

3.2 集群相关操作

3.2.1 指定etcd集群

HOST_1=127.0.0.1
ENDPOINTS=${HOST_1}:2379
etcdctl --endpoints=${ENDPOINTS} member list -w table

1107960-20220811232646249-1147961719.png

3.2.2 查看集群健康状态

    集群状态主要是etcdctl endpoint statusetcdctl endpoint health两条命令

etcdctl --endpoints=${ENDPOINTS} endpoint status -w table
etcdctl --endpoints=${ENDPOINTS} endpoint health -w table

1107960-20220811232706943-956707016.png

3.2.3 添加成员

    主要用法如下所示:

etcdctl member add <memberName> [options] [flags]

    示例如下所示:

# 示例:将目标节点etcd4添加到集群
etcdctl member add etcd4 http://192.168.3.104:2380
# 启动目标集群时需要设置启动参数如下
etcd --name=etcd4 --data-dir=/etcd-data \
  --listen-peer-urls=http://192.168.3.104:2380 \
  --listen-client-urls=http://192.168.3.104:2379 \
  --initial-advertise-peer-urls=http://192.168.3.104:2380 \
  --advertise-client-urls=http://192.168.3.104:2379 \
  --initial-cluster=etcd1=http://192.168.3.101:2380,etcd2=http://192.168.3.102:2380,etcd3=http://192.168.3.103:2380,etcd4=http://192.168.3.104:2380 \
  --initial-cluster-state=existing

3.2.4 更新成员

    主要用法如下所示:

etcdctl member update <memberID> [options] [flags]

    示例如下所示:

etcdctl member update ade526d28b1f92f7 --peer-urls=http://192.168.3.111:2380

3.2.5 删除成员

    主要用法如下所示:

etcdctl member remove <memberID> [flags]

    示例如下所示:

etcdctl member remove ade526d28b1f92f7

3.3 数据库操作命令

3.3.1 put

    添加一个键值,基本用法如下所示:

etcdctl put [options] <key> <value> [flags]

    常用参数如下所示:

参数 功能描述
--prev-kv 输出修改前的键值

    注意事项如下所示:

  • 其中value接受从stdin的输入内容
  • 如果value是以横线-开始,将会被视为flag,如果不希望出现这种情况,可以使用两个横线代替--
  • 若键已经存在,则进行更新并覆盖原有值,若不存在,则进行添加

1107960-20220811232733938-845221959.png

3.3.2 get

    查询键值,基本用法如下所示:

etcdctl get [options] <key> [range_end] [flags]

    常用参数如下所示:

参数 功能描述
--hex 以十六进制形式输出
--limit number 设置输出结果的最大值
--prefix 根据prefix进行匹配key
--order 对输出结果进行排序,ASCEND 或 DESCEND
--sort-by 按给定字段排序,CREATE, KEY, MODIFY, VALUE, VERSION
--print-value-only 仅输出value值
--from-key 按byte进行比较,获取大于等于指定key的结果
--keys-only 仅获取keys
1107960-20220811232746709-1024826669.png

3.3.3 del

    删除键值,基本用法如下所示:

etcdctl del [options] <key> [range_end] [flags]

    常用参数如下所示:

参数 功能描述
--prefix 根据prefix进行匹配删除
--prev-kv 输出删除的键值
--from-key 按byte进行比较,删除大于等于指定key的结果
1107960-20220811232759782-1580532820.png

3.4 租约相关命令

    租约具有生命周期,需要为租约授予一个TTL(time to live),将租约绑定到一个key上,则key的生命周期与租约一致,可续租,可撤销租约。其主要用法如下所示:

etcdctl lease <subcommand> [flags]

3.4.1 添加租约

    主要用法如下所示:

etcdctl lease grant <ttl> [flags]

    示例如下所示:

etcdctl lease grant 600

3.4.2 列出租约

    主要用法如下所示:

etcdctl lease list [flags]

    示例如下所示:

etcdctl lease list

3.4.3 删除租约

    主要用法如下所示:

etcdctl lease revoke <leaseID> [flags]

    示例如下所示:

etcdctl lease revoke 694d81417acd4754

3.4.4 查看租约详情

    主要用法如下所示:

etcdctl lease timetolive <leaseID> [options] [flags]

    示例如下所示:

etcdctl lease timetolive 694d81417acd4759

3.4.5 租约续约

    主要用法如下所示:

etcdctl lease keep-alive [options] <leaseID> [flags]

    示例如下所示:

etcdctl lease keep-alive 694d81417acd4757

3.5 watch命令

    watch是监听键或前缀发生改变的事件流, 主要用法如下所示:

etcdctl watch [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] [flags]

    示例如下所示:

# 对某个key监听操作,当key1发生改变时,会返回最新值
etcdctl watch name
# 监听key前缀
etcdctl watch name --prefix
# 监听到改变后执行相关操作
etcdctl watch name --  etcdctl get age

etcdctl watch name -- etcdctl put name Kevin,如果写成,会不会变成死循环,导致无限监视,尽量避免。

3.6 备份和恢复

    主要用于管理节点的快照,其主要用法如下所示:

etcdctl snapshot <subcommand> [flags]

3.6.1 生成快照

    其主要用法如下所示:

etcdctl snapshot save <filename> [flags]

    示例如下所示:

etcdctl snapshot save Surpass.db

3.6.2 查看快照

    其主要用法如下所示:

etcdctl snapshot status <filename> [flags]

    示例如下所示:

etcdctl snapshot status Surpass.db -w table

3.6.3 恢复快照

    其主要用法如下所示:

etcdctl snapshot restore <filename> [options] [flags]

    示例如下所示:

etcdctl snapshot restore Surpass.db \
--name=default \
--data-dir=/home/etcd_db \
--initial-advertise-peer-urls=http://localhost:2380

3.7 查看告警

    如果内部出现问题,会触发告警,可以通过命令查看告警引起原因,命令如下所示:

etcdctl alarm <subcommand> [flags]

    常用的子命令主要有两个:

# 查看所有告警
etcdctl alarm list
# 解除所有告警
etcdctl alarm disarm

3.8 用户权限

    etcd默认是没有开启访问控制的,如果开启外网访问etcd的话就需要考虑访问控制的问题,etcd提供了两种访问控制的方式:

  • 基于身份验证的访问控制
  • 基于证书的访问控制

    etcd有一个特殊用户root和一个特殊角色root:

  • root用户:root用户是etcd的超级管理员,拥有etcd的所有权限,在开启角色认证之前为们必须要先建立好root用户
  • root角色:具有该root角色的用户既具有全局读写访问权限,具有更新集群的身份验证配置的权限。此外,该root角色还授予常规集群维护的特权,包括修改集群成员资格,对存储进行碎片整理以及拍摄快照。

    etcd的权限资源:

  • Users: user用来设置身份认证(user:passwd),一个用户可以拥有多个角色,每个角色被分配一定的权限(只读、只写、可读写),用户分为root用户和非root用户。
  • Roles: 角色用来关联权限,角色主要三类:
     root角色:默认创建root用户时即创建了root角色,该角色拥有所有权限;
     guest角色:默认自动创建,主要用于非认证使用。普通角色,
     由root用户创建角色,并分配指定权限。
  • Permissions: 权限分为只读、只写、可读写三种权限,权限即对指定目录或key的读写权限。

如果没有指定任何验证方式,即未显示指定以什么用户进行访问,那么默认会设定为 guest 角色。默认情况下 guest 也是具有全局访问权限的

3.8.1 用户管理

    其主要用法如下所示:

etcdctl user <subcommand> [flags]

    其主要子命令主要如下所示:

子命令 常用用法 功能描述
add etcdctl user add < user name or user:password > [options] [flags] 添加新用户
delete etcdctl user delete < user name > [flags] 删除用户
list etcdctl user list [flags] 列出所有用户
get etcdctl user get < user name > [options] [flags] 获取用户详细信息
passwd etcdctl user passwd < user name > [options] [flags] 修改密码
grant-role etcdctl user grant-role < user name > < role name > [flags] 赋予用户角色
revoke-role etcdctl user revoke-role < user name > < role name > [flags] 删除用户角色

3.8.2 角色管理

    其主要用法如下所示:

etcdctl role <subcommand> [flags]

    其主要子命令主要如下所示:

子命令 常用用法 功能描述
add etcdctl role add < role name > [flags] 添加角色
delete etcdctl role delete <role name > [flags] 删除角色
list etcdctl role list [flags] 列出所有角色
get etcdctl role get <role name > [flags] 获取角色详情
grant-permission etcdctl role grant-permission [options] < role name > < permission type > < key > [endkey] [flags] 把key操作权限授予给一个角色
revoke-permission etcdctl role revoke-permission < role name > < key > [endkey] [flags] 从角色中撤销key操作权限

3.8.3 开启root身份验证

    在开启身份验证后,注意事项如下所示:

  • 开启身份验证:

所有etcdctl命令操作都需要指定用户参数--user,参数值为用户名:密码

  • 开启证书验证:

所有etcdctl命令操作都需要添加证书参数--cacert

    开启root身份验证的步骤如下所示:

# 添加root 用户,密码为surpass
etcdctl user add root:surpass
# 开启身份验证,开启为enable,取消为disable
etcdctl auth enable
# 在开启身份验证后,需要带user相关信息
etcdctl get name --user=root:surpass

3.8.4 角色授权

    在开启了root身份验证后,就可以对普通用户和角色操作了。

  • 1.用户增删改查
# 增加普通用户
etcdctl user add surpass:surpass --user=root:surpass
# 获取用户信息
etcdctl user get surpass --user=root:surpass
# 查看所有用户
etcdctl user list --user=root:surpass
# 修改用户密码
etcdctl user passwd surpass --user=root:surpass
# 删除用户
etcdctl user delete surpass --user=root:surpass
  • 2.角色增删改查
# 添加角色
etcdctl role add etcd-test --user=root:surpass
# 获取角色详细信息
etcdctl role get etcd-test --user=root:surpass
# 获取所有角色
etcdctl role list --user=root:surpass
# 删除角色
etcdctl role delete etcd-test --user=root:surpass
  • 3.绑定和授权
# 授权角色只读(read)、只写(write)和读写(readwrite)权限
# 按key进行授权
etcdctl role grant-permission etcd-test readwrite name  --user=root:surpass
# 按key的prefix进行授权
etcdctl role grant-permission etcd-test readwrite name --prefix=true --user=root:surpass
# 将授权绑定给指定用户
etcdctl user grant-role test etcd-test --user=root:surpass
# 撤消角色授权
etcdctl role revoke-permission etcd-test name --user=root:surpass
# 撤消绑定授权
etcdctl user revoke-role test etcd-test --user=root:surpass

原文地址:https://www.jianshu.com/p/e861a428b90f

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

1107960-20211031233553291-2147432520.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK