容器应用

云端容器应用

创建云端容器应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 单击右上角“创建云端应用”;

  4. 按照页面提示配置参数:

    表 222 添加云端应用参数

    名称

    必填项

    说明

    名称

    节点数

    应用实例个数

    单节点规格

    单个计算节点的配置

    容器名

    镜像

    镜像适用范围需包含“容器应用” 镜像适用板卡类型需和单节点规格一致

    CPU 最小需求

    容器运行所需的最低 CPU 资源量

    CPU 最大限制

    容器运行可以使用的最大 CPU 资源量

    内存容量最小需求

    容器运行所需的最低 内存 资源量

    内存容量最大限制

    容器运行可以使用的最大 内存 资源量

    板卡数

    AI 板卡数

    根目录大小

    容器临时存储大小

    容器端口

    声明容器对外暴露的端口号,至少添加一个容器端口号,可多选

    启动参数

    输入控制容器运行命令的参数,多个参数以换行分隔

    环境变量

    查看 环境变量

    存活探针

    用于探测容器是否正常工作,不正常则重启实例 当前支持发送HTTP请求和执行命令检查,检测容器响应是否正常

    就绪探针

    用于探测容器是否就绪 如果容器还未就绪,就不会将流量转发到当前实例

    存储卷

    查看 存储卷

    镜像拉取策略

    查看 镜像拉取策略

    应用类型

    查看 应用类型

    容器端口号

    选择容器端口以获得外部访问,创建一个容器,并设置容器端口号

    节点选择器

    指定节点标签的键值对,可不填

  5. 单击“创建”。

    ../../_images/create_cloud_container.png

    添加容器,可以添加多个容器,多个容器资源应等于单节点规格资源。

    ../../_images/create_cloud_app.png

    图 292 添加云端容器应用

环境变量

容器运行环境中设定的变量。可以在应用部署后修改。当前支持手动添加、引用配置和密钥。

  1. 手动添加支持自定义键值对。

  2. 使用配置导入,环境变量名称可自定义输入,环境变量值支持引用配置的属性值,配置创建方法请参见“配置中心”->“配置”。

  3. 使用密钥导入,环境变量名称可自定义输入,环境变量值支持引用密钥的属性值,密钥创建方法请参见“配置中心”->“密钥”。

镜像拉取策略

容器应用提供三种默认的镜像拉取策略:总是拉取镜像、只使用本地镜像和优先使用本地镜像。

  1. 总是拉取镜像的策略是指每次创建容器应用都会重新拉取一次镜像,可以通过在 Deployment 的 yaml 文件中将 imagePullPolicy 设置为 Always 来实现。

  2. 只使用本地镜像的策略是指只有在宿主机上已经存在该镜像时才会拉取,可以通过在 Deployment 的 yaml 文件中将 imagePullPolicy 设置为 IfNotPresent 来实现。

  3. 优先使用本地镜像的策略是指如果宿主机上已经存在该镜像,则使用本地镜像,否则再从远程仓库拉取镜像,可以通过在 Deployment 的 yaml 文件中将 imagePullPolicy 设置为 IfNotPresent ,并在节点上配置本地镜像仓库来实现。

存储卷

支持如下三种类型的卷。

  1. 支持自定义挂载路径,可多选。

  2. 存储应用所需配置信息的资源类型,创建方法请参见“配置中心”->“配置”。

  3. 密钥是一种用于存储应用所需的认证信息、证书、密钥等敏感信息的资源类型,创建方法请参见“配置中心”->“密钥”。

应用类型

支持如下四种应用类型。

  1. HTTP 服务: 应用使用 HTTP 向外提供服务。

  2. gRPC 服务: 应用使用 gRPC 向外提供服务。

  3. 直接映射容器端口: 应用直接映射容器内部端口到外网可以访问的端口。适用于非 HTTP/gRPC 应用,例如Mysql,RTMP,RTSP等服务。

  4. 内部服务: 应用为内部访问使用,不向外暴露接口。

以 “HTTP 服务” 为例,创建 nginx web 应用。

  1. 拉取最新版本 nginx 镜像,并上传平台镜像仓库;

    $ docker pull nginx:1.25.2
    $ docker tag nginx:1.25.2 docker-user.example.com:30080/example/nginx:1.25.2
    $ docker push docker-user.example.com:30080/example/nginx:1.25.2
    
  2. 左侧功能栏选择“资源管理->镜像管理”;

  3. 单击左上角搜索框,搜索“nginx”,单击该镜像的“操作”按钮,在下拉列表中单击“编辑”;

  4. 编辑镜像适用功能为“容器应用”;

    ../../_images/edit_nginx_image_func.png
  5. 创建 html 存储卷,并上传 html 文件;

    ../../_images/upload_nginx_html.png
  6. 修改存储卷内 html 内容以便调整 nginx 站点内容;

例如,将站点 index.html 文件中 Welcome to nginx! 修改为 Welcome to nginx web server!

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx web server!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx web server!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  1. 创建云端容器应用,输入应用名称,选择算力规格,添加容器;

  2. 选择 nginx 镜像,端口选择 80 端口,存储卷挂载到容器路径为 /usr/share/nginx/html;

    ../../_images/config_nginx_container.png
  3. 应用类型选择 HTTP 服务 ,端口号选择 80 端口,单击创建;

../../_images/create_nginx_container.png
  1. 容器应用状态为运行中后,进入详情页,打开访问地址;

../../_images/nginx_container_detail.png
  1. 浏览器输入访问地址,测试访问结果。

../../_images/access_nginx_service.png

以“直接映射容器端口”为例,容器端口分为:容器端口,服务端口和外网访问端口。

  1. 容器端口:容器应用实际监听的端口。

  2. 服务端口:一般默认为容器端口。

  3. 外网访问端口:访问容器应用时使用的端口。一般为 NodePort 类型的外部端口。

创建一个可以远程 ssh 登录的容器应用。

  1. 首先通过 Dockerfile 构建镜像;

Dockerfile 示例

FROM ubuntu:18.04

# (Optional) Install OpenSSH
RUN apt update \
   && apt-get install -y curl openssh-server \
   && apt clean \
   && rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

EXPOSE 22/tcp
ADD entrypoint.sh /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/sbin/sshd", "-D", "-e"]

entrypoint.sh 示例

#!/bin/sh

set -e

case "$1" in
   /usr/sbin/sshd)
      user="${SSH_USER:-root}"
      password="${SSH_PASSWORD:-$(perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..12)')}"

      if [ "$(echo -n $password |wc -m)" -le "10" ];
            then password="$(perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..12)')";
      fi

      printf 'Username: %s\nPassword: %s\n' "$user" "$password"

      if [ "$user" = "root" ]; then
            sed -i '/PermitRootLogin/ c PermitRootLogin yes' /etc/ssh/sshd_config
      fi

      if ! getent passwd "$user" >/dev/null; then
            adduser --quiet --disabled-password --gecos '' "$user"
      fi

      echo "$user:$password" | chpasswd

      mkdir -p /run/sshd
      chmod 0755 /run/sshd

      ;;
esac

exec "$@"
  1. 在 Dockerfile 所在目录执行执行以下命令打包镜像;

    docker build -t docker-user.example.com:30080/project/ubuntu:18.04-sshd .
    

注意不要遗漏命令最后的 . ,镜像名请根据实际情况修改。

  1. 将镜像推送至平台镜像仓库;

  2. 左侧功能栏选择“资源管理->镜像管理”;

  3. 单击左上角搜索框,搜索“ubuntu”,单击该镜像的“操作”按钮,在下拉列表中单击“编辑”;

  4. 编辑镜像适用功能为“容器应用”;

  5. 创建云端容器应用,输入应用名称,选择算力规格,添加容器;

  6. 选择 ubuntu 镜像,端口下拉选择 22 端口;

    ../../_images/edit_ubuntu_container.png
  7. 单击下一步,应用类型选择直接映射容器端口,单击创建;

  8. 容器应用状态为运行中后,点击应用名称,详情页展示应用的访问地址;

../../_images/ubuntu_container_detail.png
  1. 测试远程 ssh 登录,密码可以在日志中查看。

../../_images/ubuntu_container_log.png

灰度发布

用户可以为应用类型为 HTTP 服务的容器添加灰度版本,并设置灰度版本的节点数、流量比例和节点选择器。

../../_images/create_application_gray.png

搜索云端容器应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 单击左上角搜索框;

  4. 在下拉列表中,可基于“名称”,“状态”,“创建人”搜索云端容器应用。

查看云端容器应用详情

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 单击云端容器应用“名称”,进入详情页;

  4. 在详情页面左侧可以查看云端容器应用的项目名称、容器类型、访问地址、节点状态、节点选择器、节点数等信息;

  5. 在详情页面右侧可以查看该云端容器应用的硬件监控,支持查看 CPU、内存、网络流量、AI 板卡等资源利用率。 服务监控展示了该应用的请求量、成功率、延迟等指标的信息;

  6. 单击上方“容器”标签页,可以查看该云端容器应用镜像、容器端口、资源限制、环境变量、存储卷、配置、密钥等信息;

    ../../_images/cloud_application_detail.png
  7. 单击上方“日志”标签页,可以查看该云端容器应用的日志、事件信息。

停止云端容器应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 选择需要停止的云端容器应用,单击该云端容器应用的“操作”按钮;

  4. 在下拉列表中,单击“停止”;

  5. 单击“确认停止”。

启动云端容器应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 选择需要启动的云端容器应用,单击该云端容器应用的“操作”按钮;

  4. 在下拉列表中,单击“启动”。

删除云端容器应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“云端容器应用”标签栏页;

  3. 单个删除:查找需要删除的云端容器应用,单击该应用的“操作”按钮,在下拉列表中,单击“删除”;

  4. 批量删除:单击表格右上角“编辑”按钮,勾选多个需要删除的云端容器应用,单击表格右上角“删除”按钮;

  5. 单击“确认删除”。

边缘端容器应用

2.4 版本新增: 边缘端容器应用功能。

支持将容器应用部署在边缘节点。

添加边缘应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 单击右上角“添加边缘应用”;

  4. 按照页面提示配置参数:

    表 223 添加边缘应用参数

    名称

    必填项

    说明

    名称

    节点数

    应用实例个数,目前暂不支持修改,只支持 1 个

    边缘节点

    目前只能选择 1 个

    容器名

    镜像

    镜像适用范围需包含“边缘应用”

    镜像适用板卡类型需和节点类型一致

    CPU

    CPU 可用范围

    内存容量

    内存可用范围

    MLU

    仅节点为 MLU 时可配

    GPU

    仅节点为 GPU 时可配

    运行指令

    开启特权

    开启后,容器可以访问主机上的任意设备;

    同时 MLU 和 GPU 个数的参数将失效

    网络类型

    支持端口映射和主机网络两种方式, 参见下文 容器网络

    回传文件

    开启后,可以同步边缘端文档到云端, 参见下文 回传文件

  5. 单击“创建”。

    ../../_images/create_edge_app.png

    图 293 添加边缘应用

容器网络

访问容器支持端口映射和主机网络两种方式:

  1. 端口映射

    容器使用单独的虚拟网络,并有独立的 IP。通过配置,将主机(边缘节点)的端口映射进容器内部。

    如图配置主机端口为 8080,容器端口为 80,即可通过访问主机的 8080 端口来访问容器内的 80 端口上的服务。

    ../../_images/create_edge_app_hostport.png

    图 294 配置边缘容器端口映射

  2. 主机网络

    容器使用主机(边缘节点)的网络,共享同一个 IP。

回传文件

3.1 版本新增: 回传边缘应用文件功能。

当功能开启后,边缘应用输出到 /workspace/outputs 目录中的文件会自动同步到云端, 存放在选择的存储卷的以应用名称命名的目录中。

../../_images/enable_backpass.png

图 295 开启或关闭边缘应用的回传文件功能

搜索边缘应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 单击左上角搜索框;

  4. 在下拉列表中,可基于“名称”、“状态”和“创建人”搜索边缘应用。

查看边缘应用详情

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 单击边缘应用“名称”,进入详情页;

  4. 在配置信息页面可以查看边缘应用的创建人、创建时间、节点信息、回传文件地址、容器信息、运行指令等;

  5. 单击上方“监控”标签页,可以查看该边缘应用的 CPU、内存、网络流量等资源利用率;

  6. 单击上方“日志”标签页,可以查看该边缘应用上日志、事件信息;

  7. 右上角也包含启动、停止、删除等操作按钮。

停止边缘应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 选择需要停止的边缘应用,单击该边缘应用的“操作”按钮;

  4. 在下拉列表中,单击“停止”;

  5. 单击“确认停止”。

启动边缘应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 选择需要启动的边缘应用,单击该边缘应用的“操作”按钮;

  4. 在下拉列表中,单击“启动”。

删除边缘应用

  1. 左侧功能栏选择“容器服务->容器应用”;

  2. 单击上方“边缘端容器应用”标签栏页;

  3. 单个删除:查找需要删除的边缘应用,单击该应用的“操作”按钮,在下拉列表中,单击“删除”;

  4. 批量删除:单击表格右上角“编辑”按钮,勾选多个需要删除的边缘应用,单击表格右上角“删除”按钮;

  5. 单击“确认删除”。