1.引言
在过去,我们在进行程序部署的时候,是直接将环境和程序统一配置部署到主机上,但是这样做容易造成程序与程序之间的混淆,所以为了处理这种问题,我们可以搭建一台不可变的虚拟机镜像,将环境和程序配置部署到虚拟机镜像中,但是虚拟机镜像部署存在体量过于庞大并且不可移动的问题,所以容器技术应运而生,容器技术是基于操作系统级别的虚拟化技术,各个容器与宿主机是隔离的,各个容器之间也是是隔离的,它比虚拟机镜像更容易搭建,并且可以很方便在不同的主机上移动。但是随着分布式、集群等技术在实际应用中越来越多,在实际的生产环境中,我们可能会涉及到多个容器,而这些容器可能会跨越多个服务器主机进行部署,所以一个基于容器技术的分布式架构解决方案应用而生,它就是Kubernetes。
2.Kubernetes的概念
Kubernetes(k8s)是一个基于容器技术的的分布式架构解决方案,是Google开源的容器集群管理系统,Google内部称为Borg,主要用于自动部署、扩展和管理容器化的应用程序,是以Docer为基础的分布式系统架构。Kubernetes可以对分布式系统进行完美的支撑,它具备完善的集群控制能力,内建有智能的负载均衡器,拥有强大的故障发现和自我修复能力。同时还针对开发、部署测试、运维监控等提供了完善的管理工具。
Kubernetes的核心思想是:一切以服务为中心,根据这一核心思想,Kubernetes可以让在其上构建的系统独立运行在物理机、虚拟机群或者云上,所以,Service(服务)是Kubernetes进行分布式集群构建的核心,必须拥有如下关键特征:
拥有一个唯一指定的名称。拥有一个虚拟IP和端口。能够提供某种远程服务能力。可以被映射到提供这种远程服务能力的一组容器应用上。3.Kubernetes的术语
3.1Master
Kubernetes的集群控制节点,负责整个集群的管理和控制,拥有一个etcd服务,用来保存所有资源对象的数据,我们执行的所有控制命令会发给他,他负责具体的执行过程,Master节点通常会独占一个服务器,在其上会运行以上一组关键的进程:
KubernetesAPIServer:提供HttpRest接口的关键服务进程,是Kubernetes中增、删、改、查等操作的唯一入口,是集群控制的入口进程。KubernetesControllerManager:Kubernetes中所有资源对象的自动化控制中心。KubernetesScheduler:负责资源调度的进程。3.2Node
Kubernetes集群中的其他机器被称为Node节点,Node节点可以是一台物理主机,也可以是一台虚拟机,每个Node节点会被Master节点分配一些负载,所以Node节点是Kubernetes集群中工作负载节点,当某个Node节点宕机时,工作负载会被Master自动转移到其他节点。Node节点之上会运行一组关键进程:
kubelet:负责Pod对应容器的创建,启动、停止等任务。kube-proxy:实现KubernetesService通讯与负载均衡机制的重要组件。DockerEngine:Docker引擎,负责容器的创建和管理3.3Pod
Pod是Kurbernetes进行创建、调度和管理的最小单位,Pod运行在Node节点之上,其中包含多个业务容器,这些业务容器之间共享网络命名空间、Ip地址、端口,可以通过localhost进行通讯。Pod有两种类型:普通Pod和静态Pod。
3.4ReplicationController
Kurbernetes用来管理和保证集群中拥有的Pod。
4.Kubernetes的架构
Kubernetes的一切都是基于分布式的,下面这张图就是Kubernetes的架构图
通过这张架构图我们发现Kurbernetes主要由以下几个核心组件组成:
Etcd:保存整个集群的状态。APIServer:提供认证、授权、访问控制、API注册和发现等机制,是资源操作的唯一入口。KurbernetesController:负责维护集群的状态。Scheduler:负责资源的调度。kubelet:负责维护容器的生命周期,同时管理Volume和网络。Container:负责镜像管理以及Pod和容器的真正运行。kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。5.Kubernetes的搭建
5.1准备工作
因为Kubernetes的一切都是基于分布式的,那么,要想搭建Kubernetes就需要准备多台服务器主机,因为条件有限,这里我采用搭建多台虚拟机系统的方式进行,所以需要将虚拟机和镜像系统准备好。
虚拟机:这里的虚拟机我采用的是VMware,当然也可以采用VirtualBox,VMware下载地址如下: