云原生项目初探
文章目录背景基本概念CNCF全景图详细解读数据库Vitess: 云原生加强版的MysqlTikv: 云原生版本的KV存储运行时环境Rook:云原生环境下的存储编排系统ContainerD:从 Docker Daemon 剥离的镜像管理和容器执行技术总结备注背景现在云原生越来越重要,成为一个越来越关键的话题,我们大多数人,包括笔者在内对于云原生处于”似懂非懂“的一个状态,最近由于工作需要,也属于自己
文章目录
背景
现在云原生越来越重要,成为一个越来越关键的话题,我们大多数人,包括笔者在内对于云原生处于”似懂非懂“的一个状态,最近由于工作需要,也属于自己工作的一项进行梳理。
基本概念
CNCF:即Cloud Native Computing Foundation。中文直接翻译为”云原生计算基金会“为许多增长最快的开源项目(包括Kubernetes、Prometheus和Envoy)提供了供应商中立的组织.
云原生:云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。云原生既包含技术(微服务,敏捷基础设施),也包含管理(DevOps,持续交付,康威定律,重组等),可以说是一系列云技术、企业管理方法的集合
CNCF全景图
-
应用定义和开发:数据库 和镜像定义
- 数据库: TiKV 和 Vitess
- 镜像定义:HELM
-
编排和组织:主要包括调度、服务发现、服务代理 和Service Mesh
- 调度:Kubernates
- 服务发现: CoreDNS 和 etcd
- 服务代理:envoy
- Service Mesh: LINKERD
-
供给方面:镜像仓库、安全相关
- 镜像仓库:HARBOR
- 安全相关:在安全方面主要有 TUF 和 Open Policy Agent
-
运行时环境:数据存储 & 容器运行时环境
- 数据存储:Rook
- 容器运行时环境:ContainerD
-
可观测分析:监控 & Logging & Traceing
- 监控:Prometheus
- Logging:日志记录是使用fluentd
- Tracing:数据追踪方面是Jaeger
详细解读
由于对于 K8S 、etcd、Prometheus等都是耳熟能详的本次不多做介绍。下面介绍两个个人最感兴趣的议题。
数据库
Vitess: 云原生加强版的Mysql
集MySQL数据库的很多重要特性和NoSQL数据库的可扩展性于一体。其内建拆分分片功能使用户的MySQL数据库集群可以实现无限水平扩展,同时无需为应用添加分片逻辑。
- vtgate: 是一组无状态节点,它们充当用户的前端
- vtctld: 与集群元数据交互的 服务器
- etcd: 存储少量元数据的强一致性存储。Vitess 设计者将此组件设计为插件,它在Zookeeper、etcd和Consul之上有实现。
shared: - vttablet:VTTablet 是 Vitess 组件,负责监视本地 MySQL属于伴生进程。VTablet 可以终止查询,确保 MySQL 实例健康,对查询实施限制并向
Tikv: 云原生版本的KV存储
是一个分布式事务型的键值数据库,提供了满足 ACID 约束的分布式事务接口,并且通过 Raft 协议保证了多副本数据一致性以及高可用。TiKV 作为 TiDB 的存储层,为用户写入 TiDB 的数据提供了持久化以及读写服务,同时还存储了 TiDB 的统计信息数据。
- Region: 将数据按照 key 的范围划分成大致相等的切片(下文统称为 Region),每一个切片会有多个副本(通常是 3 个),其中一个副本是 Leader,提供读写服务。
- Region与RocksDB: 一个Node里面有两个RocksDB 实例:
-
- 数据节点: 一个节点的所有 Region 数据仍然是不加区分地存储于同一个 RocksDB 实例上,这样设计的原因是因为随机 I/O 的性能远低于顺序 I/O,所以 TiKV 使用同一个 RocksDB 实例来存储这些数据,以便不同 Region 的写入可以合并在一次 I/O 中。
-
- BinLog信息: 用于 Raft 协议复制所需要的日志则存储于另一个 RocksDB 实例。
-
- Region与Raft协议: Raft 协议来维持数据一致性,任何写请求都只能在 Leader 上写入,并且需要写入多数副本后(默认配置为 3 副本,即所有请求必须至少写入两个副本成功)才会返回客户端写入成功
- 分裂与合并:超过阈值(144m)则分裂, 数据小于阈值则合并
- Region调度:增加新节点→数据追平→移除老节点
运行时环境
Rook:云原生环境下的存储编排系统
Rook是一款云原生环境下的开源分布式存储编排系统,目前支持 Ceph、NFS、Edegefs、Cassandra、CockroachDB等存储系统。它实现了一个自动管理的、自动扩容的、自动修复的分布式存储服务。Rook 支持自动部署、启动、配置、分配、扩容/缩容、升级、迁移、灾难恢复、监控以及资源管理。
-
Rook Operator:rook的大脑,以deployment形式存在
- 其利用k8s的controller-runtime框架实现了CRD,并进而接受k8s创建资源的请求并创建相关资源(集群,pool,块存储服务,文件存储服务等)。
- Rook Operate监控存储守护进程,来确保存储集群的健康。
- 监听Rook Discovers收集到的存储磁盘设备,并创建相应服务(ceph的话就是osd了)。
-
Rook Discover: 以daemonset形式部署在所有的存储机上的,其检测挂接到存储节点上的存储设备。把符合要求的存储设备记录下来,这样Rook Operate感知到以后就可以基于该存储设备创建相应服务了。
-
Rook Agent: 以daemonset形式部署在所有的存储机上的,其处理所有的存储操作,例如挂卸载存储卷以及格式化文件系统等。
ContainerD:从 Docker Daemon 剥离的镜像管理和容器执行技术
Containerd与Docker的关系:所以containerd是docker的基础组件之一,K8s调用链更短:
- K8S调用Docker:kubelet → docker shim (在 kubelet 进程中) → dockerd → containerd
- K8S调用Containerd:kubelet → cri plugin(在 containerd 进程中) → containerd
总结
云原生是一系列技术,也是管理方法的集合。对于技术的同学而言,CNCF的大量优秀的开源项目中,除了很多项目可以在我们实际中复用以外,更重要的是我们从优秀的项目中汲取设计理念和思路,这才是给个人、团队带来更大价值的东西。
备注
标题 | 链接 |
---|---|
CNCF | https://www.cncf.io/projects |
什么是云原生?这回终于有人讲明白了 | https://juejin.cn/post/6844904197859590151 |
什么是云原生 | http://dockone.io/article/10581 |
云原生的定义 | https://www.huaweicloud.com/zhishi/edu-arc-yys101.html |
京东如何基于Vitess管理大型MySQL实例集群 | https://developer.jdcloud.com/article/1159 |
TiKV简介 | https://docs.pingcap.com/zh/tidb/stable/tikv-overview/ |
vitess架构 | https://vitess.io/docs/overview/architecture/ |
CNCF’s Vitess Scales MySQL with the Help of Kubernetes | https://thenewstack.io/cncf-host-vitess/ |
rook源码分析之一:rook架构解析 | https://zhuanlan.zhihu.com/p/169531996 |
The Design of Rook | https://ilovett.github.io/docs/rook/master/ |
Containerd Github | https://github.com/containerd/containerd |
docker、containerd的关系 | https://blog.csdn.net/x356982611/article/details/106683238 |
更多推荐
所有评论(0)