{"id":611,"date":"2021-12-03T15:36:00","date_gmt":"2021-12-03T07:36:00","guid":{"rendered":"https:\/\/blog.frost-s.tk\/?p=611"},"modified":"2021-12-16T22:44:32","modified_gmt":"2021-12-16T14:44:32","slug":"etcd-%e5%91%bd%e4%bb%a4","status":"publish","type":"post","link":"https:\/\/blog.frost-s.com\/index.php\/2021\/12\/03\/etcd-%e5%91%bd%e4%bb%a4\/","title":{"rendered":"etcd \u547d\u4ee4"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">etcdctl\u547d\u4ee4\u5168\u5c40\u9009\u9879\u53c2\u6570<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u53c2\u6570<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>--debug<\/td><td>\u8f93\u51fa\u8c03\u8bd5\u4fe1\u606f\uff0c\u663e\u793a\u6267\u884c\u547d\u4ee4\u7684\u65f6\u5019\u53d1\u8d77\u7684\u8bf7\u6c42<\/td><\/tr><tr><td>--no-sync<\/td><td>\u53d1\u51fa\u8bf7\u6c42\u94b1\u4e0d\u4e3b\u52a8\u540c\u6b65\u96c6\u7fa4\u4fe1\u606f<\/td><\/tr><tr><td>--output\uff0c -o 'simple'<\/td><td>\u8f93\u51fa\u54cd\u5e94\u6d88\u606f\u7684\u683c\u5f0f\uff0c\u53ef\u4ee5\u4e3asimple\uff0cjson\u6216extended<\/td><\/tr><tr><td>--discovery-srv\uff0c -D<\/td><td>\u901a\u8fc7\u57df\u540d\u67e5\u8be2\uff0c\u6765\u63a2\u6d4b\u96c6\u7fa4\u6210\u5458\u4fe1\u606f<\/td><\/tr><tr><td>--peers\uff0c -C<\/td><td>\u96c6\u7fa4\u4e2d\u6210\u5458\u5730\u5740\u5217\u8868\uff0c\u7528\u9017\u53f7\u9694\u5f00<\/td><\/tr><tr><td>--endpoint<\/td><td>\u96c6\u7fa4\u4e2d\u6210\u5458\u5730\u5740\u5217\u8868<\/td><\/tr><tr><td>--cert-file<\/td><td>\u5982\u679c\u96c6\u7fa4\u9700\u8981https\u8ba4\u8bc1\uff0c\u63d0\u4f9bTLS\u7684\u8bc1\u4e66\u6587\u4ef6\u8def\u5f84<\/td><\/tr><tr><td>--key-file HTTPS<\/td><td>\u8ba4\u8bc1\u7684\u8bc1\u4e66\u6587\u4ef6\u8def\u5f84<\/td><\/tr><tr><td>--ca-file<\/td><td>\u57df\u540d\u76f8\u5173\u7684\u6839\u8bc1\u4e66\u6587\u4ef6\u8def\u5f84<\/td><\/tr><tr><td>--username, -u username[:password]<\/td><td>\u7528\u6237\u540d\u548c\u5bc6\u7801\u9a8c\u8bc1\u4fe1\u606f<\/td><\/tr><tr><td>--timeout '1s'<\/td><td>\u8bf7\u6c42\u7684\u8fde\u63a5\u8d85\u65f6\uff0c\u9ed8\u8ba4\u4e3a1s<\/td><\/tr><tr><td>--total-timeout '5s'<\/td><td>\u547d\u4ee4\u6267\u884c\u603b\u8d85\u65f6\uff0c\u9ed8\u8ba4\u4e3a5s<\/td><\/tr><tr><td>--version\uff0c -v<\/td><td>\u6253\u5370\u7248\u672c\u4fe1\u606f<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">etcd\u547d\u4ee4\u9884\u89c8<\/h3>\n\n\n\n<p>etcd\u652f\u6301\u7684\u547d\u4ee4\u5927\u4f53\u4e0a\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff0c\u6570\u636e\u7c7b\u64cd\u4f5c\u3001\u975e\u6570\u636e\u7c7b\u64cd\u4f5c<\/p>\n\n\n\n<p>\u6570\u636e\u7c7b\u64cd\u4f5c<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u547d\u4ee4<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>set<\/td><td>\u8bbe\u7f6e\u952e\u5bf9\u5e94\u7684\u503c<\/td><\/tr><tr><td>get<\/td><td>\u83b7\u53d6\u952e\u5bf9\u5e94\u7684\u503c<\/td><\/tr><tr><td>update<\/td><td>\u66f4\u65b0\u952e\u5bf9\u5e94\u7684\u503c<\/td><\/tr><tr><td>mk<\/td><td>\u521b\u5efa\u65b0\u7684\u503c<\/td><\/tr><tr><td>rm<\/td><td>\u5220\u9664\u952e\u503c\u6216\u76ee\u5f55<\/td><\/tr><tr><td>watch<\/td><td>\u76d1\u63a7\u67d0\u952e\u503c\u7684\u53d8\u5316<\/td><\/tr><tr><td>exec-watch<\/td><td>\u76d1\u63a7\u5230\u67d0\u952e\u503c\u53d8\u5316\u65f6\uff0c\u6267\u884c\u7684\u547d\u4ee4<\/td><\/tr><tr><td>ls<\/td><td>\u5217\u51fa\u76ee\u5f55\u4e0b\u7684\u5185\u5bb9<\/td><\/tr><tr><td>mkdir<\/td><td>\u521b\u5efa\u65b0\u7684\u76ee\u5f55<\/td><\/tr><tr><td>rmdir<\/td><td>\u5220\u9664\u7a7a\u76ee\u5f55\u6216\u8005\u4e00\u4e2a\u952e\u503c<\/td><\/tr><tr><td>setdir<\/td><td>\u521b\u5efa\u76ee\u5f55\uff08\u5141\u8bb8\u76ee\u5f55\u5df2\u7ecf\u5b58\u5728\uff09<\/td><\/tr><tr><td>updatedir<\/td><td>\u66f4\u65b0\u5df2\u7ecf\u5b58\u5728\u7684\u76ee\u5f55<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u975e\u6570\u636e\u7c7b\u64cd\u4f5c<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u547d\u4ee4<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>backup<\/td><td>\u5907\u4efd\u6307\u5b9a\u7684\u76ee\u5f55<\/td><\/tr><tr><td>cluster-health<\/td><td>\u68c0\u67e5etcd\u96c6\u7fa4\u5065\u5eb7\u60c5\u51b5<\/td><\/tr><tr><td>member<\/td><td>\u6dfb\u52a0\u3001\u5220\u9664\u6216\u5217\u51fa\u6210\u5458\uff0c\u9700\u8981\u5e26\u5177\u4f53\u7684\u5b50\u547d\u4ee4<\/td><\/tr><tr><td>import<\/td><td>\u5bfc\u5165\u5feb\u7167<\/td><\/tr><tr><td>user<\/td><td>\u7528\u6237\u6dfb\u52a0\u3001\u6743\u9650\u7ba1\u7406\uff0c\u9700\u8981\u5e26\u5177\u4f53\u5b50\u547d\u4ee4<\/td><\/tr><tr><td>role<\/td><td>\u89d2\u8272\u6dfb\u52a0\u3001\u6743\u9650\u7ba1\u7406\uff0c\u9700\u8981\u5e26\u5177\u4f53\u5b50\u547d\u4ee4<\/td><\/tr><tr><td>auth<\/td><td>\u5168\u5c40\u8ba4\u8bc1\u7ba1\u7406<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u6570\u636e\u7c7b\u64cd\u4f5c<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. set<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@node2 ~]# etcdctl set \/testdir\/testkey \"helloworld\"\nhelloworld<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2. get<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@node2 ~]# etcdctl get \/testdir\/testkey\nhelloworld\n&#91;root@node2 ~]# \n\n\u652f\u6301--sort\uff0c\u5bf9\u8fd4\u56de\u7ed3\u679c\u8fdb\u884c\u6392\u5e8f<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. update<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@node2 ~]# etcdctl update \/testdir\/testkey hello\nhello\n&#91;root@node2 ~]# etcdctl get \/testdir\/testkey\nhello\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4. mk<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5982\u679c\u7ed9\u5b9a\u7684\u952e\u4e0d\u5b58\u5728\uff0c\u5219\u521b\u5efa\uff0c\u5426\u5219\u62a5\u9519\n\n&#91;root@node2 ~]# etcdctl mk \/testdir\/testkey2 hello\nhello\n&#91;root@node2 ~]#\n\n&#91;root@node2 ~]# etcdctl mk \/testdir\/testkey hello\nError:  105: Key already exists (\/testdir\/testkey) &#91;16]<\/code><\/pre>\n\n\n\n<p>\u3010set\u4e0emk\u533a\u522b\u3011 \u5f53\u952e\u5b58\u5728\u662fset\u4f1a\u4fee\u6539\u952e\u7684\u503c\uff0cmk\u5219\u4f1a\u62a5\u9519<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. rm<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5220\u9664\u67d0\u4e2a\u952e\uff0c\u952e\u4e0d\u5b58\u5728\u5c31\u62a5\u9519\n&#91;root@node2 ~]# etcdctl rm \/testdir\/testkey2\nPrevNode.Value: hello\n\n--dir \u5982\u679c\u952e\u662f\u7a7a\u76ee\u5f55\u6216\u8005\u662f\u952e\u503c\u5bf9\u5219\u5220\u9664\n--recursive  \u5220\u9664\u76ee\u5f55\u548c\u6240\u6709\u5b50\u952e<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6. watch<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u76d1\u63a7\u4e00\u4e2a\u952e\u503c\u7684\u53d8\u5316\uff0c\u53d1\u73b0\u952e\u503c\u66f4\u65b0\u540e\u5c31\u56de\u9000\u51fa\n\n--forever \u4e00\u76f4\u76d1\u6d4b\uff0c\u77e5\u9053\u7528\u6237\u6309CTRL+C\u9000\u51fa<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">7. exec-watch<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u76d1\u6d4b\u4e00\u4e2a\u952e\u503c\u7684\u53d8\u5316\uff0c\u4e00\u65e6\u952e\u503c\u53d1\u751f\u66f4\u65b0\uff0c\u6267\u884c\u6307\u5b9a\u7684\u547d\u4ee4\n&#91;root@node2 ~]# etcdctl exec-watch \/testdir\/testkey -- sh -c 'ls \/'\nbin  boot  dev    etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var\n\n\u8be5\u547d\u4ee4\u4f1a\u4e00\u76f4\u6267\u884c\u4e0b\u53bb\uff0c\u4e0d\u4f1a\u50cfwatch\u4e00\u6837\uff0c\u76d1\u6d4b\u5230\u4e00\u6b21\u66f4\u65b0\u540e\u5c31\u9000\u51fa<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">8. mkdir<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5982\u679c\u7ed9\u5b9a\u7684\u76ee\u5f55\u4e0d\u5b58\u5728\u5219\u521b\u5efa\uff0c\u5b58\u5728\u4f1a\u62a5\u9519\n\n&#91;root@node2 ~]# etcdctl mkdir \/test\/testc --ttl 10 \n--ttl \u8d85\u65f6\u65f6\u95f4\u5355\u4f4ds\uff0c10s\u540e\u76ee\u5f55\u4f1a\u88ab\u5220\u9664<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">9. rmdir<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5220\u9664\u4e00\u4e2a\u7a7a\u76ee\u5f55\uff0c\u6216\u952e\u503c\u5bf9\u3002\u82e5\u76ee\u5f55\u4e0d\u4e3a\u7a7a\uff0c\u4f1a\u62a5\u9519\u3002\n\n&#91;root@node2 ~]# etcdctl mkdir \/testa\n&#91;root@node2 ~]# etcdctl rmdir \/testa\/\n&#91;root@node2 ~]#\n\n&#91;root@node2 ~]# etcdctl ls \/testdir\/\n\/testdir\/testkey\n\/testdir\/testkey2\n&#91;root@node2 ~]# etcdctl rmdir \/testdir\/\nError:  108: Directory not empty (\/testdir) &#91;28]\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">11. setdir<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u521b\u5efa\u4e00\u4e2a\u7a7a\u76ee\u5f55\uff0c\u5982\u679c\u76ee\u5f55\u5df2\u7ecf\u5b58\u5728\u4f1a\u62a5\u9519\n\n&#91;root@node2 ~]# etcdctl setdir \/etc\/testb\n&#91;root@node2 ~]# etcdctl ls \/etc\/testb\n&#91;root@node2 ~]# etcdctl setdir \/etc\/testb\nError:  102: Not a file (\/etc\/testb) &#91;34]\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">12. updatedir<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u4e8e\u66f4\u65b0\u5df2\u7ecf\u5b58\u5728\u7684\u76ee\u5f55\u5c5e\u6027\uff08\u76ee\u524d\u53ea\u6709\u5b58\u6d3b\u65f6\u95f4\uff09\n&#91;root@node2 ~]# etcdctl mkdir \/test\/testc --ttl 10\n&#91;root@node2 ~]# etcdctl mkdir \/test\/testc --ttl 30\n&#91;root@node2 ~]# etcdctl updatedir \/test\/testc --ttl 300\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u975e\u6570\u636e\u7c7b\u64cd\u4f5c<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. backup<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>   --data-dir value        \u6570\u636e\u76ee\u5f55\u8def\u5f84\n   --wal-dir value         Path to the etcd wal dir\n   --backup-dir value      \u5907\u4efd\u6570\u636e\u5230\u6307\u5b9a\u76ee\u5f55\n   --backup-wal-dir value  Path to the backup wal dir\n   --with-v3               Backup v3 backend data\n\n&#91;root@node2 ~]# cat \/etc\/etcd\/etcd.conf |grep data-dir\ndata-dir: \"\/opt\/etcd_data\"\n&#91;root@node2 ~]# ls \/opt\/etcd_data\nmember\n&#91;root@node2 ~]# etcdctl backup --data-dir \/opt\/etcd_data --backup-dir \/tmp\/\n2019-06-05 22:37:20.757947 I | ignoring EntryConfChange raft entry\n2019-06-05 22:37:20.758148 I | ignoring EntryConfChange raft entry\n2019-06-05 22:37:20.758170 I | ignoring EntryConfChange raft entry\n2019-06-05 22:37:20.758314 I | ignoring member attribute update on \/0\/members\/cf5538a4dab95927\/attributes\n2019-06-05 22:37:20.758356 I | ignoring member attribute update on \/0\/members\/a3d1fb0d28ed2953\/attributes\n2019-06-05 22:37:20.758387 I | ignoring member attribute update on \/0\/members\/8816eaa680e63c73\/attributes\n2019-06-05 22:37:20.758455 I | ignoring v3 raft entry\n2019-06-05 22:37:20.758484 I | ignoring member attribute update on \/0\/members\/cf5538a4dab95927\/attributes\n2019-06-05 22:37:20.758509 I | ignoring member attribute update on \/0\/members\/a3d1fb0d28ed2953\/attributes\n2019-06-05 22:37:20.758534 I | ignoring member attribute update on \/0\/members\/8816eaa680e63c73\/attributes\n2019-06-05 22:37:20.758575 I | ignoring member attribute update on \/0\/members\/8816eaa680e63c73\/attributes\n2019-06-05 22:37:20.758608 I | ignoring member attribute update on \/0\/members\/a3d1fb0d28ed2953\/attributes\n2019-06-05 22:37:20.758633 I | ignoring member attribute update on \/0\/members\/cf5538a4dab95927\/attributes\n2019-06-05 22:37:20.758720 I | ignoring v3 raft entry\n2019-06-05 22:37:20.758870 I | ignoring member attribute update on \/0\/members\/cf5538a4dab95927\/attributes\n2019-06-05 22:37:20.758891 I | ignoring member attribute update on \/0\/members\/a3d1fb0d28ed2953\/attributes\n2019-06-05 22:37:20.758902 I | ignoring member attribute update on \/0\/members\/8816eaa680e63c73\/attributes\n\n&#91;root@node2 ~]# ls \/tmp\/member\/\nsnap  wal\n&#91;root@node2 ~]# \nsnap \u5feb\u7167\u76ee\u5f55\uff0c\u4fdd\u5b58\u8282\u70b9\u72b6\u6001\u5feb\u7167\u6587\u4ef6\nwal \u4fdd\u5b58\u4e86\u6570\u636e\u5e93\u9884\u5199\u65e5\u5fd7\u4fe1\u606f\n\n\u3010\u9884\u5199\u65e5\u5fd7\u3011\u9884\u5199\u65e5\u5fd7\u8981\u6c42\u6570\u636e\u5e93\u5728\u53d1\u751f\u5b9e\u9645\u63d0\u4ea4\u524d\u5fc5\u987b\u5148\u5c06\u64cd\u4f5c\u5199\u5165\u65e5\u5fd7\uff0c\u53ef\u4ee5\u4fdd\u969c\u7cfb\u7edf\u5728\u5d29\u6e83\u540e\u6839\u636e\u65e5\u5fd7\u72b6\u6001\u6062\u590d\u72b6\u6001\u3002<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2. cluster-health<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">3. member<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">4. role<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>add \u6dfb\u52a0\u4e00\u4e2a\u89d2\u8272\nget \u67e5\u8be2\u89d2\u8272\u7ec6\u8282\nlist \u5217\u51fa\u6240\u6709\u7528\u6237\u89d2\u8272\nremove \u5220\u9664\u7528\u6237\u89d2\u8272\ngrant \u6dfb\u52a0\u8def\u5f84\u5230\u89d2\u8272\u63a7\u5236 \uff0cr:w:rw\nrevoke \u5220\u9664\u67d0\u8def\u5f84\u7684\u7528\u6237\u89d2\u8272\u4fe1\u606f\n\u9ed8\u8ba4\u5e26\u6709root,guest\u4e24\u79cd\u89d2\u8272\uff0c\u524d\u8005\u4e3a\u6700\u9ad8\u6743\u9650\u7528\u6237\uff0c\u540e\u8005\u4e3a\u4e0d\u5e26\u9a8c\u8bc1\u60c5\u51b5\u4e0b\u7684\u7528\u6237\n\n\u6dfb\u52a0\u4e00\u4e2a\u89d2\u8272\n&#91;root@node2 ~]# etcdctl role add read_testdir\nRole read_testdir created\n&#91;root@node2 ~]#\n\n\u8bbe\u7f6e\u8be5\u89d2\u8272\u5177\u6709\u5bf9\/testdir\/\u76ee\u5f55\u6709\u8bfb\u6743\u9650\n&#91;root@node2 ~]# etcdctl role grant read_testdir -path '\/testdir\/*' -read\nRole read_testdir updated\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5. user<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5bf9\u7528\u6237\u8fdb\u884c\u7ba1\u7406\uff0c\nadd \u6dfb\u52a0\u4e00\u4e2a\u7528\u6237\nget \u67e5\u8be2\u7528\u6237\u7ec6\u8282\nlist  \u5217\u51fa\u6240\u6709\u7528\u6237\nremove \u5220\u9664\u7528\u6237\ngrant \u6dfb\u52a0\u7528\u6237\u5230j\u89d2\u8272\nrevoke \u5220\u9664\u7528\u6237\u89d2\u8272\npasswd \u4fee\u6539\u7528\u6237\u7684\u5bc6\u7801\n\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u9700\u8981\u5148\u521b\u5efa\uff08\u542f\u7528\uff09root\u7528\u6237\u4f5c\u4e3aetcd\u96c6\u7fa4\u7684\u6700\u9ad8\u6743\u9650\u7ba1\u7406\u5458\n\n&#91;root@node2 ~]# etcdctl user add root\nNew password: \nUser root created\n&#91;root@node2 ~]# etcdctl user add test1\nNew password: \nUser test1 created\n&#91;root@node2 ~]# \n\n\u5206\u914d\u5df2\u6709\u89d2\u8272\u7ed9\u7528\u6237\n&#91;root@node2 ~]# etcdctl user grant test1 -roles read_testdir\nUser test1 updated\n&#91;root@node2 ~]#\n\n\u67e5\u770b\u7528\u6237\u7ec6\u8282\n&#91;root@node2 ~]# etcdctl user get test1\nUser: test1\nRoles:  read_testdir\n-\n&#91;root@node2 ~]# etcdctl user get test1  #\u7528\u6237\u5177\u6709\u591a\u79cd\u89d2\u8272\nUser: test1\nRoles:   read_testdir root\n\n\u5220\u9664\u7528\u6237\u89d2\u8272\n&#91;root@node2 ~]# etcdctl user revoke test1 -roles read_testdir\nUser test1 updated\n&#91;root@node2 ~]# <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6. auth<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\u662f\u5426\u542f\u7528\u8bbf\u95ee\u9a8c\u8bc1\u3002enable\u4e3a\u542f\u7528\uff0cdisable\u4e3a\u7981\u7528\u3002\n\n&#91;root@node2 ~]# etcdctl user list\nInsufficient credentials\n&#91;root@node2 ~]# etcdctl --username root:123 user list   \u4f7f\u7528--username  \u7528\u6237\u540d\uff1a\u5bc6\u7801\u8bbf\u95ee\nroot\ntest1\n&#91;root@node2 ~]#<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u53c2\u8003<\/p><p>\u300aDocker\u6280\u672f\u5165\u95e8\u4e0e\u5b9e\u6218\u300b \u7b2c\u4e8c\u7248<\/p><p>https:\/\/blog.csdn.net\/fnatic_\/article\/details\/84307332<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>etcdctl\u547d\u4ee4\u5168\u5c40\u9009\u9879\u53c2\u6570 \u53c2\u6570 \u8bf4\u660e &#8211;debug \u8f93\u51fa\u8c03\u8bd5\u4fe1\u606f\uff0c\u663e\u793a\u6267\u884c\u547d\u4ee4\u7684\u65f6\u5019\u53d1\u8d77\u7684\u8bf7\u6c42 &#8211;n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":612,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"footnotes":""},"categories":[10,8,6,5],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/611"}],"collection":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/comments?post=611"}],"version-history":[{"count":2,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/611\/revisions"}],"predecessor-version":[{"id":822,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/611\/revisions\/822"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/media\/612"}],"wp:attachment":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/media?parent=611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/categories?post=611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/tags?post=611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}