云容器实例(Cloud Container Instance, CCI)服务提供 Serverless Container(无服务器容器)引擎,让您无需创建和管理服务器集群即可直接运行容器。

Serverless 是一种架构理念,是指不用创建和管理服务器、不用担心服务器的运行状态(服务器是否在工作等),只需动态申请应用需要的资源,把服务器留给专门的维护人员管理和维护,进而专注于应用开发,提升应用开发效率、节约企业IT成本。传统上使用 Kubernetes 运行容器,首先需要创建运行容器的 Kubernetes 服务器集群,然后再创建容器负载。

云容器实例的 Serverless Container 就是从使用角度,无需创建、管理 Kubernetes 集群,也就是从使用的角度看不见服务器(Serverless),直接通过控制台、kubectl、Kubernetes API 创建和使用容器负载,且只需为容器所使用的资源付费。

产品功能
1. 一站式容器生命周期管理
    使用云容器实例,您无需创建和管理服务器集群即可直接运行容器。您可以通过控制台、kubectl、Kubernetes API 创建和使用容器负载,且只需为容器所使用的资源付费。

2. 支持多种类型计算资源
    云容器实例提供了多种类型计算资源运行容器,包括CPU,GPU(提供NVIDIA Tesla V100、NVIDIA Tesla P4显卡)、Ascend芯片(华为自研AI芯片)。

3. 支持多种网络访问方式
    云容器实例提供了丰富的网络访问方式,支持四层、七层负载均衡,满足不同场景下的访问诉求。

4. 支持多种持久化存储卷
    云容器实例支持将数据存储在华为云的云存储上,当前支持的云存储包括:云硬盘存储卷(EVS)、文件存储卷(SFS)、对象存储卷(OBS)和极速文件存储卷(SFS Turbo)。

5. 支持极速弹性扩缩容
    云容器实例支持用户自定义弹性伸缩策略,且能在1秒内实现弹性扩缩容,并可以自由组合多种弹性策略以应对业务高峰期的突发流量浪涌。

6. 全方位容器状态监控
    云容器实例支持监控容器运行的资源使用率,包括CPU、内存、GPU和显存的使用率,方便您实时掌控容器运行的状态。

7. 支持专属容器实例
    云容器实例提供专属容器实例,基于高性能物理服务器运行Kata容器,实现虚机级别安全隔离,同时性能无损耗。专属容器实例租户独占物理服务器,支持多部门业务隔离。服务器的升级和维护工作由华为云承担,您只需要关注在自身业务,您可以通过售前咨询开通专属容器实例。
    
产品架构
云容器实例提供 Serverless Container 服务,拥有多个异构的 Kubernetes 集群,并集成网络、存储服务,让您方便的通过控制台、kubectl、Kubernetes API 创建和使用容器负载。
产品架构

如何通过云服务器搭建k8s k8s搭建容器云_服务器

如何通过云服务器搭建k8s k8s搭建容器云_服务器

1. 基于华为云底层网络和存储服务(EVS、OBS、VPC、、SFS、ELB、NAT等),提供丰富的网络和存储功能。
2. 提供高性能、异构的基础设施(x86服务器、GPU加速型服务器、Ascend加速型服务器),容器直接运行在物理服务器上。
3. 使用Kata容器提供虚拟机级别的安全隔离,结合自有硬件虚拟化加速技术,提供高性能安全容器。
4. 多集群统一管理,容器负载统一调度,使用上无需感知集群存在。
5. 基于Kubernetes的负载模型提供负载快速部署、弹性负载均衡、弹性扩缩容、蓝绿发布等重要能力。

产品优势
1. 高性能AI容器
    在AI(Artificial Intelligence,人工智能)领域,目前对算力的需求越来越高,AI领域对GPU的使用已经从单机多卡、多机多卡演进到AI专用芯片。云容器实例针对这些场景做深度优化,提供高性能AI容器。

    以容器的方式支持GPU以及专用Ascend AI芯片,让GPU和Ascend芯片的异构算力服务于大规模AI训练。
    借助自身硬件优势,采用硬件感知的NUMA(Non-uniform memory access)裸金属架构,IB(InfiniBand,无限带宽)高速网络进行深度的软硬件全栈优化,在资源池组网上保证大带宽,满足分布式训练的海量参数同步要求。
    在Kubernetes调度上,针对AI场景进行深度优化,利用排队、亲和性、Gang Scheduling,对接AI分布式训练框架,使能高效的AI分布式训练,大幅度提升了计算效率。

2. 随启随用
    业界领先的 Serverless Container 架构,用户无需创建 Kubernetes 服务器集群,直接使用控制台、kubectl、Kubernetes API创建容器。

3. 极速弹性
    云容器实例的Kubernetes集群是提前创建好的,且从单一用户角度看资源“无限大”,所以能够提供容器秒极弹性伸缩能力,让您能够轻松应对业务快速变化,稳健保障业务SLA。

4. 按需秒级计费
    根据实际使用的资源数量,按需按秒计费,避免业务不活跃时段的费用开销,降低用户成本。

5. 完全开放的原生平台
    紧跟 Kubernetes 和 Docker 社区,迅速同步最新版本
    原生支持 Kubernetes API

5. 高安全
    云容器实例同时具备容器级别的启动速度和虚拟机级别的安全隔离能力,提供更好的容器体验。

    原生支持 Kata Container,兼容 Docker 生态
    基于 Kata 的内核虚拟化技术,为您全面的安全隔离与防护
    自有硬件虚拟化加速技术,让您获得更高性能的安全容器

如何通过云服务器搭建k8s k8s搭建容器云_华为_03

使用场景
1. 大数据、AI计算
    当前主流的大数据、AI训练和推理等应用(如Tensorflow、Caffe)均采用容器化方式运行,并需要大量GPU、高性能网络和存储等硬件加速能力,并且都是任务型计算,需要快速申请大量资源,计算任务完成后快速释放。

    云容器实例提供如下特性,能够很好的支持这类场景。

    1. 计算加速:提供GPU/Ascend等异构芯片加速能力
    2. 大规模网络容器实例调度:支持大规模、高并发的容器创建和管理
    3. 随启随用、按需付费:容器按需启动,按资源规格和使用时长付费
图1 大数据AI计算场景

如何通过云服务器搭建k8s k8s搭建容器云_Pod_04

2. 生物基因、药物研发等科学计算
    生物基因、药品研发等领域需要高性能、密集型计算,同时对成本较敏感,需要低成本、免运维的计算平台。科学计算一般都是任务型计算,快速申请大量资源,完成后快速释放。

    云容器实例提供如下特性,能够很好的支持这类场景。
    1. 高性能计算:提供高性能计算、网络和高I/O存储,满足密集计算的诉求
    2. 极速弹性:秒级资源准备与弹性,减少计算过程中的资源处理环节消耗
    3. 免运维:无需感知集群和服务器,大幅简化运维工作、降低运维成本
    4. 随启随用、按需付费:容器按需启动,按资源规格和使用时长付费
图2 科学计算

如何通过云服务器搭建k8s k8s搭建容器云_服务器_05

3. DevOps持续交付
    软件开发型企业,希望构建从代码提交到应用部署的DevOps完整流程,提高企业应用迭代效率。DevOps流程一般都是任务计算型,如企业CI/CD(持续集成/持续发布)流程自动化,需要快速申请资源,完成后快速释放。

    云容器实例提供如下特性,能够很好的支持这类场景。
    1. 流程自动化:无需创建和维护集群,实现从CI/CD的全流程自动化
    2. 环境一致性:以容器镜像交付,可以无差别地从开发环境迁移到生产环境
    3. 随启随用、按需付费:容器按需启动,按资源规格和使用时长付费
图3 DevOps持续交付

如何通过云服务器搭建k8s k8s搭建容器云_如何通过云服务器搭建k8s_06


4. 高弹性业务

    业务波峰波谷较明显的业务,日常流量稳定,高峰期又需要快速扩展资源,并对成本有一定诉求,如视频直播、媒体资讯、电商、在线教育等应用。

    云容器实例提供如下特性,能够很好的支持这类场景。

    1. 快速弹性伸缩:业务高峰时,业务能够快速从CCE弹性扩展到CCI,保障业务稳定运行
    2. 低成本灵活计费:业务平稳期在CCE上包周期计费,节省成本;高峰期弹性扩容到CCI上,按需计费,高峰期结束后又可以快速释放资源,降低成本
图4 弹性扩展

如何通过云服务器搭建k8s k8s搭建容器云_cci_07

基本概念:
    云容器实例基于Kubernetes的负载模型增强了容器安全隔离、负载快速部署、弹性负载均衡、弹性扩缩容、蓝绿发布等重要能力。
    云容器实例提供Kubernetes原生API,支持使用kubectl,且提供图形化控制台,让您能够拥有完整的端到端使用体验,使用云容器实例    前,建议您先了解相关的基本概念。

    1. 镜像(Image)
    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

    2. 容器(Container)

    镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    

    3. 命名空间(Namespace)

    命名空间是一种在多个用户之间划分资源的方法。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。

    

    4. Pod

    Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器、存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。

    图1 Pod

    

如何通过云服务器搭建k8s k8s搭建容器云_服务器_08


    Pod使用主要分为两种方式:    

    (1)Pod中运行一个容器。这是Kubernetes最常见的用法,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。

    (1)Pod中运行多个需要耦合在一起工作、需要共享资源的容器。

    实际使用中很少直接创建Pod,而是使用Kubernetes中称为Controller的抽象层来管理Pod实例,例如Deployment。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力。通常,Controller会使用Pod Template来创建相应的Pod。

    

    Pod的详细信息请参见https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/。

    

    5. 标签

    Label(标签)是一组附加在对象上的键值对,用来传递用户定义的属性。

    标签常用来从一组对象中选取符合条件的对象,这也是Kubernates中目前为止最重要的节点分组方法。    

    比如,你可能创建了一个"tier"和“app”标签,通过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用Label(tier=backend, app=myapp)标记后台Pod。然后可以使用Selectors选择带有特定Label的Pod,并且将Service或者Deployment应用到上面。    

    Label的详细信息请参见https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/。

    

    图2 使用Label组织的Pod

    

如何通过云服务器搭建k8s k8s搭建容器云_华为_09


    7. 无状态负载(Deployment)

    Deployment是Pod Controller的一种。    

    一个Deployment可以包含一个或多个Pod,每个Pod的角色相同,所以系统会自动为Deployment的多个Pod分发请求。Deployment中的所有Pod共享存储卷。    

    使用Deployment时,您只需要在Deployment中描述您想要的目标状态是什么,Deployment就会帮您将Pod的状态改变到目标状态。    

    Deployment的详细信息请参见https://kubernetes.io/docs/concepts/workloads/controllers/deployment/。

    

    8. 短时任务(Job)

    Job是用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。

    Job的这种用完即停止的特性特别适合一次性任务,比如持续集成,配合云容器实例按秒计费,真正意义上做到按需使用、按需付费。    

    Job的详细信息请参见https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/。

    

    9. 定时任务(CronJob)

    定时任务是基于时间控制的短时任务(Job),类似于Linux系统的crontab文件中的一行,在指定的时间周期运行指定的短时任务。    

    CronJob的详细信息请参见https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/。

    

    10. 服务(Service)

    Pod是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。通过Pod Controller能够动态地创建和销毁Pod(例如,需要进行扩缩容,或者执行滚动升级)。每个Pod都会获取它自己的IP地址,但这些IP地址不总是稳定可依赖的。 这会导致一个问题:如果一组 Pod(称为 backend)为其它 Pod (称为 frontend)提供服务,那么那些frontend该如何发现,并连接到这组Pod中的哪些backend呢?    

    Service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略(通常称为微服务)。 这一组Pod能够被Service访问到,通常是通过Label Selector实现的。    

    举个例子,考虑一个图片处理backend,它运行了3个Pod副本。这些副本是可互换的(frontend不需要关心它们调用了哪个backend副本)。 然而组成这一组backend的Pod实际上可能会发生变化,frontend不应该也没必要知道,而且也不需要跟踪这一组backend的状态。Service定义的抽象就是用来解耦这种关联。    

    Service的详细信息请参见https://kubernetes.io/docs/concepts/services-networking/service/。

    

    11. Ingress

    Service和Pod仅可在内部网络中通过IP地址访问,外部的请求需要通过负载均衡转发到Service在Node上暴露的NodePort上,然后再由kube-proxy将其转发给相关的Pod。    

    Ingress是授权入站连接到达集群服务的规则集合。您可以给Ingress配置外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。    

    Ingress的详细介绍请参见https://kubernetes.io/docs/concepts/services-networking/ingress/。

    

    12. PVC

    PersistentVolumeClaim(PVC)是用户存储的请求。 它类似于Pod,Pod申请CPU和内存,PVC申请存储资源。在云容器实例中,你可以通过PVC申请EVS、SFS等存储资源。    

    PVC的详细信息请参见https://kubernetes.io/docs/concepts/storage/persistent-volumes/。

    

    13. ConfigMap

    ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap跟Secret很类似,但它可以更方便地处理不包含敏感信息的字符串。    

    ConfigMap的详细信息请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/。

    

    14. Secret

    Secret是Kubernetes中一种加密存储的资源对象,用户可以将认证信息、证书、私钥等保存在密钥中,在容器启动时以环境变量等方式加载到容器中。    

    Secret的详细信息请参见https://kubernetes.io/docs/concepts/configuration/secret/。