草庐IT

【云原生 | 47】etcdctl客户端的使用方法详解

小鹏linux 2023-04-20 原文

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入!

使用etcdctl客户端

etcdctl是Etcd官方提供的命令行客户端,它支持一些基于HTTP API封装好的命令,供用户直接跟Etcd服务打交道,而无需基于HTTP API的方式。当然,这些命令跟HTTP API实际上是对应的,最终效果上并无不同之处。
某些场景下使用etcdctl将十分方便。例如用户需要对Etcd服务进行简单测试或者手动来修改数据库少量内容;也推荐在刚接触Etcd时通过 etcdctl命令来熟悉Etcd支持的相关功能。
Etcd项目二进制发行包中已经包含了etcdctl工具,没有的话,可以从github.com/coreos/etcd/releases手动下载。

etcdctl的命令格式为:

$ etcdctl [全局选项]命令[命令选项] [命令参数]

全局选项参数见如下表格

支持的命令大体上分为数据类操作和非数据类操作两类。
Etcd作为一个分布式数据库,类似ZooKeeper采用了类似文件目录的结
构,数据类操作基本围绕对文件(即某个键)或目录进行。大家可以对比
Linux的文件和目录操作命令,会发现两者之间的相似性。非数据类操作主
要是Etcd提供的系统配置、权限管理等。参见如下两个表格


1、数据类操作 

数据类操作围绕对键值和目录的CRUD(符合REST风格的一套操作:Create)完整生命周期的管理。

Etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的 概念),用户指定的键可以为单独的名字,如testkey,此时实际上放在根目录/下面,也可以为指定目录结构,如cluster1/node2/testkey,则将创建相应的目录结构。

提示:

CRUD即Create、Read、Update、Delete,是符合REST风格的一套API操作规范。

1.1 set 

设置某个键的值为给定值。例如:

$ etcdctl set /testdir/testkey "Hello world"
Hello world

支持的选项包括:

        --ttl'0'                                            键值的超时时间(单位为秒),不配置(默认为0)则永不超时

        --swap-with-value value               若该键现在的值是value,则进行设置操作

        --swap-with-index'0'                     若该键现在的索引值是指定索引,则进行设置操作

注意:

--ttl选项十分有用。在分布式环境中,系统往往是不可靠的,在基于Etcd设计分布式锁的时候,可以通过超时时间避免出现发生死锁的情况。

1.2 get 

获取指定键的值。例如:
$ etcdctl set testkey hello
hello
$ etcdctl update testkey world
world

当键不存在时,则会报错。例如:

$ etcdctl get testkey2
Error: 100: Key not found (/testkey2)

支持的选项为—sort,对返回结果进行排序。

1.3 update 

当键存在时,更新值内容。例如:

$ etcdctl set testkey hello
hello
$ etcdctl update testkey world
world

当键不存在时,则会报错。例如:

$ etcdctl update testkey2 world
Error: 100: Key not found (/testkey2)
支持的选项为--ttl'0',超时时间(单位为秒),不配置(默认为0)则永不超时。

1.4 mk

如果给定的键不存在,则创建一个新的键值。例如: 

$ etcdctl mk /testdir/testkey "Hello world"
Hello world

当键存在的时候,执行该命令会报错,例如:

$ etcdctl set testkey "Hello world"
Hello world
$ ./etcdctl mk testkey "Hello world"
Error: 105: Key already exists (/testkey)
支持的选项为--ttl'0',超时时间(单位为秒),不配置(默认为0)则永不超时。

1.5 rm 

删除某个键值。例如:

$ etcdctl rm testkey

当键不存在时,则会报错。例如:

$ etcdctl rm testkey2
Error: 100: Key not found (/testkey2)
支持的选项为:
        --dir——如果键是个空目录或者是键值对则删除;
        --recursive——删除目录和所有子键;
        --with-value——检查现有的值是否匹配;
        --with-index'0'——检查现有的index是否匹配。

1.6 watch 

监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。例如,用户更新testkey键值为Hello world。
$ etcdctl watch testkey
Hello world
支持的选项包括:
        --forever——一直监测,直到用户按`CTRL+C`退出;
        --after-index'0'——在指定index之前一直监测;
        --recursive——返回所有的键值和子键值。

1.7 exec-watch 

监测一个键值的变化,一旦键值发生更新,就执行给定命令。这个功能十分强大,很多时候可以用于实时根据键值更新本地服务的配置信息,并重新加载服务。可以实现分布式应用配置的自动分发。

例如,一旦检测到testkey键值被更新,则执行ls命令。

$ etcdctl exec-watch testkey -- sh -c 'ls'
default.etcd
Documentation
etcd
etcdctl
etcd-migrate
README-etcdctl.md
README.md
支持的选项包括:
        --after-index'0'——在指定index之前一直监测;
        --recursive——返回所有的键值和子键值。

1.8 ls 

列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中内容。例如:
$ ./etcdctl set testkey 'hi'
hi
$ ./etcdctl set dir/test 'hello'
hello
$ ./etcdctl ls
/testkey
/dir
$ ./etcdctl ls dir
/dir/test

支持的选项包括:

        --sort——将输出结果排序
        --recursive——如果目录下有子目录,则递归输出其中的内容
        -p——对于输出为目录,在最后添加`/`进行区分

1.9 mkdir 

如果给定的键目录不存在,则创建一个新的键目录。例如:

$ etcdctl mkdir testdir

当键目录存在的时候,执行该命令会报错,例如:

$ etcdctl mkdir testdir
$ etcdctl mkdir testdir
Error: 105: Key already exists (/testdir)
支持的选项为--ttl'0',超时时间(单位为秒),不配置(默认为0)则永不超时。

1.10 rmdir 

删除一个空目录,或者键值对。若目录不空,会报错,例如:

$ etcdctl set /dir/testkey hi
hi
$ etcdctl rmdir /dir
Error: 108: Directory not empty (/dir)

1.11 setdir 

创建一个键目录,无论存在与否。实际上,目前版本当目录已经存在的时候会报错。例如:
$ etcdctl setdir /test/test
$ etcdctl ls --recursive
/test
/test/test
支持的选项为--ttl'0',超时时间(单位为秒),不配置(默认为0)则永不超时。

1.12 updatedir 

更新一个已经存在的目录的属性(目前只有存活时间),例如:

$ etcdctl mkdir /test/test --ttl 100
$ etcdctl updatedir /test/test --ttl 200
支持的选项为--ttl'0,存活时间(单位为秒),不配置(默认为0)则永不超时。

2、非数据类操作 

非数据类操作不直接对数据本身进行管理,而是负责围绕集群自身的一些配置。

2.1 backup 

备份Etcd的配置状态数据目录。
支持的选项包括:
        --data-dir——要进行备份的Etcd的数据存放目录;
        --backup-dir——备份数据到指定路径。
例如,备份默认配置的信息到当前路径下的tmp子目录:
$ etcdctl backup --data-dir default.etcd --backup-dir tmp

可以查看tmp目录下面多了一个member目录:

$ ls tmp/member
snap wal
其中,snap为快照目录,保存节点状态快照文件(注意这些快照文件定
期生成);wal保存了数据库预写日志信息。

注意:

预写日志要求数据库在发生实际提交前必须先将操作写入日志,可以保
障系统在崩溃后根据日志回复状态。

2.2 cluster-health 

查看Etcd集群的健康状态。例如:

$ etcdctl cluster-health
member ce2a822cea30bfca is healthy: got healthy result from http://localhost:2379
cluster is healthy
支持的选项包括--forever,每隔10秒钟检查一次,直到手动终止(通
过Ctrl+C命令)。

2.3 member 

通过list、add、remove等子命令列出、添加、删除Etcd实例到Etcd集
群中。
例如本地启动一个Etcd服务实例后,可以用如下命令进行查看默认的实
例成员:
$ etcdctl member list
ce2a822cea30bfca: name=default peerURLs=http://localhost:2380,http://localhost:
7001 clientURLs=http://localhost:2379,http://localhost:4001

2.4 import 

导入旧版本(v0.4.*)的快照文件到系统。
支持的选项包括:
        --snap——快照文件路径;
        --hidden'--hidden option--hidden option'——隐藏导入的键值空间信息;
        -c'10'——并发导入的客户端数。

例如,导入通过backup命令导出的快照文件:

$ etcdctl import --snap tmp/member/snap/0000000000000003-0000000000061aa8.snap
starting to import snapshot tmp/member/snap/0000000000000003-0000000000061aa8.
snap with 10 clients
entering dir: /
copying key: /key 1
finished importing 1 keys

2.5 user 

对用户进行管理,包括一系列子命令:

        add——添加一个用户;
        get——查询用户细节;
        list——列出所有用户;
        remove——删除用户;
        grant——添加用户到角色;
        revoke——删除用户角色;
        passwd——修改用户的密码。

默认情况下,需要先创建(启用)root用户作为etcd集群的最高权限管理员:

$ etcdctl user add root
New password:

创建一个testuser用户,会提示输入密码:

$ etcdctl user add testuser
New password:

分配某些已有角色给用户:

$ etcdctl user grant testuser -roles testrole

2.6 role 

对用户角色进行管理,包括一系列子命令:
        add——添加一个角色;
        get——查询角色细节;
        list——列出所有用户角色;
        remove——删除用户角色;
        grant——添加路径到角色控制,可以为read、write或者readwrite;
        revoke——删除某路径的用户角色信息。
默认带有root、guest两种角色,前者为全局最高权限,后者为不带验
证情况下的用户。

例如:

$ etcdctl role add testrole
$ etcdctl role grant testrole -path '/key/*' -read

2.7 auth 

是否启用访问验证。enable为启用,disable为禁用。
例如,在root用户创建后,启用认证:
$ etcdctl auth enable

  👑👑👑结束语👑👑👑

有关【云原生 | 47】etcdctl客户端的使用方法详解的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐