文章目录
- 1. 发展史
- 2. 架构图对比
- 2.1 Borg的架构图
- 2.2 Kubernetes的架构图
- 3. 总结
1. 发展史
在云计算领域有几个很常见的词汇:IaaS、PaaS、SaaS。
- IaaS就是基础平台即服务,国内有阿里云等;
- PaaS是平台即服务,在早些时候新浪云SAE较为有名;
- SaaS就是软件即服务,最大的Office厂商MS的Office365就是一个很好的代表。
在最开始的时候PaaS基本就是人肉运维,慢慢的又出现了一系列的自动化工具,再后来专门做PaaS的一家公司创造了Docker。
Docker变成了PaaS的一个标准,但是随着容器化的发展也出现了一系列的问题。容器化后容器的映射关系变得异常艰难,而且这仅仅是容器化发展的一个小小的问题。
那么随着容器化的步伐,衍生出了一些列的资源管理器,最开始是Apache Mesos
,Mesos由加州的伯克利大学研发出来,随后被推特选中,大规模的在推特盛行。
在2019年5月,特推在旧金山开展了技术发布会,在该会上产品负责人宣布推特以后全部使用Kubernetes。
第二款资源管理软件是Docker自家推出的Docker Swarm平台。
Docker Swarm是一个非常轻量的资源管理平台。但是Swarm功能较为简单,而且国内云厂商阿里云在2019年7月宣布在选择资源管理框架的时候不支持Swarm
,默认Kubernetes。Google其实在Kubernetes诞生10年前就使用了容器化基础架构Borg
。
Google为了在资源管理器上占有优势,就使用Golang
开发了Kubernetes
。
2. 架构图对比
2.1 Borg的架构图
2.2 Kubernetes的架构图
- etcd:提供分布式数据存储的数据库吧,用于持久化存储k8s集群的配置和状态
- kube-apiserver:api service提供了http rest接口,是整个集群的入口,K8s其它组件之间不直接通信,而是通过API server通信的。(只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据)
- kube-scheduler:scheduler负责资源的调度
- kube-controller-manager:整个集群的管理控制中心,此组件里面是由多个控制器组成的
- node机器组件:
- kube-proxy:用来负载均衡网络流量
- kubelet:用来管理node节点机上的容器
- docker:运行项目镜像容器的组件
etcd是一个可信赖的分布式键值存储服务
,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转;同时,etcd是采用go语言编写的kv键值对数据库
,它分为两个版本,V3
版本和V2
版本,在KubernetesV1.11版本以及之前采用的是V2版本,之后采用的是V3版本,V2版本会将所有数据写入内存
,而V3版本会引入一个本地数据卷存储
,也就意味着关机不会丢失数据,可以从本地磁盘恢复;APIServer
所有服务访问的统一入口。Replication Controller
负责维持期望的副本数目。Scheduler
负责接收任务,选择合适的节点进行任务的分配。Kubelet
负责与Docker的容器引擎交互,实现容器的生命周期管理。Kube Proxy
负责写入规则到 iptables 或者 ipvs 实现服务映射访问。- 其他插件:
7.1 .CoreDNS
可以为集群中的SVC创建一个域名为IP的对应关系解析;
7.2Dashborad
给K8S集群提供一个B/S访问体系。
7.3Ingress Controller
实现七层代理,Kubernetes官方只能实现四层代理。
7.4Fedetation
提供一个可以跨集群中心的多Kubernetes统一管理功能。
7.5Prometheus
和ELK
提供Kubernetes集群监控和日志统一分析接入平台。
etcd
内部结构是采用Http协议构建的服务,其实K8s也是采用Http协议进行的cs结构开发;
为什么这样做呢?
是因为Http协议天生支持get,put等操作方式,包括授权认证,所以没必须去采用标准的tcp协议;raft
是一些读写信息,为了防止这些信息被损坏,于是有了WAL
,这是入写日志,也就是如果你想对里面的数据进行更改的话,你先生成一个日志,我先存一下,并且会定时的对这些日志进行完整备份,也就完整加临时,备份完之后会出现一个两个等子版本,到达一定量再转换成大版本,然后再子子子,这样的好处是防止增量备份太多,太费事费时,并且还会实时的将这些日志和数据写入磁盘持久化
3. 总结
-
MESOS
Apache旗下的分布式资源管理框架,在2019年5月,由它的最大使用者Twitter在旧金山技术发布会上宣布不再使用,改使用Kubernetes; -
Docker Swarm
为docker而生的资源管理器,但是在2019年7月阿里云宣布,Docker Swarm的集群框架从阿里云选项剔除,默认Kubernetes; -
Borg
为谷歌内部使用十多年,但是不开源,于是让公司几名工程师,使用go语言,将Borg翻写出了Kubernetes
,为外界使用; - 选择使用Kubernetes的理由:
- 轻量级 ;
像java等,是解释型语言,运行的时候占用内存大,占用资源大,而go语言被誉为现代的C语言,占用资源小,可以操作进程管理 - 开源;
- 弹性伸缩;
- 负载均衡 : IPVS
高可用集群副本数据最好是 大于等于3的奇数个