应用
容器应用部署介质支持两种:镜像(默认镜像仓库、第三方镜像仓库等)和应用包(应用包管理的 jar
、war
等)。
镜像方式就是从镜像仓库中直接部署 DockerImages
;应用包部署需要选择运行环境镜像,部署时将应用包上传到运行环境的对应目录下。
应用生命周期管理示意图
服务生命周期示意图
版本控制器示意图

如上节所述,可通过2种交付介质创建容器应用:镜像和应用包。下面分别叙述通过两种介质创建容器应用。
通过镜像仓库创建应用
(1) 点击[所有产品]菜单项,进入[容器服务/容器应用]页签,选择对应的集群项目,进入应用列表页面,如下图所示。

(2) 选择应用部署项目和集群,点击侧边菜单上方下拉框,选择部署项目和集群。
(3) 点击列表左上角<创建应用>按钮,进入应用创建页面。
(4) 填写应用名称,然后配置服务对应参数,各参数配置要求如下所示。
- 服务名称:服务名称由小写字母、数字和“-”组成,3-56位,且开头必须是小写字母,结尾必须是小写字母或数字。
- 服务版本:可由1~15位小写字母、数字和中划线组成,且开头和结尾必须是小写字母或数字。
- 服务描述:为服务配置的对应描述信息。
(5) 基本信息配置完成后,单击<添加容器>按钮,进入容器组配置页面。
向容器组添加容器,并配置各容器参数,同一容器组内一般部署强相关的组件,比如应用程序组件和代理组件等,同一容器组内的容器始终一起调度,并可以使用本地通信。 添加容器支持两种介质类型,当容器的介质是镜像时,配置页面如下图所示。

(6) 配置运行环境的镜像,用户可以从镜像仓库中复制镜像地址输入,或根据需要从镜像仓库中选择要使用的镜像和版本,单击<确定>按钮即可。
(7) 配置其他“基本配置”参数,各参数的说明如下所示。
- 容器名称:容器组内容器的名称。
- 容器类型:应用程序容器,或者初始化容器。应用程序容器就是一般业务程序,初始化容器是在应用程序容器之前运行的容器,可以包含应用程序镜像中不存在的实用程序或设置脚本。例如,服务A依赖于服务B,部署服务A时可以增加一个初始化容器,初始化容器可以是一个脚本,用于检测服务B是否已运行,如果服务B已运行,初始化容器就会结束,然后启动服务A的应用程序容器。
- 容器规格:x86计算或者高性能计算GPU,其中x86计算可提供了5种标准容器配置,并且支持自定义配置。高性能计算GPU支持自定义整数GPU核数,用户可以部署高性能计算、机器学习、人工智能、自动驾驶、虚拟现实、自然语言处理等需要GPU的应用,k8s自动调度GPU计算资源。
- 端口设置:平台默认读取镜像manifest中的端口配置,并填充到界面上,用户可以根据需要选择需要暴露的容器端口。服务端口一般默认使用容器端口,容器组内容器暴露端口不能重复,服务名类似传统域名,服务名+端口可以提供集群内访问。
(8) 配置“启动设置”相关参数,该参数主要用于配置常用的启动设置,例如:配置容器进入点命令(Entrypoint),启动命令(CMD),重新部署时选择本地镜像还是始终拉取云端该版本镜像,设置使用所在主机节点的时区,是否允许TTY连接和STDIN输入,是否允许特权容器。页面如下图所示。

启动设置各参数说明如下所示。
容器进入点:修改 DockerFile
中的默认 Entrypoint
命令,用来配置容器启动后执行的指令。启动执行命令:修改 CMD
命令,该设置可以改变容器启动后的执行指令;在该配置页面,我们可以自定义执行命令。下面我们将定义一个可执行脚本。运行一个容器,然后在容器中创建脚本文件,并添加以下内容。如 my-run.sh
。
#!/bin/sh
echo this is my-run.sh
echo "========================================"
./run.shshell
确保该脚本有执行权限,如在容器中执行 chmod 755 my-run.sh
,这时就可点击“自定义”,键入自定义的命令,如下图所示。
CMD和Entrypoint都可以执行 exec
或者 shell
,CMD
一般用作容器默认启动命令,Entrypoint
是容器进入点,具体用法请参考 docker
相关文档。
重新部署所用镜像:某些配置参数修改、手动重新部署、调度策略变化或故障导致的重启,优先使用宿主机本地镜像或始终拉取云端该版本镜像。优先使用宿主机本地镜像,重启速度快;拉取云端镜像,可以使用更新后的镜像版本,但是启动速度较慢。
- 容器时区设置:用来设置容器运行时的时区。未勾选时,容器运行时使用系统默认时区。勾选时,容器运行时使用所在节点时区,如北京节点会将容器设置为东八区。
- 容器钩子:开启后可以在容器运行后执行命令。
- 特权容器:配置允许当前容器获取
Linux
内核特权,使得该容器可以比较高的权限操作`Linux `。
(9) 配置健康检查相关参数,系统提供健康检查配置项功能,除了 TCP
、HTTPS
、HTTP
,还支持执行命令脚本检查,如果检查项不满足,系统为了保证服务的高可用,将自动重启该服务。支持就绪状态检查和存活状态检查,两种检查可以独立设置,互不影响。

各参数的对应的说明如下所示。
- HTTP:通过HTTPGET请求进行健康检查。如果响应状态码小于400 ,则认为容器健康。
- TCP:检测端口是否为打开状态,若端口为关闭或进程停止关闭状态,则健康检查不通过。
- HTTPS:通过HTTPS GET请求进行健康检查。如果响应状态码小于400,则认为容器健康。
- 执行命令:通过在容器内执行命令进行检查,进程退出状态码为0,则认为容器健康。
(10) 配置环境变量相关参数,环境变量的配置支持两种方式,如下所示。
- 支持导入镜像内置的环境变量
- 支持导入配置文件环境变量
其中导入镜像内置的变量是指选择镜像自带的环境变量,配置文件环境变量,用户可以在服务配置板块进行相应配置。环境变量的值可以使用secret加密。(详情查看secret)。

(11)配置日志采集相关的参数,平台默认提供 Docker
标准日志输出采集和查询分析能力,如果其它目录有日志输出,并且希望平台提供采集、查询分析能力,可以设置日志采集。该属性用于采集应用的运行日志,同时对日志进行分析,页面如下图所示。该设置可以实现应用的运行日志采集,结合平台的日志查询功能提供托管式、一站式日志采集、查询服务。
进行以下配置,即可完成应用的日志采集。
- 日志目录,要采集的应用产生的日志的目录,例如
/var/log
。 采集规则,要采集的文件正则表达式,保证正则可以避免采集比如temp这类正在写入的文件,例如^access.log.[ 0-9- ]{10}
。 - 采集规则,要采集的文件正则表达式,保证正则可以避免采集比如temp这类正在写入的文件,例如
^access.log.[ 0-9- ]{10}</code>
。 - 执行命令:通过在容器内执行命令进行检查,进程退出状态码为0,则认为容器健康。
采集好的日志,可以在[安全和运维/应用监控/日志管理/日志查询]页面查看,选中采集日志,即可根据关键字、日期等条件过滤查询。
(12)设置配置管理对应参数,用户可以根据需求,统一管理服务配置文件,用户不用停止服务,即可变更多个容器内的配置文件。可在[容器服务/服务配置]下创建配置组,从中选择所需的配置组,并自定义挂载目录,页面如下图所示。

现已提供通过文件导入或git触发更新的方式来更新配置文件内容,或直接创建配置文件。详细内容查看服务配置小节。
用户可以根据业务需要配置所需的容器组数量,容器组对应的参数配置参加上文所述。
(13)(可选)容器组配置完成后,用户可选择为当前应用配置路由策略,勾选“配置路由策略”选项,选择代理出口方式为服务代理/负载均衡/三层负载均衡,本例选择服务代理。
上方的容器暴露的服务端口,都可以在此处配置网络代理,可以选择 HTTP
、HTTPS
、TCP
、UDP
等协议。
tip
上方的容器暴露的服务端口,都可以在此处配置网络代理,可以选择HTTP、HTTPS、TCP、UDP等协议
如果想自己指定IP,勾选右侧固定服务IP,点击系统自动分配IP或手动输入IP,如下图所示。

如果IP数量不足,可将多个服务指定同一个IP减少IP资源使用,共享IP的多个服务之间端口不能重复。
(14)所需参数配置完成后,根据业务需要配置所需的高级设置参数,参数说明如下所示。
存储卷:用户可以根据业务需求相应的存储卷,支持使用已有存储卷、新建临时卷、本地存储(hostpath)。
</li></p>``<p><li>
副本数:填写需要启动的容器组数量。升级策略:升级策略创建应用时不生效,当修改版本控制器配置(除升级策略)和容器配置时,将会按照更新策略重启服务,升级策略共4种。
- 先启动新Pod,再停止旧Pod:使用该策略可以保证更新过程中服务负载能力不降低,但会有一定的资源冗余。
- 先停止旧Pod,再启动新Pod:使用该策略没有冗余资源,但是更新过程服务负载能力会降低。
- 先全部删除,再启动新Pod:使用该策略更新速度较快,且可以用于独享存储、固定IP等特殊服务的升级。
- 自定义:用户设置最大超量和最大不可用,系统将自动分组更新。适用于副本数较大的服务更新。
服务账户:平台支持原生资源Service Account创建,系统存在默认Service Account,名称为default,默认关联所有应用服务。
部署网络(多网卡):当集群安装多个网络插件时,部署应用时可以选择多网卡,程序不同接口可以走不同网卡。使用时主网络必选,附加网络可选。使用场景主要两个:支持特定应用的分网络管理,主要目的是为提高性能(如Ceph);支持网络划分后隔离,主要目的是为了安全(如业务网,管理网)。
启用IPv6:系统支持IPv6/IPv4协议,容器服务支持双栈。
地址池/固定IP:选择一个集群内已配置的IP地址池,并确认是否为此服务固定IP。固定容器组IP后,副本数只能为1(暂只支持服务单实例固定IP)。
调度策略:节点调度策略包括使用系统默认调度、指定主机名及IP上运行和定义亲和性,调度选择支持搜索和排序。
- 系统默认调度策略指:不允许节点端口被其他容器实例占用,不允许容器实例创建在空闲vvV资源不足的节点 。
- 指定主机名及IP上运行:指应用运行在用户选择的主机节点上。
- 服务实例与节点亲和性。
- 如果项目指定了地址池,这里只能选择指定的地址池;如果项目没有指定地址池,租户指定了地址池,这里只能选择租户地址池;如果项目、租户都未指定地址池,可以选择集群所有地址池。
- 亲和性规则可以设置多个,单次添加的亲和性规则之间是“且”的关系,必须同时满足设定所有的规则,每个亲和性规则之间是“或”的关系,满足其中一个亲和性规则即可。
- 当亲和性条件选择“最好”时,显示权重,默认设为1 ,范围是1 - 100的整数。
亲和性定义有两个等级,必须表示强限制性的硬策略,如果没有符合条件的节点,会一直重试,一般用于服务必须满足一定运行条件,不满足就会出问题的场景。最好表示优先调度到符合条件的节点,如果没有符合条件的节点,就忽略该条件,按照正常情况调度。
- in:表示调度到满足主机标签的节点,主机标签值可以多选
- Notin:表示不能调度到满足主机标签的节点,主机标签值可以多选。
- >:表示容器服务调度到int型键值大于设定标签键值的节点上。
- <:表示容器服务调度到int型键值小于设定标签键值的节点上。
- Exists:表示调度到存在该主机标签键的节点。
- DoesNotExists:表示调度到不存在该主机标签键的节点。
服务与服务亲和性:决定服务实例(容器组)与其它服务实例的是否可以部署在同一拓扑域上。可以是当前服务的容器组标签,也可以是其它服务的容器组标签;可以是已存在的标签,也可以是暂未设置的标签。想设置当前服务A的容器组最好分散在不同节点上,设置如下。

限制等级选择“最好”,容器组标签输入“appina”,拓扑域可不填(默认全局),这条策略的含义是“在全局拓扑域上,存在app=a的容器组的节点,最好不要调度当前服务”,也就是说没有其它干扰时,一个节点上最多调度一个当前服务的容器组。
例 2 ,服务A与服务B通信比较频繁,需要设置当前服务A与服务B必须调度到相同节点上,设置如下所示。拓扑域可以是节点、机架、分区、地域、可用区等各种基础设施概念,通过主机节点标签识别,一个节点标签键是一个拓扑域。服务与服务亲和的规则如下所示。
- in:表示调度到满足主机标签的节点,主机标签值可以多选。
- Notin:表示不能调度到满足主机标签的节点,主机标签值可以多选。
- DoesNotExists:表示调度到不存在该主机标签键的节点。
- 容忍 :勾选允许设置容忍,则创建服务/编辑时显示增加容忍相关的调度策略。
- 创建服务、编辑服务时支持修改调度策略。
- 高级设置增加,容忍调度策略。
- 输入后,点击添加按钮,显示在下方输入框中,支持添加多个容忍。
安全设置:容器开启特权模式,输入容器的UserID和分配拥有pod卷的fsGroup。
安全组:系统将不同服务分成若干个安全组,安全组内默认放通服务相互访问,安全组外默认隔离(假设每个服务都只属于一个安全组的情况)。
容器组DNS设置:可以设置容器组的主机名和子域,可通过“主机名.子域.my- namespace.svc.cluster-domain.example”域名在集群内直接访问容器组。
历史版本上限:用户可以设置的deployment历史版本个数,最大支持 1000 。
带宽限制:设置服务上传、下载带宽。
用户可根据实际的业务需求配置是否“获取自定义监控数据”,如果选择获取自定义监控数据,则需填写对应的path和port值监控数据,则需填写对应的path和port值。
(15)所需的高级设置参数配置完成后,可以单击<创建>按钮,部署应用。或点击右上角“添加服务”,继续添加服务,如下图所示。

(16)服务添加完成后,单击<创建>按钮,应用新建成功。
通过应用包文件创建应用
当容器组的介质是应用包时,配置页面如下图所示。

(1) 点击“应用包”(创建应用前,需[交付中心/应用包管理]上传应用包),弹框如下图所示。

(2) 查找并选择需要使用的应用包,根据包类型,支持不同的运行环境,选择自己需要的运行环境版本,点击<确定>即可。
通过应用包添加容器,容器类型只能是应用程序容器,不能是初始化容器,其它参数与通过镜像添加一致,详细参镜像创建应用描述相关内容。
应用包文件具体指 .jar
和 .war
文件,用户可通过[交付中心/应用包管理]上传本地 jar
和 war
包。创建应用时选择需要部署的应用包,然后选择 Java
、Tomcat
、Weblogic
等运行环境,其它配置同镜像方式,系统将会自动部署为容器应用,无需用户容器化。 应用包容器化部署,会在启动时先将应用包文件上传到服务器(tomcat
、weblogic
等)对应目录上,然后才能启动成功。用户自定义运行环境时,请注意页面提示默认路径。 如果使用weblogic运行环境部署jar包,用户打包时请在 WEB-INF
目录下创建一个 weblogic.xml
文件,在 weblogic.xml
文件中设置一下根的上下文,如:
/<weblogic-web-app>
<context-root>`/`</context-root>
</weblogic-web-app>
否则部署的应用包无法直接访问,必须在系统生成访问地址后面,增加应用包名称作为路径。例如应用包为 web-app
,访问地址类似 http://192.168.1.103:39524/web-app/
。
应用变更
点击 [所有产品]菜单项,进入[容器服务/容器应用]页签,选择对应的集群项目,进入应用列表页面,在应用列表页对应用进行查看拓扑图、启动/停止操作、重新部署和删除操作。
- 勾选已停止的应用,可以查看拓扑、启动或删除应用。
- 勾选运行中的应用,可以查看拓扑、停止、重新部署或删除应用。
具体可执行的操作如下所示。
- 查看拓扑:点击查看拓扑,该拓扑只有只读权限。
- 启动操作:选择目标应用并单击启动,在弹出的对话框中,单击<确定>。
- 停止操作:选择目标应用并单击停止,在弹出的对话框中,单击<确定>。
- 重新部署:一般用于因为宿主机或其它未知因素导致的服务异常,可以通过手动重新部署,将服务实例部署到其它宿主机上,完成故障恢复。重新部署需要在运行中状态下才可以操作,选择目标应用并单击重新部署按钮,在弹出的对话框中,单击<确定>按钮。
- 删除操作:选择所要删除的应用并单击删除,在弹出的对话框中,单击<确定>。
查看应用详情
点击[所有产品]菜单项,进入[容器服务/容器应用]页签,进入应用列表页面,选择对应的集群项目,选择所要查看详情的应用,点击应用名称进入应用详情页面;用户可以查看服务实例、审计日志和拓扑图,如下图所示。

如上图,进入应用详情页,用户可操作内容如下。
- 查看在该应用中添加的所有服务实例。
- 可在该界面添加服务,具体考[创建应用/通过镜像仓库创建应用/添加服务]。
- 可对服务进行启动/停止、重新部署、删除、编辑YAML等操作。
- 查看服务详情用户可通过服务/查看服务详情。
- 查看审计日志:在应用详情页,点击审计日志,可以查看该应用的操作审计记录。
- 拓扑图:在应用详情页,点击拓扑图;即可展示容器的拓扑图,包括容器名称、IP地址等字段展示。