容器应用

  1. 单击[全部服务]图标,选择[企业应用/应用管理]菜单项。

  2. 在左侧导航树中单击[应用管理/应用列表]菜单项,进入应用列表管理页面。

  3. 单击<创建应用>按钮,进入基础设置页面。具体配置步骤与参数,请参见基础配置

  4. 单击<下一步>按钮,进入应用配置页面,具体配置步骤与参数,请参见应用配置

  5. 单击<下一步>按钮进入部署确认页面,确认部署信息,如需修改单击<上一步>按钮返回修改,如无问题单击<创建>按钮完成操作。

基础配置

容器应用基础配置参数如下表所示:

参数

说明

应用名称

自定义应用名称,可包含小写字母、数字、-,且只能以小写字母开始,以小写字母或数字结尾,长度1-39个字符。应用名称应该具有自解释性,名称应能体现其对应的业务。一般建议与业务项目名称一致,以便现场运维人员可以根据名称部署应用包。

版本号

为应用指定版本号,当应用回滚时,可通过版本号选择回滚至哪一应用版本。版本号对于区分当前部署的应用版本有重要意义,因此部署升级应用时应重视版本号,建议与应用包的发布版本一致。若应用包无发布版本,一般根据业务特性来制定一套现场部署版本,版本应该能够体现跟业务相关的特性或者明确的时间序列。

应用组

应用所属的逻辑分组,即创建应用组中创建的应用组。若未创建,也可单击参数旁的<创建应用组>按钮进行创建。

应用描述

应用的相关描述,长度0-128个字符。建议增加应用描述,应用描述说明当前应用的业务功能及特性,以便进一步解释应用名称无法说明的问题。

软件包类型

包括容器镜像、Jar包、War包、Helm包、传统软件包和前端资源包等六种类型,请根据实际情况选择:

  • 容器镜像是指存储于软件中心-镜像仓库中的镜像。

  • Jar包、War包、Helm包、传统软件包、前端资源包是指存储于软件中心-应用仓库中的应用包。

  • 容器应用可选择的软件包类型包括:容器镜像、Jar包、War包、Helm包和前端资源包。

部署方式

  • 传统方式部署:选择通过传统方式部署时,可以选择资源配置为共享集群或者独享集群,然后选择应用部署的节点。

资源类型

承载应用的资源所属类型,包括容器集群和主机两种资源类型。容器应用需选择容器集群承载应用。

容器镜像、Helm包、Jar包、War包和前端资源包部署到容器集群时,容器内部时间和容器集群时间将保持一致。

应用类型

  • 无状态应用:即Kubernetes的Deployment,是最常用的Controller。定义一组完全相同的Pod,如Pod名称、副本数、端口等,Deployment控制器会保证集群中的Pod与定义一致,故障时可以自动恢复。无状态应用指应用的多个实例间无差别,实例重启后是全新的状态,完全无法感知前一个实例的任何信息和状态。无状态应用适用于不需要存储中间状态的业务,通常情况下,常见的微服务都属于此应用类型。

  • 有状态应用:即Kubernetes的StatefulSet,能够保证Pod的顺序和唯一性。与Deployment一样基于一组完全相同的容器定义,但不同的是,StatefulSet为每个Pod维护一个具有黏性的身份标志,使他们不随重启改变。有状态应用指应用的多个实例有差别,每个实例都有一些自己固定的信息,如ID对外的名称角色等。应用实例重启后仍需要继承这些信息。如:zookeeper每个pod有自己固定的名称和ID,需要存储自己所监控到的集群信息,pod重启后仍使用这些固定的ID网络标识等信息,并读取上个pod停止时所监控到的集群信息。

  • 守护进程:即Kubernetes的Daemonset,它在集群的每个节点上运行一个Pod,且保证只有一个Pod。这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行,且不需要太多实例。守护进程指需要运行在每个节点或者某些指定节点上的应用,且有新节点加入时自动运行实例。说明:

    • 守护进程只支持容器镜像、jar、war、前端资源包四种类别的容器应用部署。

    • 守护进程不支持弹性伸缩,不支持灰度升级。

    • 使用容器方式部署应用时,需要根据应用的实际情况选择不同的应用类型。本平台支持无状态应用、有状态应用和守护进程。简单来说,此三种类型的区别在于应用是否需要逻辑状态。

资源配置

应用选择容器集群资源,包括共享集群与独享集群两种类型。

  • 选择共享集群类型时,可供选择的资源为容器可用域。

  • 选择独享集群时,可供选择的资源为[云服务/云容器引擎]中创建的容器集群。

    • 资源配置选择独享集群且独享集群是SDN模型的集群时可以为容器应用选择网络策略,即配置网络、子网和QoS限速配置。关于网络和子网的详细介绍请参见【云服务指南-网络-经典网络】,关于QoS的详细介绍请参见【云服务指南-网络-QoS】。

说明:

  • 当应用类型为守护进程,并且资源配置为独享集群时,可以选择是否只在工作节点运行。

    • 如果选择否,则该进程可以运行在容器集群中的全部节点。

    • 如果选择是,则该进程只运行在容器集群中的worker节点。

  • 为SDN模型的独享集群的容器应用配置网络策略时:

    • 目前支持为容器添加最多两张网卡,即分别选择两套网络子网和QoS限速配置,第二套在第一套配置完成后可以看见。

    • 支持为两张网卡各配置不同的QoS限速。升级时无法新增/编辑/删除网卡,只可以新增/编辑/删除QoS限速。

    • 有状态应用固定IP,一个选项设置后两张网卡均生效。

    • 限制条件是两张网卡的网络和子网不允许重复(可以选择相同的QoS限速)。

    • 同一个子网支持被不同应用组或应用使用。

固定IP

为应用绑定在Pod初始化时分配的IP地址。

  • 默认情况下,Kubernetes管理的容器实例重启或升级均会导致对应的容器Pod重新分配IP地址。在配置了路由网络的独享集群中,若是创建单Pod容器的有状态应用,可以在此将Pod初始化时获取的IP地址固定分配给该Pod。这样即使是应用重启或者升级,用户也可以通过固定IP地址访问应用。

  • 固定了IP地址的有状态应用,不支持弹性伸缩。

  • 只有在固定网络模式(calico模式)下的Kubernetes容器集群上部署应用,才会出现这个选项。

应用配置

一般配置参数

应用配置-一般配置参数如下表所示:

参数

说明

配置方式

当软件包类型选择“容器镜像”,且资源配置选择“独享集群”时,支持两种应用配置方式:

  • 表单配置:即下表所述参数配置。

  • Yaml配置:通过编辑Yaml文件进行应用配置。关于Yaml部署应用,请参考附录Yaml部署应用示例一

注意:

部分业务容器需要初始化容器才可正常运行。在这种情况下,编辑Yaml文件时需要配置初始化容器。业务容器只能使用Pod的存储卷,初始化容器只能使用业务容器的存储卷。因此Pod的存储卷名称必须包含业务容器的存储卷名称,业务容器的存储卷名称必须包含初始化容器的存储卷名称。关于包含初始化容器的Yaml部署应用,请参考附录Yaml部署应用示例二

镜像安装包/应用安装包

根据选择的软件包类型此处展示对应参数。

选择镜像或应用包所在的仓库类型:私有仓库或者公有仓库。

单击<选择安装包>按钮,选择应用包或镜像名称及待部署的版本,单击<确定>按钮完成选择。

  • 若未上传镜像或应用包可单击<上传镜像>/<上传应用包>按钮进行上传,相关操作请参见上传镜像上传应用包相关内容。

环境变量

用户自定义容器运行环境中的一些变量,方便部署后灵活变更容器配置。自定义环境变量不可与系统内置的环境变量重复,系统内置的环境变量如表-1所示。自定义环境变量支持如下配置方式:

  • 手动输入:手动添加变量名与值的方式添加环境变量。

  • 配置项引入:通过引入配置项的方式添加环境变量。

  • 密钥引入:通过引入密钥的方式添加环境变量。

  • 容器信息引入:通过引入容器信息的方式添加环境变量。

单击<+添加>按钮,可以添加更多的环境变量配置;单击<快速添加>按钮,可以打开一个文本输入框,输入多行变量名和值后,单击<确定>按钮,即可一次添加多个变量名和值。

容器规格

容器的启动限制和运行限制。启动限制参数应小于运行限制参数。

  • 启动限制:容器“启动限制”的缺省值。容器启动时,服务器可分配给容器的资源(包括CPU和内存)不能低于“启动限制”中指定的数量。启动限制指一个实例独占资源,且这些资源在实例启动时候就必须要申请到。因此启动限制资源应该是实例正常运行时的平均水平。“启动限制”设置过大会浪费资源,过小会导致容器反复申请资源降低运行效率。对于java应用,启动限制应该是1G 与jvm的最大堆内存之和。

  • 运行限制:容器“运行限制”的缺省值。容器运行时,占用的服务器资源(包括CPU和内存)不能高于容器“运行限制”中指定的数量。运行限制指一个实例最大可以使用的资源,在需要的时候申请,不需要的时候释放,主要用于解决业务高峰时的资源限制。此配置建议根据实际业务情况进行分配保证高峰期容量。若无实际数据参考建议配置为启动限制的1.5~2倍。

  • 开启GPU配额:配置容器使用的GPU资源。设备类型支持AMD和NVIDIA两种,允许容器使用的最大GPU资源个数(即运行限制)。

标签

为应用创建标签,可以通过标签来标识一类应用。

nginx版本

部署前端资源包,利用nginx做反向代理前端资源。当前仅支持1.20版本。

是否开启HTTPS

部署前端资源包可见。如果开启,需要上传配对的公钥证书和私钥证书。

公钥证书/私钥证书

单击<上传>按钮,弹出窗口,将文件拖至窗口的对应区域,或单击<点击上传>,上传证书。

nginx配置

单击<上传>按钮,弹出窗口,将配置文件拖至窗口的对应区域,或单击<点击上传>,上传配置文件。

表-1 系统内置环境变量列表

容器软件包类型

系统内置环境变量

WAR包

  • JAR_PARM

  • H3CLOUD_APM_TRIGGER

  • H3CLOUD_SW_AGENT_NAMESPACE

  • H3CLOUD_SW_AGENT_NAME

  • H3CLOUD_SW_AGENT_COLLECTOR_BACKEND_SERVICES

  • SW_AGENT_VERSION

  • TOMCAT_UPGRADE

  • SW_AGENT_CONFIG

  • BASE_JDK_VERSION

  • NAMESPACE

  • SERVICE_NAME

  • JAEGER_AGENT_COMPACT

  • JAEGER_AGENT_BINARY

  • JAEGER_AGENT_ZIPKIN

  • EUREKA_URL

  • CONFIG_URL

  • GRAY_VERSION

  • REGISTRY_TYPE

JAR包

  • JAR_PARM

  • JAR_NAME

  • H3CLOUD_APM_TRIGGER

  • H3CLOUD_SW_AGENT_NAMESPACE

  • H3CLOUD_SW_AGENT_NAME

  • H3CLOUD_SW_AGENT_COLLECTOR_BACKEND_SERVICES

  • SW_AGENT_VERSION

  • SW_AGENT_CONFIG

  • NAMESPACE、SERVICE_NAME

  • JAEGER_AGENT_COMPACT

  • JAEGER_AGENT_BINARY

  • JAEGER_AGENT_ZIPKIN

  • EUREKA_URL

  • CONFIG_URL

  • GRAY_VERSION

  • REGISTRY_TYPE

容器镜像

  • GRAY_VERSION

  • REGISTRY_TYPE

  • EUREKA_URL

  • CONFIG_URL

  • SERVICE_NAME

  • NAMESPACE

  • JAEGER_AGENT_COMPACT

  • JAEGER_AGENT_ZIPKIN

  • JAEGER_AGENT_BINARY

应用高级配置

在界面上单击<显示高级配置>,打开高级配置界面。

应用配置-高级配置参数如下表所示:

参数

说明

服务访问设置

配置容器集群内/外访问、负载均衡访问的端口映射。

  • 名称:端口映射名称是访问应用的标识。可包含小写字母、数字、- ,且只能以小写字母或数字开始和结尾,长度1-32个字符。

  • 协议:目前支持TCP和UDP。

  • 容器端口:设置容器端口。

  • 集群内/外端口:设置集群内/外端口。

单击<+添加>按钮,可以设置多个端口映射。

标签

为服务创建标签,可以通过标签来标识一类服务。

会话保持(集群内外访问时可以配置此参数)

选中时,保证在设置的会话超时时间内,来自同一IP的请求始终是同一pod进行响应。

选择负载均衡

  • 已有LB

  • 自动创建LB

设置负载均衡参数

分别设置external:南北向LB、LB ID和LB的租户ID的值。

便于服务能通过这些参数值使用负载均衡。

访问路由

配置容器共享集群的访问路由之前,需配置服务访问设置(参见配置应用访问方式),否则访问路由不生效。

  • 域名:配置该访问路由适配的容器外部访问域名,如example.com。

  • 负载均衡:支持负载均衡算法,支持轮转调度、最小连接、散列求余算法三种。

    • 轮转调度:每个endpoint根据其权重依次被使用(roundrobin)。

    • 最小连接:具有最少连接数的endpoint接受请求(leastconn)。

    • 散列求余:根据原ip进行散列,然后根据所有server的总权重进行求余,得到哪个endpoint响应请求(source)。

  • 启用安全路由:是否启用https访问模式。

  • 启用sticky session:sticky session(粘性session),开启后,可保证来自于同一client的请求始终是同一pod进行响应。

说明:部署在独享集群上的应用,无须配置访问路由。

应用访问路径

容器镜像、Jar包、War包、前端资源包可在此处配置应用的访问路径。应用部署成功后,可通过“IP(域名):端口号/path(即应用访问路径)”访问应用。

启动命令

设置容器启动和运行命令。

存储卷

给容器挂载额外存储,适用于需持久化存储,高磁盘IO等应用场景。如需使用,需提前创建存储卷。关于存储卷创建步骤请参考“初始配置-Paas服务-系统管理员配置-对接资源-配置存储卷”。

说明: 因各存储服务器对于创建存储的限制规则不同,所以请用户根据实际使用的存储服务器的规则,合理安排存储规划。

  • 本地存储:即应用利用应用所在那台主机的硬盘的存储。注意使用本地存储时,切换节点会丢失数据。

  • 静态供给:指使用在资源菜单处创建好的对应的PV。

  • 动态供给:指使用在资源菜单处创建好的对应的动态供给类,根据应用所需的大小等的自动划分需要的PV。

  • 已有PVC:指使用在资源菜单创建好的PVC。

  • 临时存储:即不映射任何持久化存储。

    • 容器路径是指在容器里面的应用所使用的,在容器内部独立的路径。

    • 主机路径指映射到对应宿主机上宿主机的目录。

配置项(ConfigMap)

选择应用需要使用的配置项,即应用配置-配置项中创建的配置。

  • 配置/版本:通过配置项名称和版本筛选配置项。

  • Key:通过key匹配配置数据,支持单选,也支持选择“所有key”,一次性挂载全部配置数据。

  • 挂载路径:指定配置数据在应用中挂载的路径,即目录。

密钥(Secret)

选择应用需要使用的密钥,即应用配置-密钥中创建的密钥。

  • 密钥文件:通过密钥名称匹配密钥文件。

  • 挂载路径:指定密钥在应用中挂载的路径,即目录。

节点亲和性(Node Affinity)

一种容器的调度策略,通过判定规则、操作符、节点的标签之间的关系,用户可以约束Pod可以被调度到哪些节点。支持必须满足规则(硬需求)和尽量满足规则(软需求)。

应用亲和性(Pod Affinity)/应用反亲和性(Pod Anti-Affinity)

一种容器的调度策略,通过判定规则、操作符、命名空间、Pod标签之间的关系,决定工作负载的Pod和哪些工作负载的Pod部署在同一个拓扑域。亲和性主要解决的是应用实例分布问题,通过亲和性配置可以让实例在指定的节点上运行。通过应用亲和性配置让一些应用运行在一个网络拓扑中,让另外一些应用运行在其他的拓扑中。可根据组网需求进行此项配置。

初始化容器

部分业务容器需要初始化容器才可正常运行。初始化容器可以为业务容器进行必要的配置。

  • 初始化容器的名称:初始化容器的名称,可包含小写字母、数字、-,且只能以小写字母开始,以小写字母或数字结尾,长度1-39个字符。

  • 镜像安装包:选择镜像所在的仓库类型,包括私有仓库或者公有仓库。单击<选择安装包>按钮,选择镜像名称及待部署的版本,单击<确定>按钮完成选择。若未上传镜像可单击<上传镜像>按钮进行上传,相关操作请参见上传镜像。说明:当容器集群的架构为X86或ARM时,选择镜像包会自动筛选对应架构的镜像包。

  • 环境变量:用户自定义容器运行环境中的一些变量,方便部署后灵活变更容器配置。自定义环境变量不可与系统内置的环境变量重复,系统内置的环境变量如表-1所示。自定义环境变量支持如下配置方式:

    • 手动输入:手动添加变量名与值的方式添加环境变量。单击<+添加>按钮,可以添加更多的变量名和值;单击<快速添加>按钮,可以打开一个文本输入框,输入多行变量名和值后,单击<确定>按钮,即可一次添加多个变量名和值。

  • 运行命令:控制容器运行的实际命令。

  • 命令参数:运行命令的输入参数。

差异化配置

差异化配置用于为不同的成员集群配置不同的镜像安装包和环境变量。

  • 镜像安装包:选择镜像所在的仓库类型,包括私有仓库或者公有仓库。单击<选择安装包>按钮,选择镜像名称及待部署的版本,单击<确定>按钮完成选择。若未上传镜像可单击<上传镜像>按钮进行上传,相关操作请参见上传镜像

  • 环境变量:用户自定义容器运行环境中的一些变量,方便部署后灵活变更容器配置。自定义环境变量不可与系统内置的环境变量重复,系统内置的环境变量如表-1所示。自定义环境变量支持如下配置方式:

    • 手动输入:手动添加变量名与值的方式添加环境变量。

    • 配置项引入:通过引入配置项的方式添加环境变量。

    • 密钥引入:通过引入密钥的方式添加环境变量。

    • 容器信息引入:通过引入容器信息的方式添加环境变量。

单击<+添加>按钮,可以添加更多的环境变量配置;单击<快速添加>按钮,可以打开一个文本输入框,输入多行变量名和值后,单击<确定>按钮,即可一次添加多个变量名和值。

健康检查

用于判断容器和业务是否正常运行,包括如下检查项:

  • 存活性检查:用于检测容器是否存活,类似于执行ps命令检查进程是否存在。如果存活性检查失败,集群会对容器执行重启操作;反之则不执行任何操作。

  • 可用性检查:用于检测容器是否准备好开始处理用户请求。如果容器的就绪检查成功,集群会开放对该容器的访问;若检查失败,集群会屏蔽该容器。

可使用的检查策略包括:

  • command:执行一个命令,如果命令返回为0,则说明容器正常;如果返回非0,则说明容器异常。该方式需要在容器中集成相关脚本或程序。

  • httpGet:执行一个HTTP请求,如果返回的HTTP状态码介于200与400之间,则说明容器正常;否则则说明容器异常。httpGet检查方式适用于容器可以提供http服务的场景。

  • tcpSocket:该方式通过对TCP服务的连通状态进行检测,与容器内的应用建立Socket连接,如果可以建立成功则说明容器正常;否则说明容器异常。

通用参数包括:

  • 初次启动时间:执行第一次健康检查前等待的时间。

  • 超时时间:执行健康检查的超时时间。

  • 探测频率:执行检查策略进行健康检查的频率。

  • 成功次数阈值:判定健康检查成功的阈值,默认1次探测成功即判定容器和业务运行正常。

  • 失败次数阈值:判定健康检查失败的阈值,可自定义几次探测失败后,判定容器和业务运行失败。

容器权限

配置容器的权限。

  • 特权容器:选择是否开启特权。在特权模式下运行的容器,容器中的进程实质上等同于主机上的以root身份运行。

  • Host Network/PID/IPC:选择是否使用主机的网络/PID/IPC命名空间。

  • Read Only Root Filesystem:是否开启根文件系统只读权限。

  • 运行用户Uid:配置用户的Uid,容器以该用户的权限运行。

  • Linux内核能力:在下拉框中选择Linux内核支持的权限,如修改文件属主的权限等。

自动伸缩

配置自动伸缩阈值。当容器的CPU使用率或内存使用率超过该阈值,系统将执行自动伸缩策略,增减Pod实例的个数。部署完成后,支持通过应用空间对该参数进行修改,即重新配置自动伸缩阈值。

回调函数

即Kubernetes中的postStart、preStop和terminationGracePeriodSeconds。

  • 启动后回调:即postStart,postStart是一个生命周期钩子(lifecycle hook),它是一个容器内部的动作或命令,在容器启动之后立即执行。postStart钩子允许用户在容器完全启动之后执行一些自定义的操作或命令。它可以用于执行一些初始化任务、配置文件的加载、启动后台进程等。

  • 停止前回调:即preStop,preStop是一个生命周期钩子(lifecycle hook),它是一个容器内部的动作或命令,在容器终止之前执行。preStop钩子允许用户在容器终止之前执行一些清理操作或保存状态。它可以用于优雅地关闭应用程序、释放资源、保存数据等。

  • 体面终止限期时间:即terminationGracePeriodSeconds,terminationGracePeriodSeconds是Api Server收到Pod删除的请求到Pod实际被删除的时间,这段时间用于等待Pod内的容器完成尚未完成的工作,当terminationGracePeriodSeconds耗尽时会立即删除Pod,即便容器尚未完成部分任务。

事件钩子(postStart和preStop)有两种配置方式:

  • command:执行一个命令,例如执行如下命令就是触发preStop时向/user/share/messagel发送Hello信息。

    • command:

    • - /bin/sh

    • - -c

    • - echo Hello from the preStop handler > /user/share/messagel

  • httpGet:执行一个HTTP请求,比如容器终止前向外部持久化存储发送HTTP请求以保存容器数据。

支持应用诊断

应用诊断指从业务应用全局视角,基于业务整体的健康度对系统运行状态进行全方位监控和统计,包括基础设施、微服务、基础中间件、服务网关、链路架构等,为企业运维人员提供指标分析型工具。当本系统已部署“应用诊断”云服务时,可配置本参数。

  • 当部署软件包类型为War包、Jar包、前端资源包和容器镜像,且本系统已部署应用诊断服务时需配置此参数。选择“是”,将支持通过[云服务/应用服务/应用诊断]对部署后的应用及其所在应用组进行运行情况监控。

  • 当部署软件包类型为容器镜像、Helm包、传统软件包时,如需使用应用诊断服务,需参考联机帮助中【云服务指南/应用诊断/快速入门/准备工作】在软件包中引入SDK或skywalking的agent。

    • 当部署软件包类型为容器镜像,且选择支持应用诊断后,不建议为容器镜像在软件包中重复引入SDK或skywalking的agent。

    • skywalking的agent的版本需与镜像中的JDK版本对应。skywalking的agent的8.x版本支持JDK8至JDK17,skywalking的agent的6.x版本支持JDK6至JDK12。

  • 应用诊断仅支持监控使用Java语言开发的应用。

对于不同架构(X86或ARM)的容器集群,容器镜像开启接入应用诊断时,会自动根据目标集群架构类型使用适配的基础镜像进行实现,用户不需要针对不同的架构进行选择。