一、Kubernetes是什么
Kubernetes是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的重要成果。确切地说,Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本。
Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
二、Kubernetes架构
1、架构图
2、节点说明
- master节点
Master是Kubernetes Cluster的大脑,用来管理和调度资源
- work节点
work是Pod运行的地方,Kubernetes支持Docker、rkt等容器Runtime,用来提供资源,work节点提供的资源单位为POD,同时master节点也可以是work节点
3、master节点组件
- etcd
etcd负责保存Kubernetes Cluster的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快速地通知Kubernetes相关组件。
- API server
API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。API Server是Kubernetes Cluster的前端接口,各种客户端工具(CLI或UI)以及Kubernetes其他组件可以通过它管理Cluster的各种资源。
- Scheduler
Scheduler负责决定将Pod放在哪个Node上运行。Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
- Controller Manager
Controller Manager负责管理Cluster各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括replication controller、endpoints controller、namespace controller、serviceaccounts controller等。
不同的controller管理不同的资源。例如,replication controller管理Deployment、StatefulSet、DaemonSet的生命周期,namespace controller管理Namespace资源。
4、Work节点组件
- kubelet
kubelet是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态。
- Container Runtime
kubelet不直接管理容器资源,委托给Container Runtime进行管理。负责对容器的启动和关闭,如果本地没有对应的镜像,则会到指定的docker仓库去拉取对应的镜像。
- kube-proxy
service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。service接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。
每个Node都会运行kube-proxy服务,它负责将访问service的TCP/UPD数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。
5、发布流程样例
1)、kubectl调用Api server创建一个ReplicaSet,Api Server会将ReplicaSet存储到etcd中。
2)、Controller Manager会监听ReplicaSet的创建或者修改,对于上一步创建的ReplicaSet,Controller Manager会接收到一个通知。
3)、Controller Manager会比较现有的pods和预期的pods是否一致,如果不一致,就会在Api Server中创建预期的pods资源。
4)、Scheduler组件监听到需要创建新的pods,运行调度算法选择空闲的work节点,并通过Api Server更新pod的定义,指派pod到具体要发布的work节点上。
5)、Api Server通知对应work节点上的kubelet。
6)、kubelet会将创建pod的工作委托给本节点上的Container Runtime去创建和运行对应的pod容器。
7)、Container Runtime开始下载镜像并运行容器,kubelet也会开始监控容器的运行情况。
三、K8S总体架构
四、总结
本篇文章主要说明了K8S的总体架构和master&work节点上面各个组件的作用。入下图所示