华为云云容器实例CCI实战:无服务器容器部署、弹性伸缩与日志监控配置
一、背景:为什么选择云容器实例
很多团队已经把应用容器化了,但并不想再维护一套Kubernetes集群。买节点、升级组件、处理节点故障,这些运维成本对中小业务往往偏高。华为云的云容器实例(Cloud Container Instance,简称CCI)面向的就是这类场景:你只需要提供容器镜像和资源配置,平台负责调度与运行,按实际使用的CPU、内存计费,不必自己管理底层节点。
CCI适合短期任务、突发流量、微服务试运行,以及希望把部分无状态服务从传统弹性云服务器(ECS)迁到按需计费模型的场景。它和云容器引擎(CCE)的定位不同:CCE提供完整的Kubernetes能力,适合需要自定义调度、复杂网络策略和大量常驻负载的团队;CCI更偏“交钥匙”的无服务器容器体验。本文以部署一个简单的Web容器为例,梳理从创建命名空间、配置负载、挂载存储、暴露访问,到弹性伸缩、日志查看和排障的完整流程。控制台菜单名称可能随版本变化,请以实际控制台和官方文档为准。
二、核心概念
命名空间(Namespace):CCI中资源隔离的基本单位,同一账号下可以按环境或业务创建多个命名空间,例如 test、prod。创建时通常要关联虚拟私有云(VPC)和子网,后续负载会跑在该网络内。
负载(Workload):真正运行的容器集合,常见类型包括无状态负载(类似Deployment)和任务类负载(跑完即停)。创建时需要指定容器镜像、CPU与内存规格、副本数、环境变量、端口等。
镜像来源:可以从容器镜像服务(SWR)私有仓库拉取,也可以使用部分公开镜像源。生产环境建议把自建镜像推到SWR,并使用镜像拉取密钥或委托完成鉴权。
弹性伸缩:根据CPU、内存使用率或自定义指标自动调整副本数,适合流量波动明显的无状态服务。
网络与访问:负载默认落在所选VPC子网中。对外提供服务时,通常结合弹性负载均衡(ELB)或服务暴露能力,把流量引入容器端口。具体暴露方式以控制台当前支持的选项为准。
三、准备工作
动手前建议确认以下几项:
- 已开通CCI相关服务,账号具备创建命名空间和负载的权限;
- 准备好目标区域的VPC与子网,子网网段规划要预留足够地址给容器网卡;
- 若使用私有镜像,先在SWR中创建组织与镜像仓库,并把镜像推送上去;
- 明确容器监听端口、健康检查路径、所需环境变量和配置文件。
镜像推送可以用本地Docker配合SWR登录命令完成。登录与推送命令因区域而异,请到镜像服务控制台复制官方提示,不要把访问密钥写进脚本仓库。推送成功后,记下完整的镜像地址,后面创建负载时会用到,格式一般类似:
<SWR区域地址>/<组织名>/<镜像名>:<标签>
四、创建命名空间
进入云容器实例控制台,选择与业务相同的区域,创建命名空间:
- 填写名称,例如 demo-ns;
- 选择网络类型并关联已有VPC、子网;
- 按需开启或关联日志、监控等附加能力;
- 确认后等待命名空间变为可用状态。
命名空间一旦创建,网络归属通常不易随意更改,测试环境和生产环境建议分开,避免误操作影响到正式流量。若子网开启了网络ACL,还需放行容器与镜像仓库、日志上报、业务依赖之间的必要访问。
五、创建并运行负载
在命名空间下创建无状态负载,关键配置如下。
基本信息:负载名称、副本数(先设为1,跑通后再扩)。
容器配置:
- 镜像:选择SWR中的镜像及标签;
- CPU与内存:按应用实测需求选择,过小会导致频繁重启,过大则浪费费用;
- 容器端口:填写应用监听端口,例如8080;
- 环境变量:把数据库地址、主题名等配置以环境变量注入,敏感信息建议结合密钥管理,不要明文写进镜像;
- 生命周期与探针:配置启动命令、就绪探针和存活探针。HTTP探针可指向
/health这类路径,TCP探针则探测端口是否可连。
示意性的探针配置可以用YAML片段表达(字段名以控制台或官方模板为准):
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
存储挂载(可选):若应用需要持久化或共享配置,可挂载云硬盘或文件存储到容器路径。日志目录、上传目录要挂到持久卷,避免容器重建后数据丢失。只读配置可以用配置项或密钥挂载为文件。
升级策略:无状态负载一般支持滚动升级,可设置最大不可用副本数,降低发版时的中断面。
创建后在负载详情中观察Pod或实例状态,全部Ready后说明容器已起来。若一直处于创建中或失败,优先看事件信息和容器日志。
六、对外暴露与联通验证
容器在VPC内部跑起来之后,还需要让调用方能访问到它。常见做法是:
- 在负载或服务配置中暴露容器端口;
- 创建或复用ELB,把监听器后端指向CCI负载提供的后端地址或服务;
- 安全组、网络ACL放行ELB到容器端口的流量;
- 从同一VPC内的ECS上用curl验证,例如:
curl -sS -o /tmp/out.txt -w "%{http_code}\n" "<探测URL,例如内网主机:8080/health>"
cat /tmp/out.txt
注意:正文和命令中不要写真实公网域名或具体IP,用占位符替换即可。验证时确认返回码为200,并且响应体符合预期。若经过七层ELB,还可以再测转发路径、主机头是否匹配。
七、配置弹性伸缩
流量有波峰波谷时,固定副本要么浪费、要么扛不住。在负载的弹性伸缩配置中:
- 开启自动伸缩,设置最小、最大副本数,例如最小2、最大10;
- 选择指标,常用CPU使用率或内存使用率;
- 设置阈值与持续时长,例如平均CPU大于70%持续若干个周期则扩容,低于30%则缩容;
- 保存后用压测工具在测试环境观察副本变化。
经验上:扩容要足够快以应对突发,缩容要保守一些,避免刚扩出来又立刻缩回去造成抖动。有状态或不能随便丢连接的服务,要额外评估会话保持与优雅终止时间。
八、日志与监控
排障离不开日志。可以把容器标准输出对接云日志服务(LTS),或在控制台直接查看实例日志。建议在应用内使用结构化日志(JSON一行一条),并带上请求ID,方便检索。
监控方面,关注CPU、内存、重启次数、副本可用数。结合云监控服务(CES)配置告警:副本可用数低于期望、重启次数短时间激增、CPU持续打满等,都应通知到值班人员。告警通知可走消息通知服务(SMN)主题。
九、注意事项
- 规格与成本:CCI按资源用量计费,空闲也要及时缩容或删除测试负载,避免账单意外增长。
- 镜像体积:镜像越大,拉取越慢,冷启动越明显。多阶段构建、精简基础镜像能明显改善。
- 网络规划:命名空间绑定的子网地址要充足,地址耗尽会导致新实例创建失败。
- 密钥与配置:访问密钥、数据库口令不要打进镜像层,使用环境变量、密钥对象或密钥管理服务注入。
- 优雅退出:收到终止信号后要能处理完当前请求再退出,避免滚动升级时大量报错。
- 权限最小化:拉取镜像、写日志、读密钥的权限分开授予,避免一个委托权限过大。
十、常见问题
问:负载一直Pending或创建失败?
答:检查子网地址是否耗尽、镜像地址与标签是否正确、镜像拉取鉴权是否成功、CPU内存配额是否超限,以及事件列表中的报错原文。
问:容器反复重启?
答:多半是存活探针失败、启动命令错误、端口未监听,或内存超限被杀。先看日志最后几十行,再对照探针路径和资源规格。
问:集群外访问不通?
答:确认服务是否已暴露、ELB监听与后端端口是否一致、安全组是否放行、应用是否只监听了本地回环地址(应改为监听全部网卡或容器网卡地址,具体写法按框架配置)。
问:和CCE怎么选?
答:需要完整Kubernetes生态、自定义CRD、复杂调度时选CCE;只想跑容器、少管节点、按需付费时优先考虑CCI。也可以混合:核心常驻在CCE,突发任务走CCI。
十一、总结
云容器实例把“跑容器”这件事简化成了提交镜像和声明资源。本文从命名空间与网络准备、负载创建、探针与存储、对外暴露、弹性伸缩,到日志监控和排障,给出了一条可落地的路径。实际落地时记住四点:镜像与密钥管理要规范,网络与安全组要提前规划,探针和优雅退出决定稳定性,伸缩与告警决定成本与可运维性。更细的参数限制与计费项,请以控制台和官方文档为准。
- 点赞
- 收藏
- 关注作者
评论(0)