华为云 CCE Cluster API Provider 集群管理参考架构
【摘要】 将 Cluster API 对象(Cluster、MachinePool)翻译为华为云 CCE API 调用
1. 用途和受众
1.1 预期用途
将 Cluster API 对象(Cluster、MachinePool)翻译为华为云 CCE API 调用,实现以下能力:
- 创建 CCE 托管集群(控制面由华为云托管),支持 CCE Standard 与 CCE Turbo 两种集群类型
- 通过
MachinePool管理 CCE 节点池,修改replicas即可扩缩容 - 通过
clusterctl get kubeconfig获取工作集群的 kubeconfig - 兼容
clusterctl全流程(init / describe / get kubeconfig / delete) - GitOps 就绪,通过 ArgoCD/Flux 从 Git 全流程驱动集群生命周期
使用场景:
- 适用行业:金融、互联网、制造业等需要大规模管理 Kubernetes 集群的企业组织
- 业务场景:多团队共享平台管理多个 CCE 集群;GitOps 驱动的基础设施即代码流水线;跨可用区高可用工作负载部署
- 合规要求:IAM 最小权限原则,AK/SK 凭证仅通过 Secret/环境变量提供;CCE 访问策略可精细化到命名空间级权限控制
- 部署规模:适用于管理 2-50+ 个 CCE 托管集群的中大型平台团队;单管理集群可管理多个工作负载集群
1.2 目标受众
平台工程师与 SRE 团队——通过 kubectl、clusterctl 或华为云 CloudShell 操作管理 Kubernetes 集群生命周期的运维人员。适用于希望以 Kubernetes 原生声明式方式管理华为云 CCE 集群的组织,特别是已熟悉 源参考 EKS + Cluster API 工作流的团队。
2. 参考架构概述
2.1 架构描述
CAPI CCE Provider 是面向华为云托管 Kubernetes 集群生命周期管理的基础设施 Provider 架构,旨在通过集成 Cluster API 合约、华为云 CCE/ECS/VPC/IAM 服务和 GitOps 工具链,加速华为云托管集群的声明式管理落地采纳。
架构类型:Cluster API Infrastructure Provider(Kubernetes 原生集群生命周期管理)
云平台:华为云 cn-north-4
对标项目:cluster-api-provider-aws (CAPA) / 源参考 EKS 托管模式
项目状态:incubating(PoC 已验证,CRD + 控制器 + 服务层 + webhook + 部署清单已就位)
架构分为四层:
| 层级 | 包含组件 | 作用 | 通俗比喻 |
|---|---|---|---|
| 运维/交付层(外部) | 用户(kubectl·clusterctl·CloudShell)、GitHub Release、Public SWR | 提供操作入口、发布物分发和容器镜像仓库 | "工具箱 + 零件仓库 + 说明书货架" |
| 管理集群层(CCE) | cluster-api core、capi-cce Provider、cert-manager、webhook、Secrets | 运行 CAPI 核心控制器和 Provider 控制器,翻译 CAPI 对象为华为云 API 调用 | "总指挥部——接收指令、翻译并下发命令" |
| 华为云基础设施层 | IAM、VPC/子网、CCE 控制面 API、ECS、EIP/ELB | 提供身份鉴权、网络隔离、托管集群控制面、工作节点和公网访问 | "门禁 + 道路 + 代管车间 + 公网入口" |
| 工作负载集群层(CCE) | API Server、节点池 pool-0/1/2(AZ 4a/4b/4g) | 实际运行业务应用的目标 Kubernetes 集群,跨多可用区部署 | "生产线——真正干活的地方,分布在多个车间" |
2.2 业务背景
| 项目 | 描述 |
|---|---|
| 业务问题 | 平台工程师和 SRE 团队需要用 Kubernetes 原生工具链以声明式方式管理华为云 CCE 集群,而非手动控制台操作;现有华为云集群管理缺乏对标 源参考 EKS 托管模式的标准化 CAPI Provider |
| 期望的结果 | 通过 Cluster API 标准 CRD 声明式创建/扩缩容/删除 CCE 托管集群与节点池,支持 CCE Standard 与 Turbo 双模式,兼容 clusterctl 全流程,GitOps 就绪 |
| 主要用户 | 平台工程师、SRE 团队——通过 kubectl、clusterctl 或 CloudShell 操作管理集群的运维人员 |
| 关键制约因素 | 项目状态为 incubating(PoC 已验证);要求 IAM 用户具备 CCE 相关权限的 AK/SK;账户需有足够余额(CCE 集群与节点按需计费);目标区域需预存在 VPC 和子网;需一个 SSH 密钥对用于节点池 |
| 成功指标 | 空集群创建→Available、节点池绝对值扩缩容、kubeconfig 轮换、带清理的删除、公网 EIP 绑定、限流行为——均在真实华为云 CCE 账号上验证通过 |
2.3 架构优点
- 声明式管理托管集群:CCE 控制面完全由华为云托管,Provider 只负责翻译与调谐,用户通过 YAML 声明期望状态即可,无需手动控制台操作
- CCE Standard + CCE Turbo 双支持:两种集群类型都支持,默认推荐 Turbo(与 EKS 托管定位对齐),用户可按需选择
- MachinePool ↔ 节点池直通:通过
MachinePool.spec.replicas即可扩缩容节点池,托管节点池无需 bootstrap provider,对标 EKS 托管模式 - 兼容 clusterctl 全流程:
metadata.yaml+infrastructure-components.yaml已发布为 GitHub Release v0.1.0,支持clusterctl describe cluster/get kubeconfig/init/delete全流程 - GitOps 就绪:通过 ArgoCD/Flux 从 Git 全流程驱动集群创建、扩缩容和删除,实现基础设施即代码
- CCE 访问策略(对标 EKS access entries):在控制面用声明式
spec.accessPolicies[]将 IAM 用户/组/委托映射到 CCE 权限角色(ClusterAdmin/Admin/Edit/View),可限定到命名空间 - 身份管理对标 CAPA:按集群
CCEClusterIdentity(AK/SK Secret 或 SecretKey 对象引用)与控制器默认身份,支持多集群独立凭证 - 孤儿资源 GC:可选的定期清扫器删除 Cluster CR 已不存在的 CCE 集群,对标 CAPA ExternalResourceGC,防止资源泄漏
- 真实云验证通过:云侧行为已在真实华为云 CCE 账号上端到端验证(空集群创建→Available、节点池扩缩容、kubeconfig 轮换、带清理的删除、公网 EIP 绑定、限流行为)
2.4 设计关注点
| 安全性 | 可靠性 | 可扩展性 | 运维效率 |
|---|---|---|---|
| AK/SK 凭证仅通过 Secret/环境变量提供,禁止硬编码 | 限流/配额错误自动指数退避重试(APIGW.0308 429) | MachinePool replicas 声明式扩缩容节点池 | clusterctl 全流程支持,无需手动控制台操作 |
| webhook 准入校验(6 个准入 webhook + TLS 证书) | finalizer 保障删除顺序:节点池→集群→kubeconfig Secret | 多可用区节点池部署(AZ 4a/4b/4g) | GitOps 就绪,ArgoCD/Flux 全流程驱动 |
| IAM 委托与最小权限原则 | 空集群创建幂等,可接管已有集群 | CCE Standard/Turbo 双模式按需选择 | 孤儿资源 GC 定期清扫泄漏集群 |
| CCE 访问策略精细化到命名空间级 | kubeconfig 自动轮换 | 多集群独立凭证(CCEClusterIdentity) | Prometheus 指标暴露控制器运行状态 |
| 效益 | 架构如何实现它 | 测量 |
|---|---|---|
| 声明式集群管理 | 通过 CAPI CRD(Cluster/MachinePool)声明期望状态,Provider 自动调谐 | kubectl get ccemanagedcontrolplane 条件全部 True |
| 零手动控制台操作 | clusterctl init + apply YAML 全自动创建集群和节点池 | 集群 Available 且节点数 == replicas |
| GitOps 驱动 | ArgoCD/Flux 从 Git 仓库同步 CAPI 资源 | Git commit → 集群状态变更延迟 < 30s |
| 跨可用区高可用 | 节点池跨 AZ 4a/4b/4g 部署 | 单 AZ 故障时工作负载自动迁移 |
| 成本可控 | 按需计费(billingMode: 0),空集群也可创建;可接管已有集群避免新建计费资源 | 集群删除后无 EIP/EVS/ELB 拖留 |
| 安全凭证隔离 | 每集群独立 <clusterName>-credentials Secret |
凭证不跨集群共享,IAM 最小权限 |
| 限流自愈 | 控制器对 APIGW.0308(429)自动指数退避重试 | 连续创建大量集群时短暂限流后自动恢复 |
2.5 典型架构

2.6 流程描述
- 下载发布物:用户 → GitHub Release v0.1.0(下载 clusterctl.yaml 配置、组件清单和集群模板)
- 初始化管理集群:用户 → cluster-api core(通过 clusterctl init / kubectl 安装 CAPI 核心组件)
- 安装 Provider 组件:GitHub Release → cluster-api core(将 cert-manager、cce-provider 镜像部署到管理集群)
- 触发调谐:cluster-api core → capi-cce Provider(通过 infrastructureRef / controlPlaneRef 引用触发 Provider 控制器 reconcile)
- 签发 webhook 证书:cert-manager → webhook(自动签发准入 webhook 的 TLS 证书)
- IAM 鉴权:capi-cce Provider → IAM(SDK 以 AK/SK 访问密钥鉴权,获取委托凭证)
- 创建托管集群:capi-cce Provider → CCE 控制面 API(创建 CCE 托管集群、节点池、获取 kubeconfig)
- 读写凭证:capi-cce Provider → Secrets(读写 AK/SK 凭证 Secret 和 kubeconfig Secret)
- 创建工作节点:CCE 控制面 API → ECS(创建节点池中的 ECS 工作节点,如 c7.xlarge.2)
- 挂接网络:CCE 控制面 API → VPC/子网(将集群和节点挂接到用户提供的 VPC 和子网)
- 绑定公网访问:CCE 控制面 API → EIP/ELB(当开启 endpointAccess.public 时绑定公网访问端点)
- 拉取镜像:ECS → Public SWR(工作节点从公共 SWR 拉取 CAPI、cert-manager、cce-provider 镜像)
- kubeconfig 回写:CCE 控制面 API → Secrets(将工作集群 kubeconfig 写入 Secret 供用户获取)
- 获取 kubeconfig:用户 → Secrets(通过 clusterctl get kubeconfig 获取工作集群访问凭证)
- 访问工作负载:用户 → API Server(使用 kubeconfig 访问工作负载集群,kubectl get nodes 验证节点就绪)
2.7 云服务产品清单
| 分类 | 服务或产品 | 推荐配置 |
|---|---|---|
| 运维/交付层 | SWR(容器镜像服务) | 公共 SWR,免认证拉取;存放 CAPI 核心、cert-manager、cce-provider 镜像 |
| 管理集群层 | CCE(云容器引擎) | Turbo 集群,cn-north-4 区域;管理集群运行 CAPI 核心控制器和 Provider 控制器 |
| 管理集群层 | cert-manager | 自动签发 webhook TLS 证书,与 webhook 服务配套部署 |
| 华为云基础设施层 | IAM(统一身份认证服务) | IAM 用户 AK/SK 凭证,具备 CCE 集群/节点池读写权限;支持委托授权 |
| 华为云基础设施层 | VPC(虚拟私有云) | 用户预提供的 VPC 和子网;区分节点子网和 ENI 子网;容器/服务网段在同一 VPC 内唯一 |
| 华为云基础设施层 | CCE 控制面 API | Turbo 集群类型,billingMode: 0(按需计费);控制面由华为云托管 |
| 华为云基础设施层 | ECS(弹性云服务器) | c7.xlarge.2 规格,由 CCE 节点池管理;按节点计费,billingMode 随节点池配置 |
| 华为云基础设施层 | EIP / ELB | 仅当开启 endpointAccess.public 时绑定;EIP 提供公网 IP,ELB 负载均衡 API Server |
| 工作负载集群层 | CCE(云容器引擎) | Turbo 集群,跨多可用区部署(AZ 4a/4b/4g);节点池 pool-0/1/2 分别对应不同 AZ |
3. 参考链接
- 源仓库:cloudnative-cluster-api-provider-cce
- 中文 README:README.zh-CN.md
- GitHub Release v0.1.0:发布物下载
- 架构设计文档:docs/architecture-design.md
- 需求设计文档:docs/requirements-design.md
- 部署指南:docs/deployment-guide.md
- 验证结论记录:docs/cce-verification-findings.md
- 华为云 CCE 产品页:www.huaweicloud.cn/product/cce.html
4. 使用限制
- 参考架构非生产就绪:本文档为参考架构,项目状态为 incubating(PoC 已验证)。提供设计蓝图和最佳实践指导,不包含可直接部署的自动化脚本或完整配置。实际部署需根据组织具体需求进行定制化适配
- 云平台版本要求:要求 clusterctl v1.14.x 与 CAPI 合约匹配;华为云部分服务可能需企业版账号或特定版本才能开通使用,建议在部署前确认所需服务的可用性
- 服务白名单:部分高级服务(如 CCE Turbo)可能需提前申请白名单开通;IAM 用户需具备 CCE 集群/节点池相关权限的 AK/SK
- 跨区域部署限制:当前验证在 cn-north-4 区域完成;跨区域部署时需考虑数据同步延迟和合规要求(如数据本地化),部分服务可能不支持跨区域联动
- 推荐部署规模:适用于需要管理多个 CCE 托管集群的中大型组织;小型组织可能无需全栈部署。CCE API 限流为 10 次/分钟,连续大量创建集群时需注意退避重试
- 组件替换风险:架构设计支持组件替换和新增,但替换已验证的组件(如 cert-manager、webhook)可能引入集成兼容性问题,需额外测试验证
- 合规认证依赖:架构对标 源参考 EKS 托管模式和 CAPA 设计模式,但实际合规认证需组织自行完成认证流程,本架构不替代正式合规审计
- 持续运维要求:架构需要持续的策略调优、版本升级和监控运营。kubeconfig 需定期轮换,孤儿资源 GC 需定期运行,Prometheus 指标需持续监控。非一次性部署即可永久生效
附录 A. 术语和缩略语
| 缩略语 | 全称 | 说明 |
|---|---|---|
| CAPI | Cluster API | Kubernetes SIG 官方的集群生命周期管理框架,定义 Cluster/MachinePool 等标准 CRD |
| CCE | Cloud Container Engine | 云容器引擎,华为云托管的 Kubernetes 集群服务 |
| CCE Standard | — | CCE 标准集群类型,控制面由华为云托管 |
| CCE Turbo | — | CCE Turbo 集群类型,增强版托管集群,与 EKS 托管定位对齐 |
| CAPA | cluster-api-provider-aws | 华为云的 Cluster API Provider,本项目的对标参考实现 |
| CRD | Custom Resource Definition | Kubernetes 自定义资源定义 |
| MachinePool | — | CAPI 标准 CRD,代表一组工作节点(对应 CCE 节点池) |
| clusterctl | — | Cluster API 官方命令行工具,支持 init/describe/get kubeconfig/delete 全流程 |
| IAM | Identity and Access Management | 统一身份认证服务,管理 AK/SK 和委托授权 |
| AK/SK | Access Key / Secret Key | IAM 用户的访问密钥对,用于 API 鉴权 |
| SWR | Software Repository | 容器镜像服务,存储和分发容器镜像 |
| VPC | Virtual Private Cloud | 虚拟私有云,提供隔离的网络环境 |
| EIP | Elastic IP | 弹性公网 IP,提供公网访问能力 |
| ELB | Elastic Load Balance | 弹性负载均衡,分发流量到多个节点 |
| ECS | Elastic Cloud Server | 弹性云服务器,CCE 节点池管理的工作节点 |
| GitOps | — | 通过 Git 仓库驱动基础设施和应用部署的运维模式,常用工具 ArgoCD/Flux |
| finalizer | — | Kubernetes 控制器模式,保障资源删除顺序的清理钩子 |
| reconcile | — | 控制器调谐循环,将实际状态向期望状态收敛的过程 |
| webhook | — | Kubernetes 准入 webhook,对资源变更进行校验和默认值填充 |
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)