华为云云容器引擎CCE对接使用完全指南:从集群搭建到生产级部署
1. 云容器引擎CCE概述
云容器引擎CCE是基于开源Kubernetes的企业级容器服务,提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。CCE深度融合了华为云的底层基础设施能力,将弹性云服务器ECS、虚拟私有云VPC、弹性负载均衡ELB、云硬盘EVS等云服务与Kubernetes容器编排能力无缝集成,让开发者能够像使用单机容器一样轻松管理大规模容器集群。
相较于自建Kubernetes集群,CCE的优势体现在以下几个方面:首先,控制节点完全由华为云托管,用户无需关心Etcd、APIServer、ControllerManager、Scheduler等核心组件的安装、运维与高可用部署,集群创建后即刻可用;其次,CCE与华为云监控服务AOM、日志服务LTS深度集成,提供开箱即用的可观测性能力;再者,CCE提供了丰富的扩展插件,如NGINX Ingress控制器、Everest存储插件、Prometheus监控等,一键安装即可使用。
CCE支持多种集群类型,包括Standard集群(标准Kubernetes集群)、Turbo集群(高性能云原生集群)和Autopilot集群(全托管Serverless容器集群)。其中Standard集群是最常用的类型,适用于绝大多数企业级容器化部署场景;Turbo集群在网络性能上做了深度优化,适合对延迟敏感的高性能计算场景;Autopilot集群则完全免运维,用户无需管理任何节点,只需关注Pod本身。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 集群创建与网络规划
在CCE中,集群是计算资源的集合,包含一组节点资源,容器运行在节点上。创建集群是使用CCE的第一步,也是至关重要的一步,因为集群的网络模型、容器网段、服务网段等核心配置在创建后不可更改。
2.1 集群创建前的网络规划
在创建集群之前,需要提前规划好网络架构。CCE集群依赖虚拟私有云VPC作为底层网络隔离环境。创建集群时需要指定三个关键的网段:VPC子网网段(节点所在网段)、容器网段(Pod IP分配网段)和服务网段(Service ClusterIP分配网段)。
网段规划的核心原则是避免IP地址冲突。VPC子网网段决定了集群最多可以容纳多少个节点,容器网段决定了集群最多可以运行多少个Pod实例,服务网段决定了集群最多可以创建多少个Service资源。如果规划过小,后续业务扩容将受到严重限制。对于生产环境,建议容器网段使用16位掩码(如10.0.0.0/16),可支持约6万个Pod;服务网段使用20位掩码(如10.247.0.0/20),可支持约4000个Service。
此外,如果业务涉及云专线、对等连接或VPN等复杂组网场景,还需要确保容器网段、服务网段与客户侧内网网段不重叠,否则将影响业务正常互访。
2.2 创建集群的操作步骤
登录CCE控制台后,在"集群管理"页面单击"购买集群"。在创建页面中,需要配置以下关键参数:
- 集群类型:选择CCE Standard集群或Turbo集群。生产环境建议选择Standard集群,如需极致网络性能可选择Turbo集群。
- 集群版本:选择最新的稳定Kubernetes版本,建议选择v1.27及以上版本以获得更好的功能支持。
- 控制节点数量:商用场景强烈建议选择3个控制节点的高可用模式。单控制节点在节点故障时会导致集群不可用,而3控制节点模式可以在单个控制节点发生故障后集群继续使用,不影响业务功能。
- 网络模型:CCE Standard集群支持"VPC网络"和"容器隧道网络"两种模型。VPC网络模型性能更好,容器IP直接使用VPC子网IP,适合对网络性能要求高的场景;容器隧道网络模型则通过Overlay隧道实现容器网络隔离,适合对网络安全隔离要求较高的场景。
- 容器网段:根据Pod数量规划合理网段。
- 服务网段:根据Service数量规划合理网段。
集群创建完成后,系统会自动创建一个默认的安全组,用于控制节点之间的网络访问。用户也可以根据业务需求设置自定义安全组规则。
3. 节点与节点池管理
集群创建完成后,需要为集群添加节点才能运行容器工作负载。节点是指接入到集群的计算资源,包括虚拟机或物理机。CCE提供了节点池机制来高效管理节点。
3.1 节点池的核心概念
节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点。节点池中所有节点的参数和类型都彼此相同,任何配置更改都会影响节点池中的所有节点。节点池内的节点具有相同的操作系统、登录方式、容器运行时、Kubernetes组件启动参数、K8s标签及污点设置等属性。
节点池的核心价值在于支持节点的动态扩缩容。当集群中出现因资源不足而无法调度的Pod时,节点池可以自动触发扩容,减少人力成本;当满足节点空闲等缩容条件时,自动触发缩容,节约资源成本。对于大规模集群场景,节点池还可以规范异构节点的分组管理、降低频繁扩缩容的操作成本。
3.2 创建节点池的配置要点
在CCE控制台中,单击集群名称进入集群,在左侧选择"节点管理",在右侧选择"节点池"页签,单击右上角"创建节点池"即可开始创建。
创建节点池时需要配置以下关键参数:
- 节点类型:支持弹性云服务器-虚拟机和弹性云服务器-物理机两种类型。虚拟机类型使用虚拟化技术,性价比高,适合绝大多数场景;物理机类型使用裸金属服务器,提供更强的计算隔离性和性能,适合对性能有极致要求的场景。
- 节点规格:根据业务需求选择相应的CPU和内存配置。一个节点池可以同时配置多个节点规格(位于不同可用区),但同一节点池仅支持同类型节点规格。如果涉及GPU计算,同一节点池仅支持添加相同GPU显卡类型的节点规格。
- 容器运行时:CCE支持Docker和Containerd两种容器运行时。Containerd是更轻量、更安全的运行时,建议优先选择。
- 操作系统:选择节点操作系统,建议选择与业务容器镜像相同或接近的Linux发行版本,以保证兼容性。
- 登录方式:支持密码登录和密钥对登录两种方式。密钥对方式更安全,推荐生产环境使用。
- 存储配置:配置系统盘和数据盘的规格与大小。系统盘用于安装操作系统和容器运行时,建议至少40GB;数据盘用于存储容器数据和镜像,建议根据业务需求配置适当大小。
- 弹性伸缩:开启后节点池将根据集群负载自动创建或删除节点。节点池中的节点建议不要放置重要数据,以防止节点被弹性缩容时数据无法恢复。
3.3 节点池的高级特性
节点池支持将工作负载部署到特定节点池的能力。在定义工作负载时,可以通过节点选择器(nodeSelector)或亲和性/反亲和性规则,将Pod调度到指定节点池的节点上。这对于需要GPU算力、特定可用区部署或网络隔离等场景非常有用。
节点池还支持配置Kubernetes参数,对核心组件进行深度配置。例如,可以调整每节点的Pod数量上限、配置kubelet参数等,以满足特定业务场景的需求。
4. 工作负载部署
工作负载是运行在CCE上的一组Pod实例的抽象管理方式,用于定义和控制Pod的创建、运行和生命周期。CCE支持多种类型的工作负载,包括无状态负载Deployment、有状态负载StatefulSet、普通任务Job和定时任务CronJob。
4.1 工作负载类型选择
- 无状态负载Deployment:管理无状态应用,每个实例都是相同的,可以随时创建、销毁或替换。适合Web前端服务器、微服务、API网关等不需要持久化存储的应用。Deployment支持滚动升级、回滚、扩容等完整的生命周期管理。
- 有状态负载StatefulSet:管理有状态应用,确保每个Pod拥有独立的持久化状态,并在Pod重启或迁移时恢复其数据。适合数据库、消息队列、分布式存储等需要稳定网络标识和持久化存储的应用。
- 普通任务Job:一次性任务,完成后Pod自动删除。适合批处理、数据迁移等一次性计算任务。
- 定时任务CronJob:基于时间的Job,在指定时间周期内运行指定的Job。适合定时备份、定时报表等周期性任务。
4.2 通过控制台部署Nginx示例
下面以部署一个Nginx无状态工作负载为例,展示完整的操作流程。
首先登录CCE控制台,单击集群名称进入集群控制台,在左侧菜单栏选择"工作负载",单击右上角"创建工作负载"。在创建工作负载页面中填写以下关键参数:
- 负载类型:选择"无状态负载Deployment"。
- 负载名称:填写"nginx"。
- 命名空间:选择"default"。
- 实例数量:设置为1或更多。生产环境建议至少2个实例以保证高可用。
- 容器配置:单击"选择镜像",在镜像中心搜索"nginx"并选择官方nginx镜像。容器端口设置为80。
- 服务配置:单击服务配置下的加号创建Service。访问类型选择"负载均衡LoadBalancer",系统会自动创建弹性负载均衡ELB实例并提供公网访问地址。服务端口设置为8080,容器端口设置为80。
配置完成后单击"创建工作负载",等待Pod启动成功。创建成功后,在无状态负载列表中会显示一个运行中的工作负载。单击工作负载名称进入详情页,在"访问方式"页签下可以看到公网IP地址,在浏览器中输入该地址即可访问Nginx应用。
4.3 通过kubectl命令行部署
对于自动化部署场景,使用kubectl命令行工具更加高效。首先需要通过kubectl连接集群。以下是部署Nginx的YAML示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 8080
targetPort: 80执行以下命令即可完成部署:
kubectl apply -f nginx-deployment.yaml4.4 容器健康检查与资源限制
在生产环境中,为工作负载配置健康检查和资源限制是保障应用稳定性的关键措施。CCE支持两种健康检查探针:
- 存活探针livenessProbe:检测容器是否正常运行,如果探测失败则Kubelet会重启容器。
- 业务探针readinessProbe:检测容器是否准备好接收流量,如果探测失败则从Service的Endpoints中移除该Pod。
资源限制方面,需要为每个容器设置CPU和内存的requests(最小保证)和limits(最大限制)。如果不设置资源限制,当某个应用出现异常资源泄露时,将导致同节点的其他应用分配不到资源而异常。以下是包含健康检查和资源限制的配置示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-with-healthcheck
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 55. 持久化存储管理
容器本身是无状态的,Pod重启或迁移后数据会丢失。对于需要持久化存储的应用(如数据库、文件服务等),必须使用Kubernetes的持久化存储机制。CCE基于Kubernetes容器存储接口CSI实现了与华为云多种存储服务的深度融合。
5.1 PV与PVC存储模型
Kubernetes通过PV和PVC的抽象机制来屏蔽底层存储差异。PV描述的是持久化存储卷,定义的是持久化存储在宿主机上的目录。PVC描述的是Pod所希望使用的持久化存储的属性,如存储大小、读写权限等。开发者只需像申请CPU和内存一样声明所需的存储容量和访问模式,Kubernetes会自动完成与底层存储的对接与挂载。
CCE提供了Everest CSI插件来实现与华为云EVS(云硬盘)、SFS(文件存储)、OBS(对象存储)等存储服务的对接。在CCE集群中,everest-csi-controller和everest-csi-driver两个组件负责存储卷的创建、挂载和生命周期管理。
5.2 静态创建PV/PVC示例
假设已经在SFS中创建了一个文件存储,存储ID为68e4a4fd-d759-444b-8265-20dc66c8c502,挂载地址为sfs-nas01.cn-north-4b.myhuaweicloud.com:/share-96314776。以下是创建PV的YAML配置:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 10Gi
csi:
driver: nas.csi.everest.io
fsType: nfs
volumeAttributes:
everest.io/share-export-location: sfs-nas01.cn-north-4b.myhuaweicloud.com:/share-96314776
volumeHandle: 68e4a4fd-d759-444b-8265-20dc66c8c502创建PV后,再创建PVC来绑定该PV:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi在Pod中通过volumes字段引用PVC即可使用持久化存储:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-pvc
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: pvc-example5.3 动态创建PVC
除了静态创建,CCE还支持通过StorageClass动态创建PVC,无需提前手动创建PV。在CCE控制台中,进入集群后在左侧导航栏选择"存储",在右侧选择"存储卷声明"页签,单击"创建存储卷声明PVC"即可动态创建。CCE提供了多种默认StorageClass,如csi-disk(EVS云硬盘)、csi-nas(SFS文件存储)、csi-local-topology(本地持久卷)等。
动态创建PVC时,只需指定存储类型和容量大小,Everest插件会自动完成底层存储的创建、PV的创建以及PVC与PV的绑定。
6. 网络与服务暴露
CCE基于Kubernetes的网络模型,提供了Service和Ingress两种服务暴露方式。
6.1 Service访问类型
CCE支持以下几种Service访问类型:
- 集群内访问ClusterIP:仅允许集群内部访问,适合服务间调用。
- 节点访问NodePort:通过节点的静态端口对外暴露服务,适合测试环境或没有ELB的场景。
- 负载均衡LoadBalancer:自动创建弹性负载均衡ELB实例,提供公网或私网访问地址。这是生产环境最常用的暴露方式,支持TCP/UDP四层负载均衡。
6.2 Ingress七层路由
Ingress为集群提供HTTP/HTTPS等七层协议的负载均衡访问方式。CCE提供了基于社区NGINX Ingress Controller优化的精选开源插件,提供丰富的七层负载均衡能力。
安装NGINX Ingress控制器插件后,可以通过Ingress资源定义路由规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress-demo
namespace: default
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 8080Ingress支持配置TLS证书以HTTPS协议对外提供安全服务。证书可以通过TLS密钥方式或默认证书方式配置。
6.3 高并发场景下的Ingress调优
在高并发场景下,需要对NGINX Ingress控制器进行性能调优。主要调优策略包括:
- 使用高性能节点:为Ingress控制器使用独立的、配置较高的节点池,如通用计算增强型实例c7.8xlarge.2(32核64GB)。
- 配置节点亲和与污点:通过节点标签和污点策略,将Ingress控制器Pod调度到专属节点上。
- 调整资源限制:根据实际QPS调整Ingress控制器容器的CPU和内存资源限制。
- 调高keepalive连接数:通过配置keep-alive-requests和upstream-keepalive-requests参数,减少TIME_WAIT连接的产生。
7. 弹性伸缩HPA
CCE支持基于CPU利用率、内存利用率或自定义指标的Pod水平自动伸缩HPA。HPA会根据设定的指标阈值自动调整工作负载的Pod副本数量,实现资源按需使用。
以下是HPA的配置示例:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70上述配置表示当Nginx Deployment的CPU平均利用率超过70%时,自动增加Pod副本数(最多10个);当CPU利用率下降后,自动缩减副本数(最少2个)。
8. 日志与监控
8.1 日志采集与LTS集成
CCE提供了基于fluent-bit和opentelemetry的云原生日志采集插件,具备高性能、资源占用低的优点。日志采集后可以接入云日志服务LTS,在LTS控制台对收集到的日志进行统一管理和分析。
配置CCE应用日志接入LTS的主要步骤包括:选择日志流、检查依赖项(自动安装ICAgent)、选择主机组、配置采集路径和采集策略、配置索引、完成接入。日志上报LTS后会创建名为k8s-logs-{clusterId}的默认日志组。
8.2 监控与告警
CCE基于AOM进行资源监控,提供弹性伸缩能力。CCE云原生观测体系包括健康中心、监控中心、日志中心、告警中心等功能。健康中心基于容器运维专家经验对集群健康状况进行全面检查,能够及时发现集群故障与潜在风险并给出修复建议。
用户还可以通过配置Prometheus监控采集规则,监控部署在CCE集群内应用的业务数据。
9. 容器化部署最佳实践CheckList
以下是容器应用部署上云的关键检查项:
- 网络规划:提前规划VPC子网、容器网段、服务网段,避免网段冲突和后续扩容受限。
- 高可用架构:集群选择3控制节点模式;工作负载设置至少2个Pod副本;节点分布在不同的可用区。
- 资源限制:为每个容器设置CPU和内存的requests和limits。
- 健康检查:配置存活探针和业务探针。
- 优雅停机:设置生命周期中的"停止前处理",确保Pod被删除前完成业务处理。
- 持久化存储:有状态应用使用PVC/PV持久化存储数据。
- 安全组配置:合理配置安全组规则,避免安全风险和服务连通性问题。
- 亲和性调度:合理设置Pod的亲和性和反亲和性策略。
10. 常见问题与解答
问题1:CCE集群创建后,节点无法加入集群怎么办?
首先检查节点所在子网是否与集群VPC网络互通,其次确认节点规格是否满足集群要求(至少4核8GB)。还可以登录CCE控制台查看节点状态和事件日志,排查具体错误原因。
问题2:Pod一直处于Pending状态是什么原因?
Pending状态通常表示Pod无法调度到任何节点。常见原因包括:集群节点资源不足(CPU或内存不够)、PVC无法绑定(存储资源不足或配置错误)、节点亲和性规则无法满足等。可以通过kubectl describe pod命令查看详细事件来定位问题。
问题3:如何实现CCE集群的跨可用区高可用部署?
创建节点时选择不同的可用区,或者创建多个节点池并部署在不同可用区。在工作负载中通过Pod拓扑分布约束将Pod均匀分布在各个可用区的节点上,实现应用层的高可用。
问题4:CCE中的存储卷PVC创建后无法挂载怎么办?
首先检查PVC状态是否为Bound,如果不是Bound说明PVC未能成功绑定PV。其次检查存储类StorageClass是否正确配置,以及底层存储服务(如EVS、SFS)是否有足够的配额。还可以通过kubectl describe pvc查看详细错误信息。
问题5:如何将自建Kubernetes集群迁移到华为云CCE?
迁移方案包括应用YAML文件的适配迁移、容器镜像的迁移(迁移到华为云SWR容器镜像服务)、存储数据的迁移(通过华为云数据复制服务或工具)以及配置和密钥的迁移。建议先在CCE中搭建测试环境,验证业务功能后再进行正式迁移。
问题6:CCE的日志采集如何配置才能不遗漏容器日志?
建议关闭容器标准输出对接AOM1.0的开关,统一使用LTS进行日志采集和分析。配置日志采集时确保采集路径覆盖所有需要采集的日志文件(包括标准输出和文件日志),并配置合理的日志轮转策略避免日志堆积。


