华为云云容器实例CCI从入门到生产:全场景对接使用指南
前言:云原生时代的Serverless容器
在云原生浪潮席卷整个软件行业的今天,容器技术已经成为应用交付的标准形态。然而,传统的容器运维方式仍然需要开发者关注底层服务器集群的创建、扩容、管理和维护。华为云云容器实例(Cloud Container Instance,简称CCI)正是为了解决这一痛点而生的Serverless容器服务。它让开发者彻底从服务器管理中解放出来,真正做到了“只看容器,不见服务器”。
CCI的核心价值在于将底层基础设施的复杂性完全封装。开发者无需提前规划服务器资源规格,无需关心节点故障后如何恢复,只需要通过控制台、命令行工具或API直接提交容器镜像,CCI就会自动完成资源的调度、运行和弹性伸缩。这种模式大幅缩短了从代码提交到应用上线的时间周期,让团队可以聚焦于业务逻辑本身而非基础设施运维。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
本文将手把手带你从零开始,全面掌握华为云CCI的对接与使用方法。无论你是初次接触容器技术的新手,还是已经熟悉Kubernetes的老手,都能在本文中找到切实可用的操作指南和最佳实践。
一、CCI的核心特性与产品架构
要深刻理解如何使用CCI,首先需要搞清楚它的底层逻辑和技术优势。CCI是基于Serverless架构理念构建的容器服务,其核心特征如下。
1.1 无需管理服务器集群
传统方式下,运行一个容器应用需要经过:准备服务器资源→安装操作系统→配置容器运行时→搭建Kubernetes集群→部署应用等一系列复杂步骤。而CCI将所有这些底层工作交给云平台自动完成,用户直接提交容器镜像即可运行,无需感知集群的存在。
1.2 秒级弹性伸缩能力
CCI的Serverless融合资源池集成了网络、存储等服务,用户可以自定义弹性伸缩策略,实现秒级的资源扩缩容。当业务流量突增时,CCI能够迅速创建新的容器实例分担负载;流量回落后,自动释放闲置资源,真正做到按需使用。
1.3 虚拟机级别的安全隔离
安全性是生产环境容器部署的核心考量。CCI结合自有硬件虚拟化加速技术和定制化容器操作系统,借助擎天软硬协同架构,为每个容器实例提供与虚拟机同等级别的安全隔离能力。不同用户、不同租户的容器实例之间相互隔离,互不影响。
1.4 全兼容Kubernetes生态
CCI在API层完全兼容原生Kubernetes,这意味着你现有的Kubernetes YAML文件、kubectl命令、Helm Charts都可以无缝迁移到CCI上运行。这种兼容性大大降低了学习和迁移成本,也让开发者可以享受到Kubernetes生态庞大的工具链支撑。
二、CCI支持的三种对接使用方式
华为云CCI提供了三种主流的对接使用途径:控制台图形界面操作、kubectl命令行工具操作、REST API编程操作。三种方式各有适用场景,下面逐一介绍。
2.1 方式一:通过CCI控制台操作
控制台是最直观的入门方式,适合初次体验CCI或进行快速验证。进入CCI服务控制台后,界面清晰展示了命名空间、工作负载、配置中心、网络管理等多个功能模块。
快速入门:部署一个静态Web应用
以部署一个2048静态游戏应用为例,控制台操作的完整流程如下:
- 准备工作:注册华为账号并完成实名认证;如需使用ccictl工具可提前下载配置
- 构建镜像:编写Dockerfile,将静态页面打包成容器镜像
- 上传镜像:将构建好的镜像推送到华为云SWR容器镜像仓库
- 创建命名空间:在CCI中创建一个命名空间,用于资源隔离和管理
- 创建工作负载:配置镜像地址、容器规格(如1核CPU、2G内存)、环境变量等
- 配置访问方式:设置Service类型为LoadBalancer,绑定ELB公网IP
- 验证访问:通过分配的ELB公网IP访问部署好的应用
控制台操作的优点是学习曲线平缓,所有配置选项都有图形化的表单和说明,非常适合了解CCI各项功能时使用。
2.2 方式二:通过kubectl命令行操作
对于习惯使用命令行工作的开发者来说,kubectl是最熟悉的高效工具。CCI完全兼容原生Kubectl,只需正确配置kubeconfig即可。
配置kubectl连接CCI的步骤
第一步,下载并安装kubectl命令行工具,确保版本与CCI兼容。第二步,从CCI控制台获取kubeconfig配置文件,该文件包含了API Server地址、认证凭据等连接信息。
在非安全环境(如本地开发机)中配置kubectl时,需要注意避免将敏感信息硬编码。推荐的配置方式是通过环境变量注入AK/SK信息:
export ACCESS_KEY_ID={你的Access Key}
export SECRET_ACCESS_KEY={你的Secret Key}
export CREDENTIAL_CACHE=false
kubectl get ns
配置完成后,就可以像操作任何Kubernetes集群一样使用kubectl命令管理CCI中的资源。例如查看Pod状态、创建Deployment、查询Service等:
# 查看所有命名空间
kubectl get namespaces
# 查看指定命名空间下的Pod
kubectl get pods -n my-namespace
# 创建资源
kubectl apply -f deployment.yaml
# 查看日志
kubectl logs my-pod-name -n my-namespace
2.3 方式三:通过API编程调用
CCI提供了一整套REST API接口,支持通过HTTP/HTTPS协议进行编程调用。这种方式适合将CCI集成到CI/CD流水线、自动化运维平台或第三方应用中。
API创建Nginx负载的完整流程
通过API创建一个运行nginx的工作负载需要依次调用三个接口:
步骤1: 调用创建Namespace接口
POST /api/v2/namespaces
{
"apiVersion": "cci/v2",
"kind": "Namespace",
"metadata": {
"name": "namespace-test"
}
}
步骤2: 调用创建Network接口,关联VPC和子网
POST /apis/yangtse/v2/namespaces/namespace-test/networks
{
"apiVersion": "yangtse/v2",
"kind": "Network",
"metadata": {
"name": "test-network",
"namespace": "namespace-test",
"annotations": {
"yangtse.io/domain-id": "{账号ID}",
"yangtse.io/project-id": "{项目ID}"
}
},
"spec": {
"networkType": "underlay_neutron",
"securityGroups": ["{安全组ID}"],
"subnets": [{
"subnetID": "{子网ID}"
}]
}
}
步骤3: 调用创建Deployment接口
POST /apis/cci/v2/namespaces/namespace-test/deployments
{
"kind": "Deployment",
"apiVersion": "cci/v2",
"metadata": {
"name": "nginx",
"labels": {"app": "nginx"}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {"app": "nginx"}
},
"template": {
"metadata": {"labels": {"app": "nginx"}},
"spec": {
"containers": [{
"name": "nginx",
"image": "nginx:latest",
"resources": {
"requests": {"cpu": "1", "memory": "2Gi"},
"limits": {"cpu": "1", "memory": "2Gi"}
}
}]
}
}
}
}
三、网络访问配置:让容器对外服务
容器部署完成后,如何让外界访问到容器内的服务,是最核心的网络问题。CCI提供了多种网络访问方案,覆盖不同场景的需求。
3.1 Service负载均衡访问
Service是Kubernetes中用于定义Pod网络访问接口的资源,CCI支持LoadBalancer类型的Service,通过华为云ELB(弹性负载均衡)实现流量分发。
内网访问配置
适用于同一VPC内的服务间调用,以及云服务内部资源(如ECS)与CCI中负载的互通场景。创建LoadBalancer类型的Service时,配置ELB类型为私网类型。该方式支持配置IP地址黑白名单来控制访问权限。
公网访问配置
适用于从互联网外部访问容器应用的场景。创建LoadBalancer类型的Service时,配置ELB为公网类型,系统会自动分配一个公网IP地址。用户可以通过该公网IP加端口访问容器内的服务,同时也可以配置黑白名单来限制源IP访问。
公网访问方式的Service YAML配置示例:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
namespace: my-namespace
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: my-app
关于Service创建的约束需要注意:CCI当前仅支持创建LoadBalancer类型的Service,支持配置独享型ELB。Service创建完成后不支持修改监听器协议(如将TCP改为UDP),如需修改需删除后重新创建。
3.2 Ingress七层路由访问
当需要实现基于域名和URL路径的精细化路由时,Ingress是最合适的选择。Ingress工作在第7层(HTTP/HTTPS),可以根据请求的Host头或路径将流量转发到不同的后端Service。
CCI中使用ELB作为Ingress控制器,创建Ingress资源后会自动配置ELB的七层转发规则。示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: my-namespace
labels:
app: redis # 必须与后端Service的labels一致
spec:
rules:
- host: www.example.com
http:
paths:
- path: /api
backend:
serviceName: api-service
servicePort: 8080
- path: /
backend:
serviceName: web-service
servicePort: 80
这里有一个关键的配置要点:为了让创建的Ingress资源在CCI工作负载详情页面的“访问方式”页签中显示,需要给Ingress添加labels标签,且标签必须与后端Service的selector.matchLabels保持一致。
3.3 容器访问公网
除了让外界访问容器,有时容器本身也需要访问外部网络(如下载依赖包、调用第三方API)。这种情况需要通过NAT网关服务配置SNAT规则,使得容器能够访问公网。
四、存储对接:持久化数据保存
容器的生命周期是短暂的,当容器重启或销毁时,内部数据会随之丢失。对于需要持久化保存的数据,必须对接外部存储服务。
CCI支持的云存储类型包括:云硬盘(EVS)、文件存储(SFS)、极速文件存储(SFS Turbo)以及对象存储(OBS)。
4.1 云硬盘EVS对接
EVS提供块存储服务,类似于物理服务器上的硬盘。适用于需要高性能随机读写的场景,如数据库存储。EVS通过PVC(PersistentVolumeClaim)方式挂载到容器中,一个云硬盘同一时间只能被一个Pod挂载。需要注意的是,EVS存储需要人工配置备份策略以保障数据安全。
4.2 文件存储SFS对接
SFS提供标准NFS协议的文件共享存储,支持多个Pod同时读写同一个存储卷,适用于需要共享数据的场景,如配置文件共享、日志收集等。SFS Turbo是其高性能版本,提供更低的延迟和更高的IOPS。
4.3 对象存储OBS对接
OBS提供海量、安全、低成本的对象存储服务,适用于存放静态文件、备份归档、大数据分析等场景。对象存储适合存放非结构化数据,如图片、视频、日志归档等。
存储挂载配置示例
在Deployment的YAML中配置存储卷的示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-with-storage
spec:
replicas: 1
template:
spec:
containers:
- name: app
image: my-app:latest
volumeMounts:
- name: data-volume
mountPath: /data
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: my-pvc
五、配置管理与密钥管理
在容器化应用中,配置信息和敏感数据的管理是不可忽视的重要环节。CCI通过ConfigMap和Secret两种资源提供了标准化的解决方案。
5.1 ConfigMap配置项管理
ConfigMap用于存储应用所需的非敏感配置信息,如环境变量、配置文件内容等。创建完成后,可以在容器中通过环境变量或存储卷挂载的方式使用。
通过控制台创建ConfigMap
进入CCI控制台,点击左侧导航栏的“配置中心”,选择“配置项(ConfigMap)”标签页,选择命名空间后点击“YAML创建”。输入YAML定义内容后保存即可。云容器实例支持JSON或YAML格式,文件大小不得超过1MiB。
通过kubectl创建ConfigMap
# 从字面值创建
kubectl create configmap app-config \
--from-literal=DB_HOST=localhost \
--from-literal=DB_PORT=3306 \
-n my-namespace
# 从文件创建
kubectl create configmap app-config-file \
--from-file=./app.properties \
-n my-namespace
在Pod中使用ConfigMap
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo
spec:
containers:
- name: demo
image: nginx
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: DB_HOST
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
5.2 Secret密钥管理
Secret专门用于存储敏感信息,如密码、OAuth令牌、SSH密钥等。Secret中的数据以Base64编码形式存储,但需要注意Base64不是加密,只是编码。
创建Secret
# 创建包含用户名和密码的Secret
kubectl create secret generic db-secret \
--from-literal=username=myuser \
--from-literal=password=mypassword \
-n my-namespace
# 从文件创建TLS Secret
kubectl create secret tls tls-secret \
--cert=path/to/cert.pem \
--key=path/to/key.pem \
-n my-namespace
Secret创建完成后,可以像ConfigMap一样通过环境变量或存储卷挂载的方式在Pod中使用。由于Secret保存的是敏感数据,建议结合IAM权限控制,严格限制对Secret的读取权限。
六、应用生命周期管理
CCI支持Kubernetes中常用的工作负载类型,满足不同应用场景的需求。
6.1 无状态负载Deployment
Deployment是最常用的工作负载类型,适用于无状态应用,如Web服务、API服务等。Deployment支持副本管理、滚动更新、版本回滚等特性。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: my-namespace
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1
memory: 1Gi
6.2 有状态负载StatefulSet
StatefulSet适用于有状态应用,如数据库、消息队列等。它为每个Pod实例提供唯一的网络标识符和持久化存储。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: my-namespace
spec:
serviceName: mysql
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
6.3 任务与定时任务
Job用于运行一次性任务,如数据迁移、批处理作业等。Pod执行完成后不会自动重启,而是标记为Completed状态。CronJob则用于运行周期性任务,支持配置灵活的调度表达式。
6.4 HPA弹性伸缩配置
CCI支持配置HorizontalPodAutoscaler(HPA),根据CPU使用率、内存使用率或自定义指标自动调整Pod副本数量。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
namespace: my-namespace
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
七、监控与日志:构建可观测性
在生产环境中,监控和日志是保障系统稳定运行的关键能力。
7.1 基础监控
CCI控制台提供基础的资源监控能力,包括CPU使用率、内存使用率等指标,方便实时掌握容器运行状态。
7.2 日志采集与管理
CCI深度集成云日志服务LTS,提供一站式的日志采集、转储与分析能力。日志系统的核心功能在于记录业务组件的全生命周期状态数据,包括启动初始化、退出、运行时信息及异常事件等,主要服务于组件运行状态查看与故障根因分析。
支持采集的日志类型包括:容器标准输出(Stdout/Stderr),会自动采集业务进程打印到控制台的日志;容器文件日志,采集输出到容器内部特定路径的日志文件。
配置日志采集步骤
- 在CCI控制台中创建或编辑工作负载
- 在日志配置部分开启日志采集功能
- 选择LTS日志组和日志流,指定日志采集路径
- 确认配置后创建负载,日志会自动上报到LTS
配置完成后,在LTS控制台可以进行日志检索和分析。LTS有日志存储时间限制,超出时间的日志会被自动删除,用户可以按需将日志数据转储至OBS桶中进行长期存储。
7.3 事件监控与告警
事件上报功能开启后,资源事件将上报到LTS日志组日志流中,可在LTS侧配置告警规则。当事件产生并上报到LTS后,会自动通知在SMN所配置的联系人,实现故障的快速响应。
八、CCE集群对接CCI:弹性突发场景
对于已经在使用华为云CCE(云容器引擎)的企业来说,CCI可以作为弹性突发能力的补充。通过CCE集群中的Bursting插件,可以将工作负载弹性到CCI上运行。
8.1 Bursting插件的工作原理
CCE突发弹性引擎(对接CCI)作为一种虚拟的kubelet,用来连接Kubernetes集群和CCI平台。当CCE集群资源不足或业务流量突增时,插件会将新增的Pod调度到CCI上运行,实现资源的弹性扩展。基于该插件,支持将无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job)、定时任务(CronJob)四种资源类型的容器实例弹性创建到CCI服务上。
8.2 安装配置步骤
前提条件
- 使用插件前需要在CCI界面对CCI服务进行授权
- 仅支持VPC网络模式的CCE Standard集群和CCE Turbo集群
- 集群所在子网不能与10.247.0.0/16重叠,否则会与CCI命名空间下的Service网段冲突
安装插件
- 登录CCE控制台,选择目标集群
- 在导航栏左侧单击“插件中心”
- 选择“CCE突发弹性引擎(对接CCI)”插件,单击“安装”
- 配置插件参数:选择版本、规格配置(单实例或高可用)、是否开启网络互通
安装插件后会在CCI服务中新建一个命名为“cce-burst-{集群ID}”的命名空间,该命名空间完全由Bursting管理,不建议直接在CCI服务中使用该命名空间。
8.3 网络互通配置
开启网络互通功能后,支持CCE集群中的Pod与CCI集群中的Pod通过Kubernetes Service互相访问。安装插件时勾选“网络互通”选项,系统会自动创建负载均衡器。
需要注意的是,跨CCE和CCI实例的Service网络互通只支持集群内访问(ClusterIP)类型,不支持在初始化容器中访问CCE侧的ClusterIP Service。
九、权限管理与安全
安全是生产环境的首要考量,CCI提供了IAM权限管理和命名空间隔离的双重安全保障。
9.1 IAM权限管理
通过IAM(统一身份认证)服务,可以为不同职能部门的员工创建独立的IAM用户,赋予最小必要权限。例如,为运维人员授予CCI资源的完整操作权限,为只读监控人员授予仅查看权限。
授权验证方法:创建IAM用户并授权后,在CCI控制台左侧导航栏选择“负载管理>无状态负载”,单击“创建工作负载”,如果可以正常操作,则表示权限已生效。
9.2 命名空间级别的资源隔离
CCI中的命名空间(Namespace)提供了逻辑上的资源隔离,不同命名空间中的资源相互独立,命名相互不可见。合理的命名空间划分可以有效组织和管理不同项目、不同环境的资源。
十、成本控制与最佳实践
CCI采用按需计费模式,主要费用包括容器实例的资源费用(CPU、内存)和公网流量费用。以下是几条控制成本的最佳实践。
合理设置资源请求和限制:在创建工作负载时,明确设置CPU和内存的资源请求和上限,避免因资源请求过高造成浪费,也防止资源限制过低影响业务性能。利用弹性伸缩减少闲置资源:配置HPA策略,让业务在低峰期自动缩容,高峰期自动扩容,实现资源的高效利用。注意内网访问免流量:同VPC内的服务间调用应优先使用内网ELB而非公网访问,可以节省公网流量费用。及时清理未使用的资源:测试环境和工作负载完成后及时删除,避免持续产生费用。
结语
华为云云容器实例CCI作为Serverless容器服务的代表,将容器技术的灵活性与Serverless免运维的特性完美结合。通过本文的系统介绍,相信你已经掌握了CCI的核心概念、多种对接方式、网络存储配置以及运维监控的全链路知识。无论是初次尝试容器化部署的新手,还是正在规划云原生架构的架构师,CCI都能为你提供高效、安全、弹性的容器运行环境。将注意力从服务器运维中解放出来,专注在业务创新上——这才是Serverless时代的真正价值所在。
常见问题解答
问题一:CCI与CCE的主要区别是什么?应该如何选择?
答:CCI是Serverless容器服务,用户无需管理底层服务器集群,直接运行容器,按秒计费,适合对弹性要求高、不想运维服务器的场景。CCE是容器引擎服务,用户需要自己管理Kubernetes集群,适合需要对集群有完全控制权、有复杂调度需求或已经熟悉Kubernetes运维的团队。简单来说:想省心用CCI,要管控用CCE。
问题二:CCI支持哪些容器镜像格式?私有镜像仓库如何配置?
答:CCI支持标准的OCI容器镜像格式。可以使用Docker Hub等公共镜像仓库,也支持华为云SWR容器镜像仓库的私有镜像。使用私有镜像时,需要在工作负载配置中设置imagePullSecrets,引用对应的Secret认证信息。
问题三:在CCI中如何调试容器启动失败的问题?
答:可以通过以下几种方式排查:查看Pod的事件信息(kubectl describe pod),查看容器日志(kubectl logs),检查镜像地址是否正确,确认资源规格是否满足镜像运行需求(如内存不足会导致OOM),检查配置的环境变量和挂载卷是否正确。
问题四:CCI中的Pod能否访问VPC内的其他云服务资源?
答:可以。只要配置了正确的网络(Network资源)并关联了合适的VPC和子网,CCI中的Pod就可以直接访问同一VPC内的其他云服务,如ECS、RDS等。这也是内网ELB方案能够工作的基础。
问题五:CCI的计费模式是怎样的?资源释放后还会收费吗?
答:CCI采用按需计费,根据容器实例实际占用的CPU核数和内存大小按秒计费。Pod删除后不再产生实例费用。但需要注意,ELB、EVS等配套服务独立计费,即使CCI中的Pod已删除,如果ELB实例没有被删除,仍然会产生ELB费用。建议在删除工作负载后及时清理不用的ELB和存储资源。
问题六:CCI支持GPU容器实例吗?
答:华为云CCI支持GPU加速型容器实例,可以在创建工作负载时选择带有GPU资源的规格,适用于AI推理、图形渲染等需要GPU算力的场景。



