操作场景
在容器服务集群中部署应用,您需要先在 TSF 控制台中创建好容器服务集群和命名空间,再使用应用程序包或者镜像来部署应用。本文介绍在容器服务集群中部署应用的操作方法。
前提条件
已准备好容器镜像或者程序包。
操作步骤
步骤1:创建应用
1. 登录 腾讯微服务平台控制台,在左侧导航栏,选择应用管理。
2. 在业务应用的应用列表,单击新建。设置应用信息后,单击提交完成创建。
应用名:填写应用名称,最长60个字符,只能包含小写字母、数字及分隔符(“-”、“_”),且不能以分隔符开头或结尾。
部署方式:选择容器部署。
开发语言:选择您的开发语言。
说明:
开发框架:选择您的开发框架。
标签:用于分类管理资源,可不选。管理方法详情请参见 标签。
备注:选填,可留空。
数据集:选择“无”。用户可以通过数据集管理配置不同的子账号和协作者使用不同资源的权限,管理方法详情请参见 数据集管理。
3. 单击下一步,进入注册配置治理的配置。
步骤2:上传镜像或程序包
您可以选择自己制作镜像并推送到镜像仓库,也可以直接上传程序包,控制台将自动为您制作镜像并上传。
1. 登录 腾讯微服务平台控制台,在左侧导航栏,选择应用管理,在业务应用列表中,单击刚刚创建好的应用 ID/名称,进入应用详情。
2. 在应用详情页,查看制品卡片。
个人仓库提供基础的云上镜像托管、分发服务,限额使用,仅面向个人使用或企业客户临时测试使用。个人版服务为云上共享服务,即所有个人版用户将共享服务后端及数据存储,且镜像托管及上传下载具有配额限制。容器镜像服务个人版不收取费用,可直接开通使用。
企业仓库提供企业级的独享镜像安全托管服务,面向需要在生产业务中使用云原生制品托管服务的个人及企业客户。当前容器镜像服务企业版支持包年包月或按量计费购买。
说明:
您可以单击以下页签查看个人仓库和企业仓库上传镜像的方法。
1. 仓库类型选择个人仓库,单击上传程序包/镜像。
2. 您可以选择自己制作镜像并推送到镜像仓库,也可以直接上传程序包,控制台将自动制作镜像并上传。

镜像:根据使用指引制作镜像并上传。详细操作参见 镜像仓库。
JAR包部署:直接上传程序包,无需制作镜像。
JDK 版本:支持 KNOA JDK8,KNOA JDK11,OPEN JDK8 和 OPEN JDK17。
上传程序包:单击选择文件,选择编译为 fatjar 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
WAR包部署:直接上传程序包,无需制作镜像。
上传程序包:单击选择文件,选择编译为 war 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
3. 单击上传程序包并制作镜像,右上角将出现任务进行的状态。
4. 单击任务进行中将看到任务进行的详情,若任务失败,可查看任务失败的原因。
说明:
在 TCR 镜像场景下,在 JAR包部署 / WAR包部署需在 TCR 镜像仓库开通公网访问控制策略,开通
0.0.0.0/0
白名单。使用企业仓库时,您需要先关联企业仓库再上传镜像。
1. 仓库类型选择企业仓库,单击关联/解绑 TCR 镜像仓库。
2. 在弹窗中选择需要绑定的 TCR 镜像仓库。

操作类型:选择关联镜像仓库。
说明:
地域:选择镜像仓库地域。
实例:选择容器镜像服务 TCR 企业版实例。
命名空间:选择命名空间
镜像仓库:选择要绑定的 TCR 镜像仓库。
3. 单击确定,完成 TCR 镜像仓库绑定。
4. 在页面上方单击上传程序包/镜像。
说明:
您可以选择自己制作镜像并推送到镜像仓库,也可以直接上传程序包,控制台将自动制作镜像并上传。

镜像:单击下方生成指令,根据生成的使用指引制作镜像并上传。详细操作参见 镜像仓库。
JAR包部署:直接上传程序包,无需制作镜像。
镜像仓库:建议选择与容器集群相相同地域的企业镜像服务仓库,访问不同地域的实例将受公网网络出入带宽影响。
JDK 版本:支持 KNOA JDK8,KNOA JDK11,OPEN JDK11,OPEN JDK8。
上传程序包:单击选择文件,选择编译为 fatjar 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
WAR包部署:直接上传程序包,无需制作镜像。
镜像仓库:建议选择与容器集群相相同地域的企业镜像服务仓库,访问不同地域的实例将受公网网络出入带宽影响。
上传程序包:单击选择文件,选择编译为 war 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
5. 单击上传程序包并制作镜像,右上角将出现任务进行的状态。
6. 单击任务进行中将看到任务进行的详情,若任务失败,可查看任务失败的原因。
步骤3:部署应用
1. 在左侧导航栏选择应用管理,单击刚刚创建好的应用 ID/名称。
2. 在应用部署菜单,单击应用部署,将会创建一个部署组进行应用部署。
3. 填写部署组信息。
集群:选择应用要部署所在的集群
命名空间:选择应用要部署所在的命名空间。
部署组名称:填写部署组名称,不超过60个字符,只能包含字母、数字及分隔符(“-”),且必须以字母开头,数字或字母结尾。
标签:非必选。用于分类管理资源。详情参见 标签。
备注:选填,可留空。
4. 单击下一步,进行部署配置。
容器类型:选择 Deployment。
agent容器:负责日志、JVM 监控、调用链数据的采集,如果不部署 agent 容器将影响这些功能的使用。agent 容器的内存 limit 和日志量有关,通常使用默认值 400MiB 即可,如果出现 OOM 可适当增加 limit 值。应用容器的资源配置参见 容器部署组资源限制。
request:用于预分配资源,当集群中的节点没有 request 所要求的资源数量时,会导致无法创建容器。
limit:用于设置容器使用资源的最大上限,避免异常情况下节点资源消耗过多。
实例数量:选择实例数量。实例数和实例资源限制的乘积不能超过集群剩余的可用资源。单击检测是否有足够资源可以检测集群中是否有足够剩余的可用资源。检测时间较久,请您耐心等待。由于 K8S 集群资源进行实时调度,真实资源情况以您实际部署时为准,您可以通过部署组状态判断部署是否成功,通过部署事件、日志分析部署失败原因。
5. 进行容器配置。TSF支持在一个部署组添加多个容器,部署组内所有容器将共享生命周期。
镜像仓库类型:选择个人仓库或者企业仓库。
选择镜像:选择需要进行应用部署的镜像。
资源配置:设置CPU和内存配置。
环境变量:设置应用容器中的变量。
自定义:您可以自定义环境变量
Field:容器路径,包含 metadata.name、metadata.namespace、spec.nodeName、spec.serviceAccountName、 status.hostIP、status.podIP。
ResourceField:容器资源,通常支持资源限制和请求,例如 limits.cpu、limits.memory、limits.ephemeral-storage、requests.cpu、requests.memory 和 requests.ephemeral-storage。
JAVA_OPT(选填): 设置 Java 应用的启动参数。参数会通过
JAVA_OPTS
环境变量带到容器运行环境中,参见 制作镜像 中的使用方式。在 Java 启动环境变量中应用容器参数应采用 $(var_name) 的格式。容器高级配置:设置容器的高级配置,支持对容器进行精细化管理。
特权容器:默认关闭,开启后,容器将拥有Host宿主机中的root权限,运行特权容器存在安全性风险。
运行命令:支持自定义配置 Entrypoint 和 CMD 默认命令。
运行参数:单击查看容器运行和参数示例,查看对应的运行参数示例。
生命周期钩子:监听容器生命周期的特定事件,并在事件发生时执行已注册的回调函数,运行用户指定的程序代码。支持PostStart和PreStop两个阶段进行自定义。
容器健康检查:支持配置存活检查和就绪检查。关于健康检查的作用和配置详情参见健康检查。
存活检查:用于判断何时重启实例。
就绪检查:用于判断 Pod 何时变为 Ready 状态,会影响滚动更新。默认检查无须用户设置检查规则,会根据服务实例是否注册到注册中心来决定 Pod 变为 ready 状态。
6. 设置数据卷配置信息(选填)。数据卷为容器提供存储,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中。
数据卷类型 | 描述 |
使用临时路径 | / |
使用主机路径 | 将容器所在宿主机的文件目录挂载到容器的指定路径中(即对应 Kubernetes 的 HostPath)。您可以根据业务需求,不设置源路径(即对应 Kubernetes 的 EmptyDir)。如果不设置源路径,系统将分配主机的临时目录挂载到容器的挂载点。指定源路径的本地硬盘数据卷适用于将数据持久化存储到容器所在宿主机,EmptyDir 适用于容器的临时存储。 |
使用 NFS 盘 | 只需填写 NFS 路径。使用 NFS 数据卷适用于多读多写的持久化存储,也适用于大数据分析、媒体处理、内容管理等场景。 |
使用已有PersistentVolumeClaim | 使用已有 PersistentVolumeClaim 声明工作负载的存储,自动分配或新建 PersistentVolume 挂载到对应的 Pod 下。主要适用于 StatefulSet 创建的有状态应用。 |
使用 ConfigMap | ConfigMap 以文件系统的形式挂载到 Pod 上,支持自定义 ConfigMap 条目挂载到特定的路径。 |
使用 Secret | Secret 以文件系统的形式挂载到 Pod 上,支持自定义 Secret 条目挂载到特定的路径。 |
7. 设置访问配置信息。容器部署组支持添加多个 Service 作为请求入口。
参数 | 说明 |
名称 | Service 的名称标识。 |
访问方式 | |
端口组 | 定义服务端口、容器端口,协议,名称。 |
Session Affinity | Client:基于来源IP做会话保持,开启后设置最大会话保持时间。 None:关闭会话保持。 |
说明:
每次部署应用的时候,会自动向容器中添加3个 Label:platform,qcloud-app,qcloud-app-name。
8. 设置调度策略(选填)
调度策略类型 | 说明 |
节点调度策略 | 基于节点设置Pod与节点间的调度策略,满足工作负载与节点的亲和/反亲和调度。 |
可用区打散策略 | 根据打散策略将工作负载的Pod平均打散部署在各个可用区,提高应用的高可用性,至少需要两个可用区。 |
Pod调度策略 | 通过设置多条Pod互相之间的调度策略,满足Pod与Pod之间亲和/反亲和调度。 |
容忍调度策略 | Pod是否容忍污点。 |
9. 设置重启策略。
10. 单击下一步,设置发布策略。
参数 | 说明 |
发布方式 | 滚动更新(推荐):对实例进行逐个更新,这种方式可以让您不中断业务实现对服务的更新。 立即部署:直接关闭所有实例,启动相同数量的新实例。 |
滚动间隔 | 滚动更新的更新时间间隔。 |
滚动策略 | 滚动更新方式可以设置更新策略: 启动新的 Pod,停止旧的 Pod(默认):需确认集群有足够的 CPU 和内存用于启动新的 Pod,否则可能导致集群崩溃。 停止旧的 Pod,启动新的 Pod :适用于需要同时部署多个容器部署组,且集群内剩余资源不够时。 自定义:需要设置允许超出所需规模的最大 Pod 数量和允许最大不可用的 Pod 数量 |
策略配置 |
11. 单击下一步,设置服务注册配置治理信息。
注意:
是否开启服务预热:设置服务预热策略。当更新方式选择滚动更新时,建议开启服务预热,关于服务预热的作用和配置详情参见 服务预热。
接入服务Agent:选择是否开启通过字节码注入服务Agent。
Istio_proxy:负责 Mesh 服务注册、流量转发等任务,通常使用默认的资源限制即可。
说明:
仅通过容器部署的 Mesh 应用涉及。
12. 设置可观测信息。
日志配置项:将设定业务日志的采集路径和解析规则。
日志投递:日志投递规则将设定日志的转储方式,将规则指定路径中的日志内容投递到指定的接收端。
Agent配置 :若使用 Spring Cloud 2020,请勾选可观测 Java Agent 配置选项开启调依赖等高级监控能力。
服务 Agent:包含注册发现、治理与配置能力。如您使用 Spring Cloud 2020,且未依赖 TSF SDK,请勾选本选项。
可观测 Agent:如您使用 Spring Cloud 2020,请勾选本选项。相关开发文档,请参见 使用 Agent 进行无侵入应用开发。
13. 单击发布,等待部署完成。
访问方式
容器部署组的访问方式定义访问后端 Pod 的访问方式,并提供固定的虚拟访问 IP。您可以在 Service 中通过设置来访问后端的 Pod,不同访问方式的服务可提供不同网络能力。TSF 目前提供以下四种服务访问方式:
访问方式 | 说明 |
提供公网访问 | 使用 Service 的 Loadbalance 模式,公网 IP 可直接访问到后端的 Pod,适用于 Web 前台类的服务。创建完成后的服务在集群外可通过负载均衡域名或 IP + 服务端口访问服务,集群内可通过部署组名称 + 服务端口访问服务。 |
仅在集群内访问 | Headless Service:不创建用于集群内访问的ClusterIP,访问Service名称时返回后端Pods IP地址,用于适配自有的服务发现机制。使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离。创建完成后的服务,要在同一个命名空间的容器内,通过部署组名称 + 服务端口访问服务。 |
VPC 内网访问 | 使用 Service 的 Loadbalance 模式,指定 annotations:service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: subnet-xxxxxxxx ,即可通过内网 IP 直接访问到后端的 Pod。创建完成后的服务在集群外可通过负载均衡域名或 IP + 服务端口访问服务,集群内可通过部署组名 + 服务端口访问服务。 |
主机端口(NodePort)访问 | 提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node。创建完成后的服务可以通过云服务器 IP + 主机端口或部署组名称 + 服务端口访问服务。 |
容器部署组资源限制
实例资源限制说明
新建容器部署组时可以设置实例数量和每个实例资源限制,实例的资源限制包括两个指标:CPU 和内存大小。
Request:容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配资源量 >= 容器资源请求数时才允许将容器调度到该节点。但 Request 参数不限制容器的最大可使用资源值。
Limit: 容器能使用的资源最大值。
说明:
当
实例数量 * Request值 > 集群剩余的资源
时,会提示 "资源不足,请导入节点" 的提示语。此时用户需要去集群页面导入云服务器以扩充资源。例如实例数量为2,实例资源Request是CPU=0.5核,内存=1GB
,而集群剩余资源为CPU=0.8核,内存=2GB
时, 由于 CPU 核数资源不够,会提示资源不足的错误。Java 应用的最大堆内存和容器内存大小关系
Java 应用通常需要设置 JVM 启动参数,包括最大堆内存(-Xmx)的设置。建议 JVM 最大堆内存和容器实例内存资源大小的关系符合以下条件,避免容器 OOM(Out of memory):
容器内存 Request >= 1.25 * JVM 最大堆内存 ;容器内存 Limit >= 2 * JVM 最大堆内存;
例如,启动参数中设置
-Xmx
为 1024m,应用容器实例内存的 Request 至少为 1280MiB,Limit 至少为 2560MiB。常见问题