生成快照:
etcdctl --endpoints=http://127.0.0.1:12379 snapshot save snapshot.db创建etcd数据目录:
etcdctl snapshot restore snapshot.db --name m1 --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://host1:2380启动etcd:
etcd --name m1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:2380查询结果:
etcd 访问控制实践:
查看用户
etcdctl user list创建用户
etcdctl user add zwx <username>创建角色同理
etcdctl user grant-role zwx<username> zwx_role<rolename> etcdctl user revoke-role zwx<username> hsz<rolename>详细获取用户的信息
etcdctl user get zwx<username>修改密码
etcdctl user passwd zwx<username>删除用户
etcdctl user delete zwx<username>注意:老版本可能不是delete [remove],根据文档去查看
授予某role对某key某permission<只读>
etcdctl role grant-role zwx_role<rolename> read hsz<key>授予以/foo/< key >为前缀的只读权限,等同于范围[/foo/,/foo0):
etcdctl role grant-permission zwx_role<rolename> --prefix=true read /foo/授予以/foo0< key >为前缀的只写权限
etcdctl role grant-permission zwx_role<rolename> write /foo0授予/foo1到/foo9[start-key,end-key)的读写权限
etcdctl role grant-permission zwx_role<role_name> readwrite /foo1 /foo9授予以“/foo/”为前缀的 key 的读写权限时,可使用如下命令:
etcdctl role grant zwx_role<rolename> -path '/foo/*' -readwrite查看一个 Role 所赋予的权限
etcdctl role get zwx_role<rolename>收回一个 Role 的某个权限
etcdctl role revoke-permission zwx_role<rolename> /foo0<key>如果要完全移除一个Role
etcdctl role delete zwx_role<rolename>创建root用户[不再赘述] 可使用 etcdctl 的子命令 auth 启动/禁用权限功能, etcd 管理员可以在认证 开启前后创建用户和角色。 启用权限功能
etcdctl auth enable反之,禁止权限
etcdctl --user <root:rootpw> auth disable如果想要查询特殊的 guest 角色的权限。(任何没有被授予权限的用户都具有 guest 角色)
etcdctl --user <root:rootpw> role get hsz<guestname>使用用户名和密码对 etcd 进行授权的访问时,可使用如下命令:
etcdctl --user <root:rootpw> get /foo<key>接下来讲解创建一个使用 TLS 进行通信的 etcd 集群: 下载 cfssl与cfssljson
curl -sL -o ~/bin/cfssl http://pkg.cfssl.org/R1.2/cfssl_linux-amd64 curl -sL -o ~/bin/cfssljson http://pkg.cfssl.org/R1.2/cfssljson_linux-amd64注意:如果下载太慢,可以直接复制该网址到浏览器直接下载即可。 初始化证书颁发机构(CA)
cfssl print-defaults config > ca-config.json cfssl print-defaults csr > ca-csr.jsonvim ca-config.json:添加peer参数。 vim ca-csr.json:修改文件 以下命令执行ca证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -上面的命令执行成功后会生成以下几个文件: 请务必保证私钥文件ca-key.pem文件的安全,整个过程中都不会使用“*.csr”文件。 为每个 etcd 成员生成对等证书
echo '{"CN":"member1","host":["127.0.0.1"],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client - | cfssljson -bare member1执行成功会生成三个文件 member1-key.pem member1.csr member1.pem 生成客户端证书
echo '{"CN":"client","host":["127.0.0.1"],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client - | cfssljson -bare client复制 TLS 证书和密钥对 将密钥对复制到所有节点的代码具体如下: 更新系统证书库
sudo apt-get install ca-certificates配置 etcd 使用证书
etcd --name member1 --initial-advertise-peer-urls https://127.0.0.1:2380 \ --listen-peer-urls https://127.0.0.1:2380 \ --listen-client-urls https://127.0.0.1:2379 \ --advertise-client-urls https://127.0.0.1:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster member1=https://127.0.0.1:2380,member2=https://127.0.0.2:2380,member3=https://127.0.0.3:2380 \ --initial-cluster-state new \ --client-cert-auth --trusted-ca-file=./client.pem \ --peer-client-cert-auth --peer-trusted-ca-file=./client.pem \ --peer-cert-file=./member1.pem \ --peer-key-file=./member1-key.pem etcd --name member2 --initial-advertise-peer-urls http://127.0.0.2:2380 \ --listen-peer-urls http://127.0.0.2:2380 \ --listen-client-urls http://127.0.0.2:2379 \ --advertise-client-urls http://127.0.0.2:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster member1=http://127.0.0.1:2380,member2=http://127.0.0.2:2380,member3=http://127.0.0.3:2380 \ --initial-cluster-state new \ --client-cert-auth --trusted-ca-file=./ca.pem \ --peer-client-cert-auth --peer-trusted-ca-file=./ca.pem \ --peer-cert-file=./member2.pem \ --peer-key-file=./member2-key.pem etcd --name member3 --initial-advertise-peer-urls http://127.0.0.3:2380 \ --listen-peer-urls http://127.0.0.3:2380 \ --listen-client-urls http://127.0.0.3:2379 \ --advertise-client-urls http://127.0.0.3:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster member1=http://127.0.0.1:2380,member2=http://127.0.0.2:2380,member3=http://127.0.0.3:2380 \ --initial-cluster-state new \ --client-cert-auth --trusted-ca-file=./ca.pem \ --peer-client-cert-auth --peer-trusted-ca-file=./ca.pem \ --peer-cert-file=./member3.pem \ --peer-key-file=./member3-key.pem如果出现TLS key/cert (–cert-file, --key-file) must be provided for client url https://127.0.0.1:2379 with HTTPS scheme 说明tls不支持https,将改成http即可。 如果出现rafthttp: request cluster ID mismatch错误 表示之前创建的群集没有删除掉,导致数据不匹配,这时将他们删除,节点全部重新启动即可。
提供解决网址:https://rancher.com/docs/rancher/v2.x/en/troubleshooting/kubernetes-components/etcd/
介绍v3的MVCC多版本并发控制 etcd v3 当前使用BoltDB 将数据存储在磁盘中。 BoltDB 只提供简单的 key/value 存储。适合“读多写少”的场景。 etcd 在 BoltDB 中存储的 key 是 reversion, value 是 etcd 自己的 key-value 组合,也就是说 etcd 会在 BoltDB 中保存每个版本。
第四章 Etcd API的使用 第六章 logagent日志的实战 [etcd+kafka+beego+taillog]最近几天比较忙,没空写博客,留下github可以先自行观看:https://github.com/SarletSKY/logagent