介绍
Kubernetes是为生产环境而设计的容器调度管理系统,对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持。由于Kubernetes在K和s间有8个字母,因此常简称K8s。事实上,随着对K8s系统架构与设计理念的了解深入,我们会发现K8s系统正是处处为运行云原生应用而设计考虑;同时,随着对K8s系统使用的加深和加广,也会有越来越多有关云原生应用的设计模式产生出来,使得基于K8s系统设计和开发生产级的复杂云原生应用变得像启动一个单机版容器服务那样简单易用。
系统架构
一个K8s集群是由etcd(分布式存储)、Minion/node(服务节点)、Master(控制节点)构成的。集群状态都保存在etcd中,Master节点上则运行集群的管理控制模块,多个Master节点以Active/Standby方式运行。Minion节点是真正运行应用容器的主机节点,在每个Minion节点上都会运行一个Kubelet代理,控制该节点上的容器、镜像和存储卷等。
Master中模块
API Server
Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
Scheduler
为新建立的Pod进行节点选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
Controller
- Replication Controller(RC)
保证定义的副本数量与实际运行Pod数量一致。 - Node Controller
管理维护Minion/node,定期检查Node的健康状态,标识出(失效|未失效)的节点。 - Namespace Controller
管理维护Namespace,定期清理无效的Namespace。 - Service Controller
Todo… - EndPoints Controller
Todo… - Service Account Controller
Todo… - Persistent Volume Controller
Todo… - Daemon Set Controller
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。 - Deployment Controller
Todo… - Job Controller
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目 - Pod Autoscaler Controller
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
Minion中模块
Kubelet
负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
Kube proxy
Kube-proxy是K8s集群内部的负载均衡器。它是一个分布式代理服务器,在K8s的每个节点上都有一个;这一设计体现了它的伸缩性优势,需要访问服务的节点越多,提供负载均衡能力的Kube-proxy就越多,高可用节点也随之增多。
Pod
Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod对多容器的支持是K8最基础的设计理念。Pod是K8s集群中所有业务类型的基础,目前K8s中的业务主要可以分为长期伺服型(long-running)、批处理型(batch)、节点后台支撑型(node-daemon)和有状态应用型(stateful application),分别对应控制器为Deployment Controller、Job Controller、Daemon Set Controller、Pet Set Controller