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

3.2 集群相关操作

3.2.1 指定etcd集群

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

3.2.2 查看集群健康状态

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

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

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,如果不希望出现这种情况,可以使用两个横线代替--
  • 若键已经存在,则进行更新并覆盖原有值,若不存在,则进行添加

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

3.3.3 del

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

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

    常用参数如下所示:

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

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,或扫描下面的二维码添加关注:

ETCD快速入门-03 常用命令的更多相关文章

  1. Git快速入门和常用命令

    一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...

  2. Docker(2):快速入门及常用命令

    什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...

  3. git 快速入门及常用命令

    身为技术人员,都知道Git是干嘛的.从服务端角度它是代码仓库,可以多人协作.版本控制.高效处理大型或小型项目所有内容:从客户端讲,它能够方便管理本地分支.且与服务端代码的同步,从拉取.合并.提交等等管 ...

  4. MySQL快速入门及常用命令

    数据库 笔记内容 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,F ...

  5. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  6. Docker的入门及常用命令

    Docker入门及常用命令 1. 各个容器之间是相互隔离状态: 这样减少了我们软件之间的影响. 2. docker是os层虚拟化架构的一种产品体现, os层虚拟化架构出来的操作系统需要和宿主机操作系统 ...

  7. Docker入门以及常用命令

    目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...

  8. Docker入门之常用命令

    写在前面 细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没. 让我们一起来回顾一下Docker 是什么? 是一种虚拟化技术 能够将应用程序自动部署到容 ...

  9. vue 快速入门、常用指令(1)

    1. vue.js的快速入门使用 1.1 vue.js库的下载 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 官方网站 中文:https://cn.vuejs. ...

随机推荐

  1. Kitex源码阅读——脚手架代码是如何通过命令行生成的(一)

    前言 Kitex是字节跳动内部的Golang微服务RPC框架,先已开源. Kitex文档:https://www.cloudwego.io/zh/docs/kitex/getting-started/ ...

  2. CXP 协议中upconnection 与downconnection的说明及其区别

    概述 CXP定义了一个DEVICE和HOST之间点对点的连接协议.CXP的一个连接包含了一个MASTER物理连接和若干可选的SLAVE连接,每一个连接都定义了一组逻辑通道用于传输图像数据.实时触发.设 ...

  3. 20212115 实验二 《python程序设计》实验报告

    实验二 计算器设计 #20212115 2021-2022-2 <python程序设计> 实验报告二 课程: 课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号: ...

  4. 喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。

    你好呀,我是歪歪. 前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候,看到一个 pr,虽说是在 RocketMQ 的地盘上发现的,但是这个玩意吧,其实和 RocketMQ 没有任何关系. ...

  5. 第二章、DHCP原理与配置

    目录 一.了解DHCP服务 1DHCP概述: 2DHCP好处 3DHCP的分配方式 二.DHCP工作过程 DHCP租约过程 三.使用 DHCP动态配置主机地址 1DHCP服务优点 2可分配的地址信息主 ...

  6. Go写文件的权限 WriteFile(filename, data, 0644)?

    本文来自博客园,作者:阿伟的博客,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/go-ioutil-writefile-perm.html 前言 go iouit ...

  7. 【python基础】第11回 数据类型内置方法 02

    本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...

  8. NC207028 第k小数

    NC207028 第k小数 题目 题目描述 给你一个长度为 \(n\) 的序列,求序列中第 \(k\) 小数的多少. 输入描述 多组输入,第一行读入一个整数 \(T\) 表示有 \(T\) 组数据. ...

  9. Python 用configparser读写ini文件

    一.configparser 简介Python用于读写ini文件的一个官方标准库.具体详见官网链接 二.configparser 部分方法介绍 方法 描述 read(filenames) filesn ...

  10. 链表设计与Java实现,手写LinkedList这也太清楚了吧!!!

    链表设计与实现 在谈链表之前,我们先谈谈我们平常编程会遇到的很常见的一个问题.如果在编程的时候,某个变量在后续编程中仍需使用,我们可以用一个局部变量来保存该值,除此之外一个更加常用的方法就是使用容器了 ...