架构
Kubernetes+Docker方案用于容器云场景。
Linux container技术是通过与主机共用内核,结合内核的cgroup和namespace实现的一种虚拟化技术,极大的减少了对主机资源的占用且具有较快的启动速度。Docker就是一个Linux container引擎技术,实现应用的打包、快速部署等。Docker通过Linux Container技术将App变成一个标准化的、可移植的、自管理的组件,实现了应用的build once,run everywhere。Docker技术特点是:应用快速发布、应用部署和扩容简单、更高的应用密度、应用管理更简单。
Kubernetes将Docker容器宿主机组成集群,统一进行资源调度,自动管理容器生命周期,提供跨节点服务发现和负载均衡;更好的支持微服务理念,划分、细分服务之间的边界,比如Label、Pod等概念的引入。
Kubernetes集群由Master和Node组成,其架构轻量,迁移方便,部署快捷,插件化,可扩展。架构图如图1所示。
名称 |
说明 |
---|---|
Pod |
Pod是能够创建、调度和管理的最小部署单元,是一组容器的集合,而不是单独的应用容器。Pod对应于合设在一起的一组应用,它们运行在一个共享的应用上下文中,同一个Pod里的容器共享同一个网络命名空间,IP地址及端口空间和卷。从生命周期来说,Pod是短暂的而不是长久的应用。Pod被调度到节点,保持在这个节点上直到被销毁。 |
API服务器 |
负责暴露Kubernetes API,不管是kubectl还是API调用来操作Kubernetes集群各种资源,都是通过kube-apiserver提供的接口进行操作的。 |
kube-控制器和管理器 |
负责整个Kubernetes的管理工作,保证集群中各种资源的状态处于期望状态,当监测到集群中某个资源状态不正常时,管理控制器会触发对应的调度操作,主要由以下几部分组成:
|
调度器 |
负责Kubernetes集群的具体调度工作,接收来自于管理控制器(kube-controller-manager)触发的调度操作请求,然后根据请求规格、调度约束、整体资源情况等因素进行调度计算,最后将任务发送到目标节点的kubelet组件执行。 |
etcd |
etcd是一款用于共享配置和服务发现的高效KV存储系统,具有分布式、强一致性等特点。etcd用于存储Kubernetes所有需要持久化的数据。 |
kubelet |
kubelet是Node节点上最重要的核心组件,负责Kubernetes集群具体的计算任务,具体功能包括:
|
Kube-proxy |
kube-proxy主要负责Service到Pod实例的请求转发及负载均衡的规则管理。 |