Etcd 概述及运维实践
Etcd 概述
什么是 Etcd ?
Etcd 是 CoreOS 团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft
协议作为一致性算法,Etcd基于 Go 语言实现。
名字由来,它源于两个方面,unix的“/etc”文件夹和分布式系统(“D”istribute system)的D,组合在一起表示etcd是用于存储分布式配置的信息存储服务。
Etcd 是 CoreOS 团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft
协议作为一致性算法,Etcd基于 Go 语言实现。
名字由来,它源于两个方面,unix的“/etc”文件夹和分布式系统(“D”istribute system)的D,组合在一起表示etcd是用于存储分布式配置的信息存储服务。
这里的 kube on kube , 是指建立 K8s 元集群,纳管其他业务 K8s 集群,通过声明式 API 管理集群的创建、增删节点等。
参考 https://github.com/kubean-io/kubean 源码进行编写,进行了裁剪。感谢 DaoCloud 开源! 👍👍
随着容器化覆盖率的逐步增加,越来越多的业务迁移到 K8s 集群中, 考虑到同城双活、不同业务的复杂性以及耦合度,需要部署维护多套 K8s 集群,如何高效、可靠的在数据中心管理多个 k8s 集群是我们面临的关键挑战。
译自:https://blog.taboola.com/our-journey-of-virtualization-change/
我们最初采用oVirt作为我们的虚拟化平台,事实证明它是一个很好的产品,具有几个显着的优势。其开源性质使我们能够利用广泛的功能和定制选项。
然而,尽管它具有优势,我们还是遇到了一些缺点和问题,迫使我们寻求更好的虚拟化解决方案。两个主要缺点是它没有任何可用的 DFS 和库存管理问题。此外,我们偶尔会遇到 oVirt 的性能问题和稳定性问题。一些资源密集型工作负载出现延迟或意外行为,影响了虚拟化环境的整体性能。随着我们的基础设施的发展,这些问题变得更加明显,导致生产力和用户满意度下降。
集群内网络架构为,基于Calico BGP 的路由模式,直接与交互机建联。
影响范围
线下环境 node-xx 物理机上 Pod 网络不可用
影响时间线(2023-07-23 22:09 ~ 22:14)
[22:13] 收到网工反馈 Peer Down
出故障时,就知道是谁在裸泳 🙃
K8s 投产使用,备份是保命手段,必须要上,建议做一个 checklist,巡检通过,集群才能对外提供服务,比如,这样👇
保障 Pod 高可用分为以下几个方面
该应用通过虚拟机和容器混合部署,上线前压测了虚拟机上的应用性能,理论上流量高峰能抗住。
[xx:xx] 流量突增,接口大量超时
[xx:xx] 限流
[xx:xx] 重启,虚拟机能重启成功,容器重启失败,容器流量摘除,暂时恢复
[xx:xx] 扩容, 容器虚拟机均扩容
[xx:xx] 两台容器异常,流量摘除
👉 Nodejs 应用 从虚拟机迁移到容器 产生的性能问题
[xx:xx] 开发收到业务反馈接口响应超时
[xx:xx] 开发&SRE&中间件 联合排查代码、网关、底层网络问题,无果
[xx:xx] 测试环境复现排查
[xx:xx] 利用差异法、排除法和经验解决,先上线
[xx:xx] 根因定位
1)接口偶发性超时
👉 作为一名SRE,在运维云原生过程中的实践总结、沉淀,以便自己回顾和他人查阅,希望能帮助你在云原生领域的平稳落地。
一句话概括:在保证稳定性的前提下,降本增效
目标拆解:
保障稳定性
节约成本
提高效率(平台能力建设)
总结为下图,拿走不谢😏
说明: 本文主要以 Spring Cloud 应用举例
绝大数事故发生在应用上下线发布阶段,所以要尽可能避免发布过程中由于应用自身代码问题对用户造成的影响。
业界发布规范: