应用程序部署演进引出Kubernetes
传统部署
–应用程序直接部署到物理服务器上
优点:部署简单,不使用相关技术
缺点:不能给应用程序定义资源使用边界,程序的计算资源难分配合理,程序之间容易有干扰
虚拟化部署
–物理服务器上安装并运行多个虚拟机,每个虚拟机使用独立的环境
优点:程序不会相互影响,保证了一定的安全性
缺点:增加了操作系统,浪费了部分资源
容器化部署
–与虚拟化类似,但是共享了操作系统
优点:每个容器中拥有独立的文件系统、CPU、内存、进程空间等;程序运行所需的资源被容器包装,并和底层基础架构解耦;容器化的应用程序可以跨云服务商及跨Linux系统发行版本进行部署。
不足:容器异常退出后,如何让另一个容器补上,消除业务影响;当业务量变化,如何保证业务稳定不浪费资源,比如超负荷时,添加容器支撑,业务低谷时,收回部分容器。
容器编排
–用来对容器进行管理与排列
其中当前最流行的是Kubernetes(Google研发)
Kubernetes核心
kubernetes组件
一个kubernetes集群主要由控制节点(master)与工作节点(node)组成,每个节点上需要安装不同的组件
master控制节点:负责整个集群的管理
- ApiServer:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
- Scheduler:负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
- ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
- Etcd:负责存储集群中各种资源对象的信息
node工作节点:集群的数据平面,负责为容器提供运行环境
- kubelet:负责维护容器的生命周期,既通过控制docker,创建、更新、销毁容器
- Docker:负责节点上容器的各种操作
- kubeProxy:在node节点对外接收客户端请求
kubernetes组件概念详情
Pod
Pod是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能通过localhost来发现和通信。另外这些容器可以共享一块存储空间。在kubernetes中创建、调度和管理的最小单位是Pod,而不是容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式。
Replication Controller as RC
Replication Controller用来管理控制Pod副本,确保任何时候kubernetes集群中有指定数量的Pod副本在运行。如果少于指定数量副本,RC回启动新的Pod副本,反之会杀死多余副本以保证数量不变,另外RC是弹性伸缩、滚动升级的实现核心。
Service
Service是真实应用服务的抽象,定义了Pod的逻辑集合和访问Pod集合的策略。Service将代理Pod,对外表现为一个单一访问接口,外部不需要了解后端Pod运行机制。Service提供了一套简化的服务代理和发现机制。
Label
Label是用于区分Pod、Service、RC的键值对,实际上kubernetes中任意API对象都是通过label进行标示。每个API对象都可以有多个label,但是每个label的key只能对应一个value。label是service和RC运行的基础,他们通过label来关联Pod。相对于强绑定模型,这是非常和谐的耦合关系。
Node
kubernetes属于主从分布式集群架构,kubernetes Node 运行管理容器。Node操作Kubernetes的操作单元,用来分配Pod。Pod最终运行在Node上,Node是Pod的宿主机。
kube-apiserver
作为kubernetes系统的入口,其封装了核心对象的增删改查操作,以REST API接口方式提供给外部客户和内部组件调用,它维护的REST对象将持久化到ETCD中。
kube-scheduler
负责集群的资源调度,为新建的Pod分配机器
kube-controller-manager
负责执行各个控制器,目前已经实现很多控制器来保证kubernetes的正常运行(主要有RC、Node、service、deployment等)
kubelet
负责管控容器,kubelet会从kubernetes API Server接收Pod的创建请求,启动或停止容器,监控容器运行状态并汇报给kubernetes API Server。
kubernetes proxy
负责为Pod创建代理服务,kubenetes proxy会从kubernetes API server获取所有的service,并根据service信息创建代理服务,实现service到Pod的请求和路由转发,从而实现kubernetes层级的虚拟转发。