# Kubernetes架构 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes ## Borg简介 Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。 Borg主要由BorgMaster、Borglet、borgcfg和Scheduler组成,如下图所示 ![borg](media/borg.png) * BorgMaster是整个集群的大脑,负责维护整个集群的状态,并将数据持久化到Paxos存储中; * Scheduer负责任务的调度,根据应用的特点将其调度到具体的机器上去; * Borglet负责真正运行任务(在容器中); * borgcfg是Borg的命令行工具,用于跟Borg系统交互,一般通过一个配置文件来提交任务。 ## Kubernetes架构 Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示 ![architecture](media/architecture.png) Kubernetes主要由以下几个核心组件组成: - etcd保存了整个集群的状态; - apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制; - controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等; - scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上; - kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理; - Container runtime负责镜像管理以及Pod和容器的真正运行(CRI); - kube-proxy负责为Service提供cluster内部的服务发现和负载均衡; 除了核心组件,还有一些推荐的Add-ons: - kube-dns负责为整个集群提供DNS服务 - Ingress Controller为服务提供外网入口 - Heapster提供资源监控 - Dashboard提供GUI - Federation提供跨可用区的集群 ![](/images/14791969222306.png) ![](/images/14791969311297.png) ### 分层架构 Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示 ![](/images/14937095836427.jpg) * 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,最内提供插件式应用执行环境 * 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等) * 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等) * 接口层:kubectl命令行工具、客户端SDK以及集群联邦 * 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴 * Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等 * Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等 > 关于分层架构,可以关注下Kubernetes社区正在推进的[Kbernetes architectual roadmap](https://docs.google.com/document/d/1XkjVm4bOeiVkj-Xt1LgoGiqWsBfNozJ51dyI-ljzt1o)和[slide](https://docs.google.com/presentation/d/1GpELyzXOGEPY0Y1ft26yMNV19ROKt8eMN67vDSSHglk/edit)。 ## 参考文档 - [Kubernetes design and architecture](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture.md) - - - - [Kbernetes architectual roadmap](https://docs.google.com/document/d/1XkjVm4bOeiVkj-Xt1LgoGiqWsBfNozJ51dyI-ljzt1o)和[slide](https://docs.google.com/presentation/d/1GpELyzXOGEPY0Y1ft26yMNV19ROKt8eMN67vDSSHglk/edit)