弹性容器实例 (QCI)
青云弹性容器实例 (QingCloud Elastic Container Instance) 集成了云平台云服务器,存储以及网络等资源,在云平台上只需要完成指定容器镜像,指定存储卷,配置网络和指定基本信息四步,便可快速地创建 QCI ,以容器为单位支持容器自动巡检和修复。
创建 QCI
借助于青云云平台,您可以随时方便地创建和管理 QCI 实例。支持在线更新,同时具有容器健康状态检查功能,即当系统发现某个 QCI 实例内部某些容器状态异常(比如异常退出),相关容器状态将在相关 QCI 实例详情页面展示出来,并且系统将根据实例重启策略来决定是否重启整个 QCI 实例, 另外您还可以借助 QCI 详情页面提供的监控功能来帮助您更好地管理集群。QCI 既可以运行在VPC网络中,也可以借助于基础网络,通过绑定公网 IP 的方式暴露在公网当中。借助青云提供的硬盘可以将需要持久化存储的数据存放在硬盘当中。您可以根据业务需求灵活地选择相应的网络模式和硬盘挂载策略。
准备工作
下面将以 VPC 网络模式为例,说明如何创建 QCI 实例。
网络
通常可以将 QCI 实例运行在受管私有网络中。若还未创建 VPC 和私有网络,可以参考文档创建 VPC 网络。
硬盘
根据业务需求,有时候可能需要将数据持久化存储起来。 若还未创建硬盘,可根据页面提示创建一个。 硬盘的类型需要与 QCI 云服务器类型匹配,具体规则可以参考常见问题 中的容器组机器类型与硬盘类型的匹配策略部分 。
防火墙
出于数据安全的考虑,可以对 VPC 网络或者处于基础网络并且绑定外网 EIP 的 QCI 实例指定对应的防火墙。若还未创建防火墙,可以参考文档 用户指南 。
准备工作完毕之后,接下来进入容器平台的弹性容器实例页面,点击创建进入容器组的创建页面。
第一步,指定容器镜像,这里需要至少添加一个容器镜像。这些指定的镜像将属于同一个容器组。
第二步,点击下一步,进入“挂载存储卷”页面,点击“挂载”,指定 QCI 实例需要挂载的存储卷。目前存储卷支持2种格式:
简单起见,假设需要挂载的是之前创建好的硬盘。在“选择硬盘列表”里选择提前创建好的硬盘。
第三步,点击下一步,进入“网络设置”页面,“网络类型”选择提前创建的 VPC 网络。
最后一步,点击下一步,进入到“基本信息”页面,填写容器组的基本信息。填写完成,点击“创建”系统便开始后台创建 QCI 实例。
QCI 相关概念
青云弹性容器实例 (QingCloud Elastic Container Instance) 中的核心概念是容器组 (Container Group) 。本文将以容器组范围和单个容器范围 2 个维度为您介绍 QCI 相关概念。
容器组范围
-
容器组:一组可以被调度到同一台宿云服务器上的容器集合。这些容器共同构成了容器组的生命周期并共享容器组的网络和存储资源。容器组的概念与 Kubernetes 中 Pod 概念类似。在部署过程中需要为容器组分配资源。容器组中的单一容器可以使用的资源不能超过容器组的限制。例如:一个 1 vcpu 资源的容器组中可以包含 2 个分别使用 0.5 vcpu 的容器。
-
健康状态:包含 3 种状态:checking 代表容器组初始状态,healthy 代表容器组当前状态正常,unhealthy 代表容器组当前状态异常。
-
共享内存:容器组内容器之间共享内存的大小(单位 MB ),申请的共享内存应小于容器组实际申请的物理内存的 1/2 ,默认关闭。
-
镜像缓存:是否开启镜像缓存。
注意: 容器组的重启策略仅决定组内容器的逻辑行为,容器组不会被自动重启
-
容器组状态
- 等待中:容器组正在创建中。
- 运行中:容器组中所有的容器都已被创建,并且至少有一个容器正在运行。
- 重启中:容器组正在重启中。
- 更新中:容器组正在更新中。
- 删除中:容器组正在删除中。
- 失败:容器组状态异常,系统将在一个小时之内自动删除处于异常状态的容器组,失败状态的容器组不会收取任何费用。
单个容器范围
-
镜像拉取策略:包括尝试重新下载镜像,有先使用本地镜像和仅使用本地镜像,使用方法与 k8s 类似。
-
容器状态
- 等待中( waiting ):容器的初始状态。
- 创建但尚未启动( created ):容器创建完成但是尚未启动。
- 运行中( running ):容器已经创建,并且正在运行。
- 已终止( terminated ):容器终止退出,包括成功终止与失败终止。
-
存储卷:容器中的文件是非持久化存储的,这样会给容器应用带来一些问题。首先,当容器崩溃重启之后,之前存储的文件会丢失。其次,当在一个 QCI 中同时运行多个容器时,常常需要在这些容器之间共享文件。QCI 支持通过存储卷的方式来解决这两个问题。您可以将外部存储卷挂载到指定的容器组,存储卷的生命周期独立于容器组。每个容器组中声明的存储卷由容器组中的所有容器共享。目前 QCI 支持 2 种类型的存储卷:
- 配置文件(创建时声明),提供了向 QCI 注入配置数据的方法,并且只需以明文形式填入配置数据。
- 硬盘(提前创建),写入硬盘的数据可以在 QCI 销毁时依然保留,适用于 MySQL 、Redis 等场景。
注意: 配置文件和硬盘挂载的子路径 sub_path 表示的是存储介质内的子路径,与 k8s sub_path 类似。
-
Docker 镜像:容器应用打包的标准格式,在部署容器化应用时需要指定镜像,镜像可以来自于 Docker Hub ,青云镜像服务,或者您的私有 Registry 。镜像 ID 可以由镜像所在仓库 URI 和镜像 Tag(缺省为 latest)唯一确认。特别地,对于公有镜像仓库可以直接填写镜像名称和 Tag(可省略)。
-
仓库类型:包含公有仓库和私有仓库。其中私有仓库需要添加镜像仓库凭证。
-
镜像仓库凭证:包含镜像仓库地址(例如:dockerhub.qingcloud.com ),用户名(例如:tester )和密码(例如:123456 )三个部分。
-
容器端口:指定容器需要暴露的协议( TCP 或者 UDP )和端口。
-
容器类型:包含初始容器和工作容器。初始容器在工作容器之前启动,一般用来进行一些环境初始化的工作。初始容器串行按序执行,工作容器是常驻在容器组中的,并行执行。
-
CPU 和内存:每个 QCI 实例内支持最多 20 个容器,实例内每个容器的资源支持自定义配置,但汇总到 QCI 实例级别需要满足 CPU 和内存约束。对于未满足的情况,QCI 会执行自动规整操作,计费按照规整后 CPU 和内存值进行计费。
-
最大日志容量:单个容器保存的最大日志大小,超过指定阈值大小,系统稍后便会选择一个合适的时间截取日志。
-
其他容器参数:
QCI 通过容器镜像中的预设参数来启动容器。如果您想覆盖镜像的启动默认值,可以使用以下参数进行配置,语义与 docker 完全相同:
- 工作目录:指定工作目录。
- 启动命令:启动命令列表。
- 启动参数:启动参数列表。
- 环境变量:容器环境变量列表。
重启策略
- 若重启策略为 Always(默认):容器组中有容器处于非运行状态时重启容器组。
- 若重启策略为 OnFailure :容器组中有容器异常退出时重启容器组。
- 若重启策略为 Never :任何情况下不重启容器组。
网络
容器组内的容器共享相同的 IP 地址和端口号。目前 QCI 支持 2 种网络模式:
- 私有网络模式,在该模式下如果您希望在 QCI 中运行的业务能够访问外网,比如从 Docker Hub 拉取公有镜像,需要将 VPC 网络与指定 EIP 绑定。
- 基础网络模式,加入指定基础网络,并且将容器组与指定 EIP 绑定。
Debug 与调试
当您的容器行为出现异常时,您可以获取容器中的相关日志和事件来排查问题。
登录容器平台中的弹性容器实例页面。
选择您需要查看日志的容器组。
查看事件
单击事件即可查看当前容器组对应的事件。
查看日志
单击日志并选择需要查看的容器即可查看当前容器中的日志信息。
调试 QCI
单击容器终端图标,连接到指定容器。
注意处于运行状态的容器才能建立连接。
镜像缓存
QCI 容器组实例创建过程中,大部分时间消耗在镜像下载阶段,为加速 QCI 容器组创建速度,QCI 提供镜像缓存功能,用户事先将需要用到的镜像作为硬盘快照缓存,在创建 QCI 容器组实例时基于快照创建,避免或减少镜像层下载,从而提升 QCI 容器组实例创建速度。具体的提升速度跟容器组使用的镜像个数,镜像大小和镜像仓库网络因素决定。
镜像缓存的创建过程与容器组的创建过程类似,创建完成之后点击需要对应的缓存,可以查看到其详细信息,比如镜像全称和大小。