Kubernetes是谷歌开源的容器编排引擎,架构和设计思想来源于谷歌内部使用调度工具——Borg。Borg是谷歌一个久负盛名的的内部使用的大规模集群管理系统,它基于Linux Container(LXC)技术,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。实现资源管理的自动化,以及跨多个数据中心的资源利用率最大化。
Kubernetes是一套完备的容器集群管理引擎,它提供了各种机制和接口来保证应用的快速发布和健康运行,提供了丰富的命令行工具(CLI)和API接口,便于与集群交互,同时Kubernetes提供了多层次的安全防护和隔离机制,多租户应用的支撑能力,应用的全生命周期管理,可扩展的自动资源调度机制,多粒度的资源配额管理能力,多租户支持的统一配置管理组件,多可用区域支撑,Kubernetes提供了一整套完善的容器管理工具,为容器集群管理提供了一站式服务。
Kubernetes架构
Kubernetes的整体架构,如下图所示:
Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- kube-apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
- kube-controller-manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- kube-scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维持容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI),默认的容器运行时为Docker;
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡。
除了核心组件,还有一些推荐的Add-ons:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Heapster提供资源监控
- Dashboard提供 GUI
- Federation提供跨可用区的集群
- Fluentd-elasticsearch提供集群日志采集、存储与查询
下图描述了创建pod的对象出发,其Kubernetes各个组件之间的交互及其工作流的时序图:
通过上图了解到创建pod的对象时,Kubernetes各个组件之间的交互及其工作流,使Kubernetes从业者更能理解Kubernetes各个组件的作用和相互之间怎么交互。