k8s组件之etcd(2)

etcd学习

etcd是k8s系统中的一个组建,安装在master节点中,负责数据的存储,以及节点的注册发现。etcd 被设计为提供高可用、强一致的小型 keyvalue 数据存储服务
在 2015 年2月份,etcd 发布了第一个正式的稳定版本 2.0。在 2.0 版本中,etcd 重新设计了 Raft 一致性算法,并为用户提供了一个简单的树形数据视图。
2.0 版本发布之后,经过不断的迭代与改进,其原有的数据存储方案逐渐成为了新时期的性能瓶颈,之后 etcd 启动了 v3 版本的方案设计。版本建议使用 3.4 及以上,3.4存储容量做了提升,降低了读写延迟。
一个 etcd 集群,通常会由 3 个或者 5 个节点组成,多个节点之间通过 Raft 一致性算法的完成分布式一致性协同,算法会选举出一个主节点作为 leader,由 eader 负责数据的同步与数据的分发。当 leader 出现故障后系统会自动地选取另一个节点成为 leader,并重新完成数据的同步。客户端在多个节点中,仅需要选择其中的任意一个就可以完成数据的读写,内部的状态及数据协同由 etcd 自身完成。

机器并不是越多越好
etcd 集群是一个Raft Group,没有shared。所以它的极限有两部分,一是单机的容量限制,内存和磁盘;二是网络开销,每次 Raft 操作需要所有节点参与,每一次写操作需要集群中大多数节点将日志落盘成功后,Leader 节点才能修改内部状态机,并将结果返回给客户端。因此节点越多性能越低,所以扩展很多 etcd 节点是没有意义的,一般是 3、5、7, 7 个也足够了。

修复etcd数据
1、停止etcd服务;
2、 cluster_state改为:existing
3、etcdctl member remove xx
4、etcdctl member add xxx –peer-urls=https://x.x.x.x:2380
5、启动etcd服务

节点状态机
保持为三种状态中的一种:Leader、Follower、Candidate
* Leader节点负责所有的请求的处理,并向Follower发送心跳检测
* Follower只响应Leader或Candidate的请求,不处理用户请求,收到请求会转发给leader
* Candidate是一个中间状态,当Follower收不到leader的检测消息,等到选举计时器(election timer)过期,就会把自己的状态设置为Candidate,触发新的选举

带上证书
etcdctl --endpoints https://node1:2379,https://node2:2379,https://node3:2379 endpoint status --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd-server.pem --key=/etc/kubernetes/ssl/etcd-server.key --write-out=table
说明:当其中一个节点宕机后,只有两个数据了

获取etcd里的数据
EXPORT ETCDCTL_API=3
etcdctl get / --keys-only --prefix
etcdctl get /key --prefix

etcd启动:
./etcd \
--name=etcd-0 \
--client-cert-auth=true \
--cert-file=/etc/etcd/ssl/etcd.pem \
--key-file=/etc/etcd/ssl/etcd-key.pem \
--peer-cert-file=/etc/etcd/ssl/etcd.pem \
--peer-key-file=/etc/etcd/ssl/etcd-key.pem \
--trusted-ca-file=/etc/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
--initial-advertise-peer-urls https://100.0.0.0:2380 \
--listen-peer-urls https://100.0.0.0:2380 \
--listen-client-urls https://100.0.0.0:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://100.0.0.0:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster etcd-0=https://100.0.0.0:2380,etcd-1=https://100.0.0.1:2380,etcd-2=https://100.0.0.2:2380 \
--initial-cluster-state new \
--quota-backend-bytes=8589934592 \
--auto-compaction-retention=10 \
--enable-pprof=true \
--data-dir=/var/lib/etcd
配置文件:
–data-dir: 数据目录
–snapshot-count: 最大快照次数,默认10万
–heartbeat-interval: 心跳周期默认 100ms
–election-timeout: 选举超时1s
–max-snapshots: 最大保留快照数,默认 5 个
–quota-backend-bytes: DB 数据大小,比如 10G,50G。
–auto-compaction-retention: 自动压缩,默认为 0 不开启,k8s中 apiserver会开启这个压缩,5 分钟一次。如果你的 etcd 还被其他人使用,这里也可以设置下时间
–enable-pprof: 开启pprof分析
–metrics: 默认为basic模式,extensive代表暴露histogram类型 metric
–log-level: 日志等级。info, warn, error, panic, or fatal

参考资料:
https://www.kubernetes.org.cn/7569.html
http://www.xuyasong.com/?p=1706

posted on 2021-01-12 20:22  星星眨着眼  阅读(426)  评论(0编辑  收藏  举报

导航