操作场景
在容器服务集群中部署应用,您需要先在 TSF 控制台中创建好容器服务集群和命名空间,再使用应用程序包或者镜像来部署应用。本文介绍在容器服务集群中部署应用的操作方法。
前提条件
已准备好容器镜像或者程序包。
操作步骤
步骤1:创建应用
1. 登录 TSF 控制台。
2. 在左侧导航栏,单击 应用管理。
3. 在应用列表,单击新建应用。设置应用信息后,单击提交完成创建。
应用名:填写应用名称,最长60个字符,只能包含小写字母、数字及分隔符(“-”、“_”),且不能以分隔符开头或结尾。
部署方式:选择容器部署。
应用类型:业务应用,中间件应用部署操作请参见 部署微服务网关。
开发语言:选择您的开发语言。
说明:
开发框架:选择您的开发框架。
应用类型:
普通应用:适用于 Spring Cloud 或者 Dubbo 应用。
Mesh 应用:适用于 Service Mesh 方式接入。
原生应用:适用于 Spring Cloud 原生应用
标签:用于分类管理资源,可不选。详情参见 标签。
数据集:选择“无”。用户可以通过数据集管理配置不同的子账号和协作者使用不同资源的权限,详情参阅 数据集管理。
备注:选填,可留空。
4. 单击提交,在弹窗中选择上传镜像,跳转至上传镜像页面。如果选择关闭,您后续可以在应用详情页面选择镜像页签,重新上传镜像/程序包。
步骤2:上传镜像或程序包
您可以选择自己制作镜像并推送到镜像仓库,也可以直接上传程序包,控制台将自动为您制作镜像并上传。
1. 在左侧导航栏选择应用管理,单击刚刚创建好的应用 ID/应用名。
2. 在应用部署组页面,选择镜像标签页。
个人仓库提供基础的云上镜像托管、分发服务,限额使用,仅面向个人使用或企业客户临时测试使用。个人版服务为云上共享服务,即所有个人版用户将共享服务后端及数据存储,且镜像托管及上传下载具有配额限制。容器镜像服务个人版不收取费用,可直接开通使用。
企业仓库提供企业级的独享镜像安全托管服务,面向需要在生产业务中使用云原生制品托管服务的个人及企业客户。当前容器镜像服务企业版支持包年包月或按量计费购买。
说明
您可以单击以下页签查看个人仓库和企业仓库上传镜像的方法。
1. 仓库类型选择个人仓库,单击上传程序包/镜像。
您可以选择自己制作镜像并推送到镜像仓库,也可以直接上传程序包,控制台将自动制作镜像并上传。
镜像:根据使用指引制作镜像并上传。详细操作参见 镜像仓库。
JAR 包部署:直接上传程序包,无需制作镜像。
JDK 版本:支持 KNOA JDK8,KNOA JDK11,OPEN JDK8 和 OPEN JDK17。
上传程序包:单击选择文件,选择编译为 fatjar 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
WAR 包部署:直接上传程序包,无需制作镜像。
上传程序包:单击选择文件,选择编译为 war 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
2. 单击上传程序包并制作镜像,右上角将出现任务进行的状态。
3. 单击任务进行中将看到任务进行的详情,若任务失败,可查看任务失败的原因。
说明:
在 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 JDK8。
上传程序包:单击选择文件,选择编译为 fatjar 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
WAR 包部署:直接上传程序包,无需制作镜像。
镜像仓库:建议选择与容器集群相相同地域的企业镜像服务仓库,访问不同地域的实例将受公网网络出入带宽影响。
JDK 版本:支持 KNOA JDK8 和 OPEN JDK8。
上传程序包:单击选择文件,选择编译为 war 格式的程序包,程序包格式说明参见 程序包格式说明。
程序包版本:填写版本号。
5. 单击上传程序包并制作镜像,右上角将出现任务进行的状态。
6. 单击任务进行中将看到任务进行的详情,若任务失败,可查看任务失败的原因。
部署应用
1. 在左侧导航栏选择应用管理,单击刚刚创建好的应用 ID/应用名。
2. 在应用部署组页面,单击新建部署组,填写部署组信息。
部署组名称:填写部署组名称,不超过60个字符,只能包含字母、数字及分隔符(“-”),且必须以字母开头,数字或字母结尾。
集群:选择应用要部署所在的集群
命名空间:选择应用要部署所在的命名空间。
关联应用:选择部署组关联的应用。关联应用字段决定了后续镜像来源和应用配置来源。
日志配置项:选择日志配置项,用于采集应用的业务日志数据。
日志投递:指定日志的转储方式,将规则指定路径中的日志内容投递到指定的接收端。如果配置为"无",将不投递业务日志。更多关于日志投递的功能说明请参见 日志投递。
标签:用于分类管理资源,可不选。详情参见 标签。
备注:选填,可留空。
3. 单击保存&下一步。
4. 单击部署应用,设置部署信息。
镜像仓库类型:选择个人仓库或者企业仓库。
数据卷:为容器提供存储,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中。
数据卷类型 | 描述 |
使用临时路径 | / |
使用主机路径 | 将容器所在宿主机的文件目录挂载到容器的指定路径中(即对应 Kubernetes 的 HostPath)。您可以根据业务需求,不设置源路径(即对应 Kubernetes 的 EmptyDir)。如果不设置源路径,系统将分配主机的临时目录挂载到容器的挂载点。指定源路径的本地硬盘数据卷适用于将数据持久化存储到容器所在宿主机,EmptyDir 适用于容器的临时存储。 |
使用 NFS 盘 | 只需填写 NFS 路径。使用 NFS 数据卷适用于多读多写的持久化存储,也适用于大数据分析、媒体处理、内容管理等场景。 |
使用已有PersistentVolumeClaim | 使用已有 PersistentVolumeClaim 声明工作负载的存储,自动分配或新建 PersistentVolume 挂载到对应的 Pod 下。主要适用于 StatefulSet 创建的有状态应用。 |
使用 ConfigMap | ConfigMap 以文件系统的形式挂载到 Pod 上,支持自定义 ConfigMap 条目挂载到特定的路径。 |
使用 Secret | Secret 以文件系统的形式挂载到 Pod 上,支持自定义 Secret 条目挂载到特定的路径。 |
启动参数(选填,仅适用普通应用):设置 Java 应用的启动参数。参数会通过
JAVA_OPTS
环境变量带到容器运行环境中,参见 制作镜像 中的使用方式。
在 Java 启动环境变量中应用容器参数应采用 $(var_name) 的形式。说明:
同时打开 TSF Consul 配置中心和北极星独占配置中心开关时:TSF Consul配置中心的优先级更高
仅打开TSF Consul配置中心开关,关闭北极星独占配置中心时,需要添加启动参数:
-Dspring.cloud.polaris.config.enabled=false
仅打开北极星独占配置中心开关,关闭TSF Consul 配置中心时,需要添加启动参数:
-Dspring.cloud.consul.config.enabled=false
在打开北极星独占配置中心时,还需配置北极星地址的参数:
-Dspring.cloud.polaris.address=grpc://xx.xx.xx.xx:xxxx
环境变量:设置应用容器中的变量。
自定义:您可以自定义环境变量
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。
5. 设置高级参数。
参数 | 说明 |
更新方式 | 快速更新:直接关闭所有实例,启动相同数量的新实例。 滚动更新(推荐):对实例进行逐个更新,这种方式可以让您不中断业务实现对服务的更新。 |
更新间隔 | 滚动更新的更新时间间隔。 |
更新策略 | 滚动更新方式可以设置更新策略: 启动新的 Pod,停止旧的 Pod(默认):需确认集群有足够的 CPU 和内存用于启动新的 Pod,否则可能导致集群崩溃。 停止旧的 Pod,启动新的 Pod :适用于需要同时部署多个容器部署组,且集群内剩余资源不够时。 自定义:需要设置允许超出所需规模的最大 Pod 数量和允许最大不可用的 Pod 数量 |
策略配置 | |
健康检查 | 存活检查:用于判断何时重启实例。 就绪检查:用于判断 Pod 何时变为 Ready 状态,会影响滚动更新。默认检查无须用户设置检查规则,会根据服务实例是否注册到注册中心来决定 Pod 变为 ready 状态。 |
Pod 调度策略 | 默认调度:优先保留 yaml 模板中设置的调度策略,如果未设置则按照集群资源调度,可能调度到某一可用区。 尽可能多可用区调度:尽可能调度到集群内不同可用区的主机上,可用性高。 |
服务预热策略 | |
探针配置 | 设置 探针Agent 配置信息。请选择需要挂载的 Agent,并填写版本号,如不填写将默认为您安装最新稳定版本。 注意: 当前仅支持普通应用、Mesh 应用和原生应用类型,不支持微服务网关应用。 服务 Agent:包含注册发现、治理与配置能力。如您使用 Spring Cloud 2020,且未依赖 TSF SDK,请勾选本选项。 可观测 Agent:如您使用 Spring Cloud 2020,请勾选本选项。相关开发文档,请参见 使用 Agent 进行无侵入应用开发。 |
6. 设置资源配置信息。
参数 | 说明 |
健康检查 | request:用于预分配资源,当集群中的节点没有 request 所要求的资源数量时,会导致无法创建容器。 limit:用于设置容器使用资源的最大上限,避免异常情况下节点资源消耗过多。 |
agent 容器 | 负责日志、JVM 监控、调用链数据的采集,如果不部署 agent 容器将影响这些功能的使用。agent 容器的内存 limit 和日志量有关,通常使用默认值 400MiB 即可,如果出现 OOM 可适当增加 limit 值。 |
istio_proxy 容器 | 负责 Mesh 服务注册、流量转发等任务,通常使用默认的资源限制即可。 说明: 仅通过容器部署的 Mesh 应用涉及。 |
实例数量 | 实例数和实例资源限制的乘积不能超过集群剩余的可用资源。单击检测是否有足够资源可以检测集群中是否有足够剩余的可用资源。检测时间较久,请您耐心等待。由于 K8S 集群资源进行实时调度,真实资源情况以您实际部署时为准,您可以通过部署组状态判断部署是否成功,通过部署事件、日志分析部署失败原因。 |
7. 设置访问配置信息。
参数 | 说明 |
Service | 负责 Mesh 服务注册、流量转发等任务,通常使用默认的资源限制即可。默认开启,关闭 Service 后,该Service下的负载均衡将一并销毁,销毁后不可恢复,请谨慎操作。 |
网络访问方式 | |
端口映射 | 容器端口与服务端口的映射关系。 |
Session Affinity | Client:基于来源IP做会话保持,开启后设置最大会话保持时间。 None:关闭会话保持。 |
说明:
每次部署应用的时候,会自动向容器中添加3个 Label:platform,qcloud-app,qcloud-app-name。
8. 单击提交,等待部署完成。
说明:
网络访问方式
容器部署组的访问方式定义访问后端 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。常见问题