云容器引擎服务主要由两部分功能组成:集群和工作负载。
集群(Cluster)是计算、存储和网络资源的集合。Kubernetes利用这些资源运行各种基于容器的应用。集群中各节点区分为控制节点和工作节点两种。
控制节点:控制节点是Cluster的大脑,它的主要职责是调度,即决定将应用调度在哪里运行。
工作节点:工作节点的职责是运行容器应用。工作节点由控制节点管理,工作节点负责监控并汇报容器应用的状态,同时根据控制节点的要求管理容器应用的生命周期。工作节点可以实现高可用,所有容器应用可以在工作节点间漂移,或同时部署多个副本。
用于展示与管理Kubernetes集群中的工作负载,支持应用中无状态容器、有状态容器、守护进程集、定时任务、普通任务、容器组的管理维护。旨在为用户提供全面的Kubernetes能力集可视化界面,降低容器管理的技术门槛,提供自动化&一键式管理容器的能力。
工作负载由Pods和Controller组成,Pod和Controller都是Kubernetes中的概念。
Pod:Pod是Kubernetes集群中可运行和部署应用或服务的最小单元,是最基本的执行单元。它封装了一组(一个或多个)容器(即应用),同一Pod中的容器共享存储卷和网络栈。
Controller:控制器。Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod。Controller中定义了Pod的部署特性,比如有几个副本、在什么样的节点上运行等。为了满足不同的业务场景,Kubernetes提供了多种Controller,包括Deployment、ReplicaSet、DaemonSet、StatefulSet、Job等。
无状态Deployment是最常用的Controller,定义一组完全相同的Pod,如Pod名称、副本数、端口等。 Deployment控制器会保证集群中的Pod与定义一致,即故障时可以自动恢复。
有状态StatefulSet能够保证Pod的顺序和唯一性。与Deployment一样基于一组完全相同的容器定义,但不同的是,StatefulSet为每个Pod维护一个具有黏性的身份标志,使他们不随重启改变。
守护进程集DaemonSet用于每个节点最多只运行一个Pod副本的场景,确保全部(或者某些)节点上运行一个Pod的副本。当有节点加入集群时,可以自动的向该节点调度一个Pod副本。当有节点从集群移除时,节点上Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。
普通任务Job用于运行一个或多个Pod,并等待一定数量的Pod成功结束。当Pod成功完成时,Job会进行跟踪,当成功完成的Pod达到指定数量时,Job就成功结束。如果该Pod失败了,Job会重新创建一个Pod。
定时任务CronJob也是Job的定时调度版本,用于运行定时、重复任务,例如定时通知、定时备份等场景。
除以上功能外,云容器引擎还提供了例如命名空间管理、配置信息管理、Service配置、后端存储配置等功能,全面覆盖Kubernetes集群的日常维护和管理工作,如下图。
应用是以容器的形态运行的,而Kubernetes的最小调度单位是Pod,一个Pod中存在一个或多个容器,因此,对于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端口和容器端口访问对应容器。
存储卷PV(Persistent Volume)、存储类StorageClass、存储卷声明PVC(Persistent Volume Claim)是Kubernetes的存储池管理方案,用于为集群提供存储空间。
PV:PV描述的是持久化存储卷,主要定义的是一个持久化存储在宿主机上的目录,比如一个NFS的挂载目录。通过创建和配置PV,为集群对接存储资源,获取一块存储空间。PV所使用的存储空间可以是云硬盘,也可以是NFS服务器或集群工作节点上划分的一块存储空间。PV由系统管理员创建和维护。
StorageClass:PV的模板,对PV中的部分固定配置项(文件系统、存储类型、存储服务端信息等)说明。创建PVC时可以选择StorageClass,Kubernetes会按照该StorageClass类自动为PVC创建PV。
PVC:对PV的申请说明。在PVC中指定存储资源的容量大小和访问模式(比如只读)等信息,部署应用时选择该PVC,Kubernetes即会自动为应用挂载符合条件的PV。在创建PVC时,既可以选择已有PV,也可以按照StorageClass存储类动态创建PV。
配置项(ConfigMap)和密钥(Secret)组成了Kubernetes的配置系统。将配置与容器镜像分离,使配置信息不随容器的销毁或重启而消失或改变。容器创建后可直接加载使用,以实现最大化的可移植性;同时,通过统一的配置中心,也可以集中式的对配置信息进行管理维护。
配置项:用于定义容器服务的一些固定配置信息,如日志存储路径、Pod间依赖关系等。
密钥:用于保存敏感数据,如密钥、证书等。
用于实现应用间的逻辑隔离(节点和存储除外),不同命名空间的应用默认不可以互相访问。
CCE预置GPU插件,用于实现管理集群以及CCE集群对GPU资源的支持。安装CCE时默认将插件上传至Harbor。创建CCE集群时,可选择默认安装GPU插件。工作负载支持GPU资源分配。GPU资源支持分割,将GPU分割为多个vGPU使用,即支持多个pod使用同一GPU卡。插件主体基于开源软件gpu-manager实现。注: GPU驱动需用户自行安装,当前仅支持NVIDIA T4。