华为云CCE容器服务:Kubernetes集群配置与生产级应用部署完全指南
引言:华为云CCE是什么
在云原生技术席卷全球的今天,Kubernetes已经成为容器编排领域的事实标准。华为云推出的云容器引擎(Cloud Container Engine,简称CCE)是一项基于开源Kubernetes的企业级容器服务,提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,能够简化云上自动化容器运行环境的搭建。CCE的核心价值在于,它通过托管的Kubernetes集群控制面,将用户从繁琐的集群运维工作中解放出来,让开发者能够专注于应用本身的全生命周期管理,从而实现高度可扩展、高性能的云原生应用部署。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
值得注意的是,部分读者可能习惯于其他云厂商的命名方式(如ACK、EKS等),但在华为云体系中,容器服务的官方名称是CCE。理解这一基础概念,是我们开启后续所有实践操作的前提。
一、集群类型选型:Standard、Turbo与Autopilot
在创建集群之前,首先需要根据业务需求选择合适的集群类型。华为云CCE提供了三种主要的集群形态:CCE Standard集群、CCE Turbo集群和CCE Autopilot集群。
1.1 CCE Standard集群
Standard集群是标准版本的企业级Kubernetes容器服务,提供高可靠、安全的商业级容器集群服务。它采用VPC网络叠加容器网络的两层网络架构,适用于大多数常规业务场景。用户需要自行管理集群中的节点(Node),包括节点的创建、扩缩容和运维。
1.2 CCE Turbo集群
Turbo集群是Standard集群的全面升级版本,拥有更高性能的云原生网络,提供云原生混部调度能力,可实现更高的资源利用率和更广的全场景覆盖。Turbo集群将VPC网络和容器网络融合为一层,网络性能无损耗,特别适合对网络性能要求较高的场景,如AI计算、大数据处理等。
1.3 CCE Autopilot集群
Autopilot集群是Serverless形态的容器服务,集群节点完全托管,用户无需感知底层节点,只需直接部署容器即可。这种模式适合不想管理底层基础设施、希望聚焦于业务开发的团队。
选型建议:对于大多数企业级生产环境,建议优先考虑CCE Turbo集群,它在性能、功能和成本之间取得了较好的平衡。如果是测试环境或对成本极其敏感的场景,Standard集群也是一个不错的选择。Autopilot则更适合无状态、弹性要求极高的微服务场景。
二、集群创建前的准备工作
在正式开始创建集群之前,有几项前置准备工作不可或缺。
2.1 注册华为账号并完成实名认证
这是使用所有华为云服务的基础前提。如果您还没有华为账号,需要先完成注册和实名认证流程。
2.2 首次使用CCE的授权操作
由于CCE在运行中对计算、存储、网络以及监控等各类云服务资源都存在依赖关系,当您首次登录CCE控制台时,CCE将自动请求获取当前区域下的云资源权限。具体操作是:登录CCE控制台后,在首次登录某个区域时会跳出授权说明,单击确定后,CCE将在IAM中创建名为cce_admin_trust的委托,统一对您的其他云服务资源进行操作。在使用CCE服务期间,请不要自行删除或者修改这个委托。
2.3 准备虚拟私有云(VPC)和子网
CCE集群需要运行在虚拟私有云中。如果还没有可用的VPC,需要在创建集群时新建,或者提前在VPC服务中创建好。VPC为CCE集群提供了一个隔离的、用户自主配置和管理的虚拟网络环境。
三、创建Kubernetes集群的完整步骤
完成准备工作后,就可以开始创建集群了。整个流程分为集群基本配置、插件选择、确认提交三个主要步骤。
3.1 登录CCE控制台并选择区域
登录CCE控制台后,在页面左上角选择集群部署区域。区域选择的原则是:所选区域与资源部署区域的距离越近,网络时延越低,访问速度越快。
3.2 配置集群基础信息
单击购买集群后,需要配置以下核心参数:
- 集群类型:根据前文的选型分析,选择Standard、Turbo或Autopilot。
- 集群名称:长度范围为4~128个字符,以小写字母开头,支持小写字母、数字和中划线,不能以中划线结尾。
- 集群版本:建议选择当前CCE支持的最新商用版本。Kubernetes社区一般4个月左右发布一个大版本,CCE在社区发布后3个月左右同步发布新版本。
- 集群规模:当前集群可以管理的最大Node节点规模,需要根据业务预估选择合适的规格。
3.3 网络配置
网络配置是集群创建中最关键的环节之一,因为集群创建成功后网络模型不可更改。
- 网络模型:CCE支持三种网络模型——VPC网络、容器隧道网络和云原生网络2.0。三种模型的差异如下:
- 容器隧道网络:基于VXLAN隧道封装,有约5%-15%的性能损耗。适用于对性能要求不高的Web应用、后台服务等场景,最大可支持2000节点规模。
- VPC网络:无隧道封装,性能接近VPC网络本身,适用于AI计算、大数据计算等高性能场景。但受限于VPC路由表配额,建议集群规模在1000节点及以下。
- 云原生网络2.0:容器网段直接使用VPC子网,性能和隔离性更优。
- 虚拟私有云和子网:选择已创建的VPC和子网。
- 容器网段:设置容器使用的网段,决定了集群下容器的数量上限。网段不能设置太小,否则会导致可创建的节点数量受限。对于VPC网络模型,如果容器网段掩码是/16,每个节点预留128个Pod,则最多支持512个节点。
- 服务网段:Service资源使用的网段,决定了Service资源的上限,创建后不可修改。
三个网段(节点网络、容器网络、服务网络)不能重叠,否则会导致网络冲突。
3.4 插件选择与配置
单击下一步:插件选择后,可以选择创建集群时需要安装的插件。常见的必选插件包括CCE容器存储(Everest)插件(用于存储卷管理)、CoreDNS(用于服务发现)等。对于大多数场景,使用默认插件配置即可。
3.5 确认并提交
最后一步是确认配置,显示集群资源清单,确认无误后提交。集群创建预计需要6-10分钟左右,请耐心等待。创建成功后在集群管理下会显示一个运行中的集群,此时集群节点数量为0。
四、节点创建与配置
集群创建完成后,还需要在集群中创建运行工作负载的节点(Node)。节点是CCE集群的计算资源,即运行容器化应用的工作节点。在云容器引擎CCE中,主要采用高性能的弹性云服务器ECS或裸金属服务器BMS作为节点。
4.1 创建节点的操作步骤
登录CCE控制台,单击创建的集群进入集群控制台,在左侧菜单栏选择节点管理,切换至节点页签,单击右上角创建节点。在弹出的页面中配置节点的参数:
- 可用区:建议选择与集群相同可用区。为实现高可用,可以将节点分布在不同可用区。
- 节点规格:根据业务需求选择合适的ECS规格。配置的规格越高(CPU、内存配置越高)、专业程度越高(如GPU、NPU),节点成本越高。
- 容器引擎:可选择Docker或containerd。containerd是更轻量的容器运行时,推荐使用。
- 操作系统:华为云推荐使用HCE OS(华为云欧拉操作系统)。
- 登录方式:支持密钥对和密码两种方式。
- 存储配置:系统盘缺省50GB,数据盘缺省100GB。
- 节点数量:根据业务需要设置初始节点数量。
节点创建预计也需要6-10分钟左右。
4.2 节点付费模式选择
CCE节点的付费模式直接影响成本,需要根据业务特点进行选择:
- 包年/包月:预付费模式,购买周期越长折扣越大,适用于业务量长期稳定的成熟场景。
- 按需计费:后付费模式,秒级计费按小时结算,允许根据实际需求灵活调整,适用于电商抢购等流量波动大的场景。
- 竞价计费:后付费模式,价格随市场供需关系实时变化,适用于对价格敏感且可接受中断的批处理任务。
4.3 节点池管理
对于需要动态扩缩容的场景,建议使用节点池(NodePool)功能。节点池是一组具有相同配置的节点集合,支持自动扩缩容。通过节点池,可以实现根据Pod调度需求自动增减节点,既保证了业务高峰期的资源供给,又避免了低谷期的资源浪费。
五、连接集群与kubectl配置
集群和节点创建完成后,下一步是配置kubectl命令行工具来连接和管理集群。kubectl是Kubernetes官方的命令行客户端,是运维和开发人员与集群交互的主要方式。
5.1 获取集群访问凭证
登录CCE控制台,单击集群名称进入集群总览页,在连接信息版块中找到kubectl配置按钮,单击后可以查看kubectl的连接信息。CCE提供了两种访问方式:
- CCE接口:通过API网关调用CCE服务接口,支持操作云服务层面的基础设施(如创建节点)。
- Kubernetes原生接口:直接通过Kubernetes原生API Server调用集群层面的资源(如创建工作负载),但不支持操作云服务层面的基础设施。
对于日常的应用部署和管理,通常使用Kubernetes原生接口方式。
5.2 安装和配置kubectl
在本地或运维跳板机上安装kubectl工具。以Linux环境为例,可以通过以下命令安装:
# 下载最新版本的kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 赋予执行权限
chmod +x kubectl
# 移动到系统PATH目录
sudo mv kubectl /usr/local/bin/
# 验证安装
kubectl version --client
安装完成后,需要将集群的访问凭证(kubeconfig文件)配置到本地。可以从CCE控制台下载kubeconfig文件,或者手动配置集群的API Server地址和认证信息。
六、部署无状态工作负载(Deployment)
集群准备就绪后,就可以开始部署应用了。无状态工作负载(Deployment)是Kubernetes中最常用的工作负载类型,适用于不需要考虑数据一致性和持久性的应用程序,例如Web服务器、应用服务器等。在无状态工作负载中,每个应用实例都是独立的,即使某个实例发生故障,其负责的请求也可以被重新分配给其他健康的实例。
6.1 通过控制台部署NGINX
CCE控制台提供了图形化的部署界面,非常适合新手快速上手。操作步骤如下:
- 登录CCE控制台,进入目标集群。
- 在左侧导航栏选择工作负载,单击创建工作负载。
- 配置工作负载名称、容器镜像(如nginx:latest)、容器规格(CPU和内存限制)等参数。
- 设置访问方式,如创建Service(负载均衡或节点端口)使应用对外可访问。
- 单击确认提交,等待工作负载创建完成。
6.2 通过YAML文件部署
对于生产环境,更推荐使用YAML文件来声明式地管理应用。以下是一个部署NGINX的Deployment YAML示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
replicas: 3
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:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
使用kubectl apply命令部署:
kubectl apply -f nginx-deployment.yaml
部署完成后,可以通过以下命令查看工作负载状态:
kubectl get pods -n default
kubectl get svc -n default
七、使用Helm管理复杂应用
随着应用规模的增大,管理的Kubernetes资源文件会越来越多、越来越复杂。Helm作为Kubernetes的包管理器,可以很好地解决这个问题。Helm使用Charts(一种定义Kubernetes资源的打包格式)来封装Kubernetes部署的所有元素,包括应用程序代码、依赖项、配置文件和部署指令。同时,Helm支持应用的升级和回滚,使得应用的生命周期管理更加容易。
7.1 安装Helm
在已配置kubectl的机器上安装Helm客户端:
# 下载Helm安装脚本
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
# 赋予执行权限
chmod +x get_helm.sh
# 执行安装
./get_helm.sh
# 验证安装
helm version
7.2 使用Helm部署WordPress
以下是通过Helm部署WordPress的完整示例:
# 添加Helm仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# 安装WordPress
helm install my-wordpress bitnami/wordpress \
--set service.type=LoadBalancer \
--set mariadb.primary.persistence.enabled=true \
--set mariadb.primary.persistence.size=8Gi
# 查看部署状态
helm list
kubectl get pods -n default
Helm的强大之处在于参数化配置。通过--set参数或values.yaml文件,可以灵活地定制不同环境的部署配置,而无需修改Chart本身的模板文件。
八、配置存储卷声明(PVC)
对于有状态应用(如数据库),持久化存储是必不可少的。CCE通过容器存储(Everest)插件提供了丰富的存储能力,支持云硬盘(EVS)、文件存储(SFS)、对象存储(OBS)等多种存储类型。
8.1 动态创建存储卷声明
动态创建是指通过StorageClass自动创建底层存储和对应的存储卷(PV),无需手动预先创建存储资源。以下是通过控制台创建云硬盘类型PVC的步骤:
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏选择存储,在右侧选择存储卷声明页签。
- 单击右上角创建存储卷声明PVC。
- 存储卷声明类型选择云硬盘。
- 创建方式选择动态创建。
- 存储类选择csi-disk。
- 选择可用区(需与节点可用区相同)、云硬盘类型和容量大小。
- 单击创建。
8.2 在工作负载中挂载PVC
创建好PVC后,可以在工作负载中挂载使用。以下是一个挂载PVC的Deployment YAML示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-with-pvc
spec:
replicas: 1
selector:
matchLabels:
app: app-with-pvc
template:
metadata:
labels:
app: app-with-pvc
spec:
containers:
- name: app
image: nginx:latest
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc
8.3 约束与限制说明
使用云硬盘(EVS)作为存储时需要注意:云硬盘不支持跨可用区挂载,且不支持被多个工作负载、同一个工作负载的多个实例或多个任务使用。因此,创建无状态工作负载时若使用了EVS云硬盘,建议只选择一个实例。对于需要多实例共享存储的场景,应考虑使用文件存储(SFS)或对象存储(OBS)。
九、服务暴露:Service与Ingress
容器化应用部署完成后,需要让外部能够访问这些服务。Kubernetes提供了Service和Ingress两种资源来实现服务暴露。
9.1 Service类型
CCE支持多种Service类型:
- ClusterIP:仅在集群内部可访问,适用于集群内服务间的通信。
- NodePort:在每个节点上开放一个端口,通过节点IP加端口访问。
- LoadBalancer:自动创建云负载均衡器(ELB),提供公网访问入口。
对于需要从公网访问的应用,LoadBalancer是最常用的方式。以下是一个LoadBalancer类型的Service示例:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
9.2 Ingress配置
当需要根据域名或路径将流量路由到不同的后端服务时,Ingress是更好的选择。Ingress通过七层负载均衡实现更灵活的流量管理。以下是一个Ingress示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
十、集群高可用配置
为了保证应用可以稳定可靠地运行在Kubernetes里,高可用配置至关重要。
10.1 控制面高可用
CCE是一项托管式的Kubernetes服务,集群控制面无需由用户进行运维。创建集群时,可以设置集群的高可用模式,选择控制节点的分布方式。控制节点默认尽可能随机分布在不同可用区以提高容灾能力。也可以展开高级配置自定义控制节点分布方式,支持随机分配和自定义两种方式。
10.2 数据面高可用
数据面由工作节点组成,需要用户自行运维。为实现高可靠目标,建议:
- 创建节点时选择在不同的可用区(AZ)分布。
- 根据业务需求合理配置自定义调度策略,实现资源分配的最大化。
- 及时关注关键组件的运行状态。
10.3 应用层面高可用
在应用层面,需要通过可扩展且有弹性的方式运行应用,并及时关注应用的运行状态。具体措施包括:设置合理的Pod副本数(replicas)、配置Pod水平自动伸缩(HPA)、使用PodDisruptionBudget(PDB)保障关键服务的可用性等。
十一、集群安全配置
安全是生产环境必须重视的环节。以下是从多个维度保障CCE集群安全的配置建议。
11.1 使用最新版本的集群
最新版本的集群修复了已知的漏洞或拥有更完善的安全防护机制,新建集群时推荐选择最新版本。在集群版本停止提供服务前,请及时升级到新版本。
11.2 关闭default ServiceAccount的token自动挂载
Kubernetes默认会给每个工作负载实例关联default服务账号,在容器内挂载一个token。对于不需要访问kube-apiserver的工作负载,建议关闭服务账号的自动关联功能。禁用方法如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: default
automountServiceAccountToken: false
或在工作负载的spec中显式关闭:
spec:
template:
spec:
automountServiceAccountToken: false
11.3 IAM权限最小化
CCE支持账号创建多个IAM用户。通过创建不同的用户组并授予不同权限,可以实现最小权限授权。应合理配置子用户和命名空间的权限,避免主账号密钥泄露带来的风险。集群权限通过IAM授权,命名空间权限通过Kubernetes RBAC授权。
11.4 配置命名空间资源配额
应限制每个命名空间能够分配的资源总量,控制的资源包括CPU、内存、存储等。这可以防止某个命名空间过度消耗集群资源,影响其他租户的正常使用。
十二、成本优化实践
集群成本优化的核心在于如何最大化地利用集群资源,减少不必要的成本开销。以下是一些实用的成本优化建议。
12.1 选择合适的集群配置
在部署集群之前,需要评估集群应用所需的资源需求,选择合适的集群类型、节点实例类型、集群付费模式等。
12.2 使用资源规格推荐功能
CCE提供了应用资源规格推荐功能,该功能使用Volcano调度器对工作负载的历史CPU、内存资源使用数据进行分析,得出资源申请量(Request)的推荐值。可以直接将推荐值应用到环境中,避免资源过度申请造成的浪费。
12.3 合理利用节点池弹性伸缩
通过节点池的自动扩缩容功能,可以在业务低峰期自动缩减节点数量,高峰期自动扩容,实现资源利用的最大化。
12.4 选择合适的存储类型
根据数据的访问频率和重要性选择合适的存储类型。高频访问的数据使用高性能云硬盘,低频访问的数据可以迁移到成本更低的对象存储(OBS)。
十三、总结
华为云CCE作为企业级的Kubernetes托管服务,为开发者提供了从集群创建到应用部署的全链路支持。本文从集群类型选型开始,逐步讲解了集群创建、节点配置、网络规划、应用部署(Deployment与Helm)、存储管理、服务暴露、高可用与安全配置以及成本优化等核心环节。通过掌握这些技能,读者可以在华为云上快速构建出稳定、安全、经济的容器化应用平台。
在实际生产环境中,建议遵循以下原则:选择最新的集群版本和合适的网络模型、将节点分布在不同可用区实现高可用、使用Helm管理复杂应用、通过IAM和RBAC实现最小权限授权、利用节点池弹性伸缩和资源规格推荐功能优化成本。希望本文能够成为您在华为云CCE实践道路上的有益参考。
常见问题解答
问1:华为云CCE和ACK有什么关系?
ACK是阿里云容器服务Kubernetes版的简称,而华为云的容器服务叫做CCE(Cloud Container Engine)。两者都是Kubernetes托管服务,但属于不同云厂商的产品,名称不同但核心功能类似。
问2:创建集群时选择哪种网络模型最好?
没有绝对的最好,需要根据业务场景选择。如果对性能要求极高(如AI计算),推荐VPC网络或云原生网络2.0;如果节点规模大(超过1000节点),推荐容器隧道网络;如果是一般Web应用,三种模型都可以,建议根据集群规模和性能需求综合评估。
问3:如何让外部用户访问CCE集群中的应用?
可以通过创建LoadBalancer类型的Service自动分配公网IP和负载均衡器,或者使用Ingress通过域名和路径进行七层路由。如果是测试环境,也可以使用NodePort类型通过节点IP加端口访问。
问4:CCE集群中的存储卷如何选择?
云硬盘(EVS)适合单实例读写、高性能场景,但不支持跨节点共享;文件存储(SFS)适合多实例共享读写的场景;对象存储(OBS)适合海量非结构化数据存储。需要根据应用的存储需求选择合适的存储类型。
问5:如何降低CCE集群的使用成本?
可以从以下几个方面优化:选择包年/包月计费模式获取折扣、使用节点池弹性伸缩避免资源浪费、使用资源规格推荐功能避免过度申请、合理选择存储类型降低存储成本。
问6:首次使用CCE时为什么需要授权?
因为CCE在运行中对计算(ECS)、存储(EVS/SFS)、网络(VPC/ELB)以及监控等各类云服务资源都存在依赖关系。授权后CCE才能代表您调用这些云服务的API来创建和管理资源。




