云容器引擎服务提供了云上高可用、可扩展的Kubernetes集群的搭建,整合了计算(云主机、裸金属)、网络(VPC、经典网络)、存储(云硬盘)等服务,并通过计算可用域实现容器集群的资源独享和严格的多租户隔离功能。通过云容器引擎服务您可以一键式创建Kubernetes容器集群,无需自行搭建Docker和Kubernetes集群,配合故障恢复、自动扩容等能力,使得应用的整个生命周期都可以在云容器引擎内高效完成,简化了用户对集群的管理和对应用的运维。
云容器引擎服务主要由三部分功能组成:集群、镜像仓库和工作负载。
集群(Cluster)是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。集群中各节点区分为控制节点和工作节点两种,控制节点是Cluster的大脑,它的主要职责是调度,即决定将应用调度在哪里运行。工作节点的职责是运行容器应用(Docker)。工作节点由控制节点管理,工作节点负责监控并汇报器应用的状态,同时根据控制节点的要求管理容器应用的生命周期。工作节点可以实现高可用,所有容器应用都会在各上工作节点部署一个副本。
图-1 集群架构图
镜像仓库提供用于存储、管理容器镜像的场所,在镜像仓库中可以轻松地存储、使用、管理镜像,犹如App Store一样,将企业应用使用的镜像统一管理起来。
存储镜像
上传镜像时需选择存放的仓库类型,包括公有仓库和私有仓库。公有仓库用于存放和管理正式发布版本的镜像,由系统管理员管理,系统所有成员均可使用,便于对企业发布级的应用进行管理,降低了各个组织部门的沟通成本。私有仓库用于存放和管理开发版本或内部版本的镜像,组织内成员可以上传自己的镜像并自己进行使用与管理。私有仓库中的镜像可以发布至公有仓库。另外还可以在仓库中创建镜像分类,以便灵活分类存储镜像。
使用镜像
用户可在镜像仓库中选择镜像的某个版本下发至某个集群的某个节点,若需要在系统外使用镜像时还可以将镜像下载至用户本地。云容器引擎不支持镜像部署,如需部署,请在系统中安装“PaaS”组件包,通过应用管理功能部署。
管理镜像
系统支持对镜像进行版本管理,即可以为一个镜像添加多个版本并上传该版本对应的文件。当上传的镜像与已有镜像同名时,系统可自动识别该镜像已有信息,如所属分类、历史版本信息,并将校验新版本号是否与旧版本号重复。另外还支持对镜像进行扫描、编辑、删除。
用于展示与管理Kubernetes集群中的工作负载,支持应用中无状态容器、有状态容器、守护进程集、定时任务、普通任务、容器组的管理维护。旨在为用户提供全面的Kubernetes能力集可视化界面,降低容器管理的技术门槛,提供自动化&一键式管理容器的能力。
工作负载由Pods和Controller组成,Pod和Controller都是Kubernetes中的概念。
Pod:Pod是Kubernetes集群中可运行和部署应用或服务的最小单元,是最基本的执行单元。它封装了一组(一个或多个)容器(即应用),同一Pod中的容器共享存储卷和网络栈。
Controller:控制器。Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod。Controller中定义了Pod的部署特性,比如有几个副本、在什么样的节点上运行等。为了满足不同的业务场景,Kubernetes提供了多种Controller,包括Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等,我们逐一讨论。
无状态Deployment是最常用的Controller,定义一组完全相同的Pod,如Pod名称、副本数、端口等, Deployment控制器会保证集群中的Pod与定义一致,即故障时可以自动恢复。
有状态StatefuleSet能够保证Pod的顺序和唯一性,与Deployment一样基于一组完全相同的容器定义,但不同的是,StatefulSet为每个Pod维护一个具有黏性的身份标志,使他们不随重启改变。
守护进程集DaemonSet用于每个节点最多只运行一个Pod副本的场景,确保全部(或者某些)节点上运行一个Pod的副本。当有节点加入集群时,可以自动的向该节点调度一个Pod副本。当有节点从集群移除时,节点上Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。
普通任务Job用于运行一个或多个Pod,并等待一定数量的Pod成功结束。当Pod成功完成时,Job会进行跟踪,当成功完成的Pod达到指定数量时,Job就成功结束。如果该Pod失败了,Job会重新创建一个Pod。
定时任务CronJob也Job的定时调度版本,用于运行定时、重复任务,例如定时通知、定时备份等场景。
图-2 工作负载架构图
除以上三种功能外,云容器引擎还提供了例如命名空间管理、配置信息管理、Service配置、后端存储配置、自动扩容等功能,全面覆盖Kubernetes集群的日常维护和管理工作,如下图。
应用是以容器的形态运行的,而Kubernetes的最小调度单位是Pod,一个Pod中存在一个或多个容器,因此,对于Kubernetes的管理本质上是对容器的管理。
图-3 Kubernetes能力集
Service是Kubernetes中工作负载提供服务的入口,是一个应用访问另一个应用的方式。Service代表一组Pod,由于Pod IP是随机的,且可能会因重启改变,因此不应该直接访问Pod IP。而集群IP是Service在集群中的具体实现,该IP地址一经创建便不会改变,Kubernetes负责建立和维护Service与Pod的映射关系,因此用户只需要访问Service的IP,无论后端Pod如何变化,对用户都不会有任何影响。
Service提供了三种访问容器服务的方式:
集群外访问:
负载均衡(LoadBalancer):将各节点IP和端口注册到负载均衡中,请求访问时,通过负载均衡选择合适的节点,然后通过Service端口和容器端口访问对应容器。
节点访问(NodePort):请求通过节点IP、节点端口、Service端口和容器端口访问对应容器。
集群内访问(ClusterIP):通过集群IP、Service端口和容器端口访问对应容器。
图-4 Service架构图
存储卷PV(Persistent Volume)、存储卷声明PVC(Persistent Volume Claim)是Kubernetes的存储池管理方案,用于为集群提供存储空间。
PV:后端存储的一块存储空间,云容器引擎的后端存储可以是云服务中的云硬盘,也可以是在集群工作节点上划分的一块存储空间。
PVC:对PV的申请说明,在PVC中指定存储资源的容量大小和访问模式(比如只读)等信息,部署应用时选择该PVC,Kubernetes即会自动为应用挂载符合条件的PV。
配置项(ConfigMap)和密钥(Secret)组成了Kubernetes的配置系统,将配置与容器镜像分离,使配置信息不随容器的销毁或重启而消失或改变,容器创建后可直接加载使用,以实现最大化的可移植性;同时,通过统一的配置中心,也可以集中式的对配置信息进行管理维护。
配置项:用于定义容器服务的一些固定配置信息,如日志存储路径、Pod间依赖关系等。
密钥:用于保存敏感数据,如密钥、证书等。
用于实现应用间的逻辑隔离(节点和存储除外),不同命名空间的应用默认不可以互相访问。
当CPU、内存的使用率达到设置的阀值时,集群节点会自动进行扩容,共同分担访问压力,直至达到所设置的最大节点数。
表-1 云容器引擎与其它服务的关系
服务 |
关系 |
应用管理 |
在应用管理中创建容器应用时选择的独享集群资源即云容器引擎服务创建的集群。 云容器引擎的工作负载功能中展示的是集群自身容器应用的工作负载;如果部署了“PaaS组件包”,还会展示部署在云容器引擎集群中容器应用的工作负载。 |
资源-容器 |
|