1.架构图
k8s是google开源的容器集群管理系统,在谷歌内部被称borg,在docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
2.组件介绍
2.1 master
master是k8s的大脑,主要负责资源调度、元数据存储、node节点控制、负责维护集群的状态的组件。主要由etcd、scheduler、controller-manager以及api-server4个组件。
2.1.1 etcd
etcd是 k8s 提供的一个高可用的键值数据库,用于保存集群所有的网络配置和资源对象的状态信息,也就是保存了整个集群的状态。数据变更都是通过api server进行的。其他组件通过监听etcd变更处理事件。
2.1.2 scheduler
监听etcd新建pod副本信息,并通过调度算法为该pod选择一个最合适的Node节点。会检索到所有符合该pod要求的Node节点,执行pod调度逻辑。调度成功之后,会将pod信息绑定到目标节点上,同时将信息写入到etcd中。一旦绑定,就由Node上的kubelet接手pod的接下来的生命周期管理。
2.1.3 controller-manager
controller-manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。每个资源一般都对应有一个控制器,这些controller通过api server实时监控各个资源的状态,controller-manager负责管理控制器。
2.1.4 api-server
api-server负责对外提供restful的Kubernetes API服务,其他master组件都通过调用api-server提供的rest接口实现各自的功能,如controller通过api-server实时监控各个资源的状态.
2.2 node
node上运行着master分配的pod,真正负责运行需要部署的服务,每个node上有多个pod、一个kubelet、一个kube-proxy。node包括kubelet、kube-proxy、container runtime3个组件。
2.2.1 kubelet
kubelet 会监视已分配给节点的pod,负责pod的生命周期管理,同时与Master密切协作,维护和管理该Node上面的所有容器,实现集群管理的基本功能。即Node节点通过kubelet与master组件交互,可以理解为kubelet是Master在每个Node节点上面的agent。
2.2.2 kube-proxy
kube-proxy 是实现service的通信与负载均衡机制的重要组件,将流量负载均衡转发到对应请求的服务器上。
2.2.3 Container runtime
Container runtime:容器运行环境,目前Kubernetes支持docker和rkt两种容器,但是一般公司都是使用docker作为生产环境的运行容器。
后续的章节会详细介绍k8s的运行原理以及k8s实战经验~~。