跳到主要内容

应用

容器应用部署介质支持两种:镜像(默认镜像仓库、第三方镜像仓库等)和应用包(应用包管理的 jarwar等)。 镜像方式就是从镜像仓库中直接部署 DockerImages;应用包部署需要选择运行环境镜像,部署时将应用包上传到运行环境的对应目录下。

应用生命周期管理示意图

服务生命周期示意图

版本控制器示意图

test

如上节所述,可通过2种交付介质创建容器应用:镜像和应用包。下面分别叙述通过两种介质创建容器应用。

通过镜像仓库创建应用

(1) 点击[所有产品]菜单项,进入[容器服务/容器应用]页签,选择对应的集群项目,进入应用列表页面,如下图所示。

test

(2) 选择应用部署项目和集群,点击侧边菜单上方下拉框,选择部署项目和集群。

(3) 点击列表左上角<创建应用>按钮,进入应用创建页面。

(4) 填写应用名称,然后配置服务对应参数,各参数配置要求如下所示。

信息
  • 服务名称:服务名称由小写字母、数字和“-”组成,3-56位,且开头必须是小写字母,结尾必须是小写字母或数字。
  • 服务版本:可由1~15位小写字母、数字和中划线组成,且开头和结尾必须是小写字母或数字。
  • 服务描述:为服务配置的对应描述信息。

(5) 基本信息配置完成后,单击<添加容器>按钮,进入容器组配置页面。

向容器组添加容器,并配置各容器参数,同一容器组内一般部署强相关的组件,比如应用程序组件和代理组件等,同一容器组内的容器始终一起调度,并可以使用本地通信。 添加容器支持两种介质类型,当容器的介质是镜像时,配置页面如下图所示。

test

(6) 配置运行环境的镜像,用户可以从镜像仓库中复制镜像地址输入,或根据需要从镜像仓库中选择要使用的镜像和版本,单击<确定>按钮即可。

(7) 配置其他“基本配置”参数,各参数的说明如下所示。

信息
  • 容器名称:容器组内容器的名称。
  • 容器类型:应用程序容器,或者初始化容器。应用程序容器就是一般业务程序,初始化容器是在应用程序容器之前运行的容器,可以包含应用程序镜像中不存在的实用程序或设置脚本。例如,服务A依赖于服务B,部署服务A时可以增加一个初始化容器,初始化容器可以是一个脚本,用于检测服务B是否已运行,如果服务B已运行,初始化容器就会结束,然后启动服务A的应用程序容器。
  • 容器规格:x86计算或者高性能计算GPU,其中x86计算可提供了5种标准容器配置,并且支持自定义配置。高性能计算GPU支持自定义整数GPU核数,用户可以部署高性能计算、机器学习、人工智能、自动驾驶、虚拟现实、自然语言处理等需要GPU的应用,k8s自动调度GPU计算资源。
  • 端口设置:平台默认读取镜像manifest中的端口配置,并填充到界面上,用户可以根据需要选择需要暴露的容器端口。服务端口一般默认使用容器端口,容器组内容器暴露端口不能重复,服务名类似传统域名,服务名+端口可以提供集群内访问。

(8) 配置“启动设置”相关参数,该参数主要用于配置常用的启动设置,例如:配置容器进入点命令(Entrypoint),启动命令(CMD),重新部署时选择本地镜像还是始终拉取云端该版本镜像,设置使用所在主机节点的时区,是否允许TTY连接和STDIN输入,是否允许特权容器。页面如下图所示。

test

启动设置各参数说明如下所示。

信息

容器进入点:修改 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或者 shellCMD一般用作容器默认启动命令,Entrypoint是容器进入点,具体用法请参考 docker相关文档。

重新部署所用镜像:某些配置参数修改、手动重新部署、调度策略变化或故障导致的重启,优先使用宿主机本地镜像或始终拉取云端该版本镜像。优先使用宿主机本地镜像,重启速度快;拉取云端镜像,可以使用更新后的镜像版本,但是启动速度较慢。

信息
  • 容器时区设置:用来设置容器运行时的时区。未勾选时,容器运行时使用系统默认时区。勾选时,容器运行时使用所在节点时区,如北京节点会将容器设置为东八区。
  • 容器钩子:开启后可以在容器运行后执行命令。
  • 特权容器:配置允许当前容器获取 Linux 内核特权,使得该容器可以比较高的权限操作 `Linux `。

(9) 配置健康检查相关参数,系统提供健康检查配置项功能,除了 TCPHTTPSHTTP,还支持执行命令脚本检查,如果检查项不满足,系统为了保证服务的高可用,将自动重启该服务。支持就绪状态检查和存活状态检查,两种检查可以独立设置,互不影响。

test

各参数的对应的说明如下所示。

信息
  • HTTP:通过HTTPGET请求进行健康检查。如果响应状态码小于400 ,则认为容器健康。
  • TCP:检测端口是否为打开状态,若端口为关闭或进程停止关闭状态,则健康检查不通过。
  • HTTPS:通过HTTPS GET请求进行健康检查。如果响应状态码小于400,则认为容器健康。
  • 执行命令:通过在容器内执行命令进行检查,进程退出状态码为0,则认为容器健康。

(10) 配置环境变量相关参数,环境变量的配置支持两种方式,如下所示。

信息
  • 支持导入镜像内置的环境变量
  • 支持导入配置文件环境变量

其中导入镜像内置的变量是指选择镜像自带的环境变量,配置文件环境变量,用户可以在服务配置板块进行相应配置。环境变量的值可以使用secret加密。(详情查看secret)。

test

(11)配置日志采集相关的参数,平台默认提供 Docker标准日志输出采集和查询分析能力,如果其它目录有日志输出,并且希望平台提供采集、查询分析能力,可以设置日志采集。该属性用于采集应用的运行日志,同时对日志进行分析,页面如下图所示。该设置可以实现应用的运行日志采集,结合平台的日志查询功能提供托管式、一站式日志采集、查询服务。

进行以下配置,即可完成应用的日志采集。

信息
  • 日志目录,要采集的应用产生的日志的目录,例如 /var/log。 采集规则,要采集的文件正则表达式,保证正则可以避免采集比如temp这类正在写入的文件,例如 ^access.log.[ 0-9- ]{10}
  • 采集规则,要采集的文件正则表达式,保证正则可以避免采集比如temp这类正在写入的文件,例如 ^access.log.[ 0-9- ]{10}</code>
  • 执行命令:通过在容器内执行命令进行检查,进程退出状态码为0,则认为容器健康。

采集好的日志,可以在[安全和运维/应用监控/日志管理/日志查询]页面查看,选中采集日志,即可根据关键字、日期等条件过滤查询。

(12)设置配置管理对应参数,用户可以根据需求,统一管理服务配置文件,用户不用停止服务,即可变更多个容器内的配置文件。可在[容器服务/服务配置]下创建配置组,从中选择所需的配置组,并自定义挂载目录,页面如下图所示。

test

现已提供通过文件导入或git触发更新的方式来更新配置文件内容,或直接创建配置文件。详细内容查看服务配置小节。

用户可以根据业务需要配置所需的容器组数量,容器组对应的参数配置参加上文所述。

(13)(可选)容器组配置完成后,用户可选择为当前应用配置路由策略,勾选“配置路由策略”选项,选择代理出口方式为服务代理/负载均衡/三层负载均衡,本例选择服务代理。

上方的容器暴露的服务端口,都可以在此处配置网络代理,可以选择 HTTPHTTPSTCPUDP等协议。

tip

上方的容器暴露的服务端口,都可以在此处配置网络代理,可以选择HTTP、HTTPS、TCP、UDP等协议

  • 如果选择负载均衡,使用方式类似服务代理,详细参数可参考负载均衡详情描述小结。
  • 如果选择三层负载均衡,可以从选择的地址池中自动分配一个IP(需要管理员开启自动分配IP能力)给当前服务。
  • 如果想自己指定IP,勾选右侧固定服务IP,点击系统自动分配IP或手动输入IP,如下图所示。

    test

    如果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的容器组最好分散在不同节点上,设置如下。

    test

    限制等级选择“最好”,容器组标签输入“appina”,拓扑域可不填(默认全局),这条策略的含义是“在全局拓扑域上,存在app=a的容器组的节点,最好不要调度当前服务”,也就是说没有其它干扰时,一个节点上最多调度一个当前服务的容器组。

    例 2 ,服务A与服务B通信比较频繁,需要设置当前服务A与服务B必须调度到相同节点上,设置如下所示。拓扑域可以是节点、机架、分区、地域、可用区等各种基础设施概念,通过主机节点标签识别,一个节点标签键是一个拓扑域。服务与服务亲和的规则如下所示。

    服务与服务亲和的规则如下所示
    • in:表示调度到满足主机标签的节点,主机标签值可以多选。
    • Notin:表示不能调度到满足主机标签的节点,主机标签值可以多选。
    • DoesNotExists:表示调度到不存在该主机标签键的节点。
    信息
    • 容忍 :勾选允许设置容忍,则创建服务/编辑时显示增加容忍相关的调度策略。
    1. 创建服务、编辑服务时支持修改调度策略。
    2. 高级设置增加,容忍调度策略。
    3. 输入后,点击添加按钮,显示在下方输入框中,支持添加多个容忍。
    • 安全设置:容器开启特权模式,输入容器的UserID和分配拥有pod卷的fsGroup。

    • 安全组:系统将不同服务分成若干个安全组,安全组内默认放通服务相互访问,安全组外默认隔离(假设每个服务都只属于一个安全组的情况)。

    • 容器组DNS设置:可以设置容器组的主机名和子域,可通过“主机名.子域.my- namespace.svc.cluster-domain.example”域名在集群内直接访问容器组。

    • 历史版本上限:用户可以设置的deployment历史版本个数,最大支持 1000 。

    • 带宽限制:设置服务上传、下载带宽。

    用户可根据实际的业务需求配置是否“获取自定义监控数据”,如果选择获取自定义监控数据,则需填写对应的path和port值监控数据,则需填写对应的path和port值。

    (15)所需的高级设置参数配置完成后,可以单击<创建>按钮,部署应用。或点击右上角“添加服务”,继续添加服务,如下图所示。

    test

    (16)服务添加完成后,单击<创建>按钮,应用新建成功。

    通过应用包文件创建应用

    当容器组的介质是应用包时,配置页面如下图所示。

    test

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

    test

    (2) 查找并选择需要使用的应用包,根据包类型,支持不同的运行环境,选择自己需要的运行环境版本,点击<确定>即可。

    通过应用包添加容器,容器类型只能是应用程序容器,不能是初始化容器,其它参数与通过镜像添加一致,详细参镜像创建应用描述相关内容。

    应用包文件具体指 .jar.war文件,用户可通过[交付中心/应用包管理]上传本地 jarwar包。创建应用时选择需要部署的应用包,然后选择 JavaTomcatWeblogic等运行环境,其它配置同镜像方式,系统将会自动部署为容器应用,无需用户容器化。 应用包容器化部署,会在启动时先将应用包文件上传到服务器(tomcatweblogic等)对应目录上,然后才能启动成功。用户自定义运行环境时,请注意页面提示默认路径。 如果使用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/

    应用变更

    点击 [所有产品]菜单项,进入[容器服务/容器应用]页签,选择对应的集群项目,进入应用列表页面,在应用列表页对应用进行查看拓扑图、启动/停止操作、重新部署和删除操作。

    • 勾选已停止的应用,可以查看拓扑、启动或删除应用。
    • 勾选运行中的应用,可以查看拓扑、停止、重新部署或删除应用。

    具体可执行的操作如下所示。

    • 查看拓扑:点击查看拓扑,该拓扑只有只读权限。
    • 启动操作:选择目标应用并单击启动,在弹出的对话框中,单击<确定>。
    • 停止操作:选择目标应用并单击停止,在弹出的对话框中,单击<确定>。
    • 重新部署:一般用于因为宿主机或其它未知因素导致的服务异常,可以通过手动重新部署,将服务实例部署到其它宿主机上,完成故障恢复。重新部署需要在运行中状态下才可以操作,选择目标应用并单击重新部署按钮,在弹出的对话框中,单击<确定>按钮。
    • 删除操作:选择所要删除的应用并单击删除,在弹出的对话框中,单击<确定>。

    查看应用详情

    点击[所有产品]菜单项,进入[容器服务/容器应用]页签,进入应用列表页面,选择对应的集群项目,选择所要查看详情的应用,点击应用名称进入应用详情页面;用户可以查看服务实例、审计日志和拓扑图,如下图所示。

    test

    如上图,进入应用详情页,用户可操作内容如下。

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