Kubernetes&&etcd

简介

特点优势

etcd是一个强一致性的、分布式 key-value 存储系统,它支持数据可靠性存储和优雅的选举机制。

  • 接口简单:通过标准的HTTP工具读写数据。
  • 数据表示简单:存储key-value数据,可理解为一个有序的map。
  • 安全:支持HTTPS方式的访问。
  • 方便数据订阅:支持watch机制。watch机制指的是应用方可以针对存储在etcd中特定范围的数据创建watch监听器,在watch过程中,当对应数据发生变化时,etcd会根据watch记录追溯到应用方,对变更事件进行同步。
  • 性能:基准压测支持1000w/sec写入

当使用 Kubernetes 声明式 API 部署服务的时候,Kubernetes 的控制器通过 etcd Watch 机制,会实时监听资源变化事件,对比实际状态与期望状态是否一致,并采取协调动作使其一致。
当Kubernetes 更新数据的时候,通过 CAS 机制保证并发场景下的原子更新,并通过对 key 设置 TTL 来存储 Event 事件,提升Kubernetes 集群的可观测性,基于 TTL 特性,Event 事件 key 到期后可自动删除。

架构

系统架构

在这里插入图片描述
etcd集群
通常由3个或者5个节点组成etcd集群。当中会有一个leader节点,用于处理写请求;leader先将数据操作保存成日志形式,并定时的将日志发往其他节点保存。当超过1/2节点成功保存了日志,则leader会将事务最终提交。

etcd的功能模块

  • HTTP Server:用于接收客户端发出的API请求以及其他etcd节点的同步与心跳信息请求。
  • Store:用于处理etc支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
  • Raft强一致算法:是etcd的核心算法,多etcd节点通过Raft协议进行leader选举与数据备份,并保证了每个节点维护的数据都是一致的。
  • WAL: Write ahead log,预写式日志。用于持久化存储。在WAL体系中,所有的数据在提交之前都会进行日志记录。在etcd的持久化存储目录中,有两个子目录。一个是WAL,存储着所有事物的变化记录;另一个是snapshot,用于存储某一个时刻etcd所有目录的数据。通过WAL和snapshot相结合的方式,etcd可以有效的进行数据存储和节点故障恢复等操作。

应用架构

在这里插入图片描述

Etcd 概述及运维实践
etcd watch 机制源码解析——客户端篇

部署

集群

常用命令

集群管理

# 检验etcd集群是否存在
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.4-0 etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt --key /etc/kubernetes/pki/etcd/peer.key --cacert /etc/kubernetes/pki/etcd/ca.crt member list

# 检验etcd集群是否正常
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.4-0 etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt --key /etc/kubernetes/pki/etcd/peer.key --cacert /etc/kubernetes/pki/etcd/ca.crt --endpoints=https://192.168.0.143:2379,https://192.168.0.204:2379,https://192.168.0.78:2379 endpoint health --cluster

# 以表格形式展示
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.4-0 etcdctl -w table --cert /etc/kubernetes/pki/etcd/peer.crt --key /etc/kubernetes/pki/etcd/peer.key --cacert /etc/kubernetes/pki/etcd/ca.crt --endpoints=https://192.168.0.143:2379,https://192.168.0.204:2379,https://192.168.0.78:2379 endpoint status --cluster

# 告警列表
alarm list
# 解除所有告警
alarm disarm
# 碎片整理
defrag
# 创建快照进行备份
snapshot save snapshot.db
# 快照恢复
snapshot restore
# 快照状态
snapshot status

Etcd备份与还原

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /srv/data/etcd-snapshot.d
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore /srv/data/etcd-snapshot.d

增删改查

# 增 & 改
put foo bar
# 查
get foo
# 根据前缀查询
get --prefix "/demo"
# 查询所有 keys
get --prefix "" --keys-only
# 删
del foo
# 事务,多个操作合并为一个事务
txn <<<'mod("key1") > "0"

put key1 "overwrote-key1"

put key1 "created-key1"
put key2 "some extra key"

'
# 压缩
compaction 1234
# 监听
watch foo

常见问题

Etcd 磁盘空间爆满解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值