OpenEverest 数据库集群 ELB 自动管理控制器架构
1. 用途和受众
1.1 预期用途
为运行在华为云 CCE 上的 OpenEverest 数据库集群(PostgreSQL、MySQL/PXC、MongoDB/PSMDB)自动创建和管理华为云 ELB 实例,替代 CCE CCM 的 ELB 管理功能。控制器直接调用华为云 ELB v3 API 创建完整的 ELB 资源栈(ELB + Listener + Pool + Members + HealthCheck + ACL),不依赖 CCM autocreate,通过 ELBBinding CRD 状态隔离、Mutating Webhook 源头阻断 CCM 和 Finalizer 隔离三大机制,彻底消除控制器与 CCM 的 Service status 竞争。支持自动模式(零配置全自动创建 ELB)和手动模式(通过 LoadBalancerConfig 参数模板自定义 ELB 带宽、EIP 类型等参数)。
适用行业:需要在华为云上运行 OpenEverest 数据库集群(PostgreSQL、MySQL/PXC、MongoDB/PSMDB)并对外提供访问的各类企业。
业务场景:数据库集群公网访问、跨 VPC 数据库连接、多可用区高可用数据库部署、需要自定义 ELB 带宽和 EIP 类型的数据库场景。
合规要求:需使用永久 AK/SK(不支持临时 STS Token),IAM 权限需满足 ELB/EIP/VPC/ECS 的最小权限集。
部署规模:单 CCE 集群可运行多个 OpenEverest 数据库集群,每个 LoadBalancer Service 对应一个独立 ELB 实例;建议根据 EIP 配额规划数据库集群数量。
1.2 目标受众
- 华为云 CCE 用户和 Kubernetes 集群管理员
- OpenEverest 数据库集群运维人员
- 需要在华为云上运行 OpenEverest 数据库并对外暴露访问的企业技术团队
- 希望对齐 EKS/GKE 负载均衡体验的华为云用户
2. 参考架构概述
2.1 架构描述
huawei-elb-controller 是面向华为云 CCE 上 OpenEverest 数据库集群的 Kubernetes 控制器架构,旨在通过 ELBBinding CRD 状态隔离、Mutating Webhook 源头阻断 CCM 和 Finalizer 隔离三大核心机制,实现 ELB 实例的自动创建和全生命周期管理,彻底消除与 CCE CCM 的 Service status 竞争。
架构类型为 Kubernetes 控制器 + 华为云 ELB 直接 API 管理架构,云平台为华为云。
外部系统说明:
| 外部系统 | 说明 |
|---|---|
| 数据库客户端 | psql / mysql / mongosh 等数据库客户端工具,通过公网 IP 连接数据库集群 |
| OpenEverest | 数据库集群管理平台,创建 DatabaseCluster CR 和 LoadBalancer Service,是控制器管理的触发源 |
| CCE CCM | CCE Cloud Controller Manager,Webhook 注入 loadBalancerClass 后完全跳过本控制器管理的 Service |
2.2 业务背景
| 项目 | 描述 |
|---|---|
| 业务问题 | 华为云 CCE 上运行 OpenEverest 数据库集群时,CCE CCM 在管理 LoadBalancer Service 的 ELB 时存在与控制器的 Service status 竞争问题,导致 ELB 状态不一致、资源泄漏和配置冲突 |
| 期望的结果 | 控制器独立管理 ELB 全生命周期(创建/更新/删除),与 CCM 零冲突,对齐 EKS/GKE 的负载均衡体验,实现零配置自动创建和参数可定制 |
| 主要用户 | OpenEverest 数据库集群管理员、Kubernetes 运维工程师、华为云 CCE 用户 |
| 关键制约因素 | 必须使用永久 AK/SK(不支持临时 STS Token);需 ELB Administrator、EIP Administrator、VPC ReadOnly、ECS ReadOnly 权限;EIP 配额有限(默认约 5-6 个);eip-type 创建后不可变更 |
| 成功指标 | ELB 自动创建成功率、Service 获得 EXTERNAL-IP 的延迟、CCM 干预事件数(目标为 0)、ELB 资源零泄漏 |
2.3 架构优点
- ELBBinding CRD 状态隔离:ELB 状态存储在独立 CRD 中,不受 Service metadata 覆盖影响,即使 CCM 覆盖整个 Service metadata,权威状态仍可从 ELBBinding 自愈
- Mutating Webhook 源头阻断 CCM:自动注入
loadBalancerClass: huawei-elb.io/direct-api,CCE CCM 从创建之初就完全跳过该 Service,0 干预 0 噪音,不产生任何GetLoadBalancerFailed事件 - Finalizer 隔离:cleanup finalizer 写在 ELBBinding 上而非 Service 上,CCM 覆盖 Service metadata 时 finalizer 不会丢失,ELB 资源不会泄漏
- 零配置自动模式:不创建 LBC 即可全自动创建 ELB,VPC/子网/可用区自动探测,与 EKS/GKE 体验一致
- 直接 API 管理:控制器直接调华为云 ELB v3 API 创建/更新/删除 ELB 及子资源,不依赖 CCM,不写任何
kubernetes.io/elb.*注解 - 防重复创建 ELB:当 OpenEverest 覆盖
elb-id注解时,控制器通过 ELBBinding Status 或名称反查恢复关联,避免重复创建孤儿 ELB
2.4 设计关注点
| 状态隔离 | CCM 冲突隔离 | 资源生命周期管理 | 参数配置灵活性 |
|---|---|---|---|
| ELBBinding CRD 作为 ELB 状态唯一权威存储,独立于 Service metadata | Mutating Webhook 注入 loadBalancerClass 使 CCM 从源头完全跳过 | Finalizer 在 ELBBinding 上确保 ELB 清理,孤儿 binding 兜底清理 | 自动模式零配置,手动模式通过 LBC 注解自定义带宽/EIP/公网等参数 |
| 效益 | 架构如何实现它 | 测量 |
|---|---|---|
| 消除 CCM 竞争 | Webhook 注入不匹配的 loadBalancerClass,CCM 完全跳过 | CCM 干预事件数(目标为 0) |
| ELB 状态一致性 | ELBBinding CRD 作为唯一权威存储,Service 注解仅作兼容可见性 | ELB 状态与 ELBBinding Status 一致率 |
| 零资源泄漏 | Finalizer 在 ELBBinding 上,孤儿 binding 检测后自动清理 ELB+EIP+IP 组 | 孤儿 ELB/EIP 资源数(目标为 0) |
| 对齐 EKS/GKE 体验 | 自动模式零配置创建 ELB,LBC 作为参数模板(非实例引用),多 Service 各自独立 ELB | 配置复杂度(目标为零配置) |
3.5 典型架构
架构图文件:

2.6 流程描述
数据流步骤与架构图中圆圈数字 ①-⑧ 一一对应:
- 数据库客户端访问:数据库客户端(psql/mysql/mongosh)→ EIP 弹性公网 IP(客户端通过公网 IP 连接数据库)
- 流量转发到 ELB:EIP → ELB 实例(公网 IP 将流量转发到弹性负载均衡器)
- ELB 分发到节点:ELB → CCE 节点(ELB 通过 NodePort 将流量分发到后端 CCE 节点)
- 节点转发到数据库 Pod:CCE 节点 → 数据库 Pod(节点上 NodePort 转发到数据库 Pod 中的 pgbouncer + postgresql)
- Service 创建触发 Webhook:DatabaseCluster CR → OpenEverest 创建 LoadBalancer Service → K8s API Server 调用 Mutating Webhook(拦截 everest 命名空间的 Service CREATE 请求)
- Webhook 注入 loadBalancerClass:Webhook 检查通过后注入
spec.loadBalancerClass: huawei-elb.io/direct-api→ CCM 看到不匹配的 class 完全跳过该 Service - Controller 创建 ELB 资源栈:Controller watch 到 Service → 创建 ELBBinding CRD(OwnerReference + finalizer)→ 探测 VPC/子网/可用区 → 直接调 ELB v3 API 创建 ELB + Listener + Pool + Members + HealthCheck + ACL
- 状态回写与对外可用:Controller 写 ELBBinding Status(elbID, ingressIP, phase=Ready)+ 更新 Service status → Service 获得 EXTERNAL-IP,数据库客户端可通过公网 IP 访问
2.7 云服务产品清单
| 分类 | 服务或产品 | 推荐配置 |
|---|---|---|
| 网络接入层 | ELB, EIP | ELB: 独享型,公网类型,TCP 健康检查(10s/10s/3次重试),后端模式 NodePort; EIP: 5_bgp BGP 多线,10Mbit/s 带宽,按流量计费 |
| 计算层 | CCE | CCE: 集群版,Kubernetes 1.31+,节点跨可用区 A/B 分布,CCE CCM 需跳过 loadBalancerClass 不匹配的 Service |
| 容器镜像层 | SWR | SWR: 标准版,用于存储和拉取 huawei-elb-controller 镜像 |
| 安全与认证层 | IAM | IAM: 主账号或已授权 IAM 子用户,需 ELB Administrator、EIP Administrator、VPC ReadOnly、ECS ReadOnly 权限,使用永久 AK/SK |
| 网络层 | VPC | VPC: 标准版,含多可用区子网,VPC ID/子网 ID/可用区由控制器从节点 ECS 元数据和标签自动探测 |
| 基础设施层 | ECS | ECS: 通用计算型,作为 CCE 集群节点运行数据库 Pod,跨可用区部署保障高可用 |
3. 参考链接
4. 使用限制
- 参考架构非生产就绪:本文档为参考架构,提供设计蓝图和最佳实践指导,不包含可直接部署的自动化脚本或完整配置。实际部署需根据组织具体需求进行定制化适配
- 云平台版本要求:CCE 集群需 Kubernetes 1.31+,OpenEverest 需使用
everest.percona.com/v1alpha1API group,部分服务可能需企业版账号或特定版本才能开通使用 - 服务白名单:华为云 ELB、EIP 服务需已开通,IAM 子用户需具备 ELB Administrator、EIP Administrator、VPC ReadOnly、ECS ReadOnly 权限
- 跨区域部署限制:region 必须与 CCE 集群所在 region 一致(如 cn-north-4、sa-brazil-1),凭据 Secret 中 region key 不设置会导致控制器启动失败;跨区域部署时需考虑数据同步延迟和合规要求
- 推荐部署规模:适用于需要在华为云 CCE 上运行 OpenEverest 数据库集群并对外暴露访问的中大型组织,EIP 配额有限(默认约 5-6 个),多集群部署需关注配额管理
- 组件替换风险:架构设计支持组件替换和新增,但替换已验证的组件(如使用其他 ELB 管理方案替代本控制器)可能引入集成兼容性问题,需额外测试验证
- 合规认证依赖:架构对标相关合规标准,但实际合规认证需组织自行完成认证流程,本架构不替代正式合规审计
- 持续运维要求:架构需要持续的策略调优、版本升级和监控运营,非一次性部署即可永久生效;Webhook 证书需维护,控制器需跟随 OpenEverest 版本升级
附录 A. 术语和缩略语
| 缩略语 | 全称 | 说明 |
|---|---|---|
| ELB | Elastic Load Balance | 弹性负载均衡,华为云负载均衡服务 |
| EIP | Elastic IP | 弹性公网 IP,华为云公网 IP 服务 |
| CCE | Cloud Container Engine | 云容器引擎,华为云 Kubernetes 托管服务 |
| CRD | Custom Resource Definition | 自定义资源定义,Kubernetes 扩展 API |
| ELBBinding | ELBBinding CRD | 本控制器定义的 CRD,作为 ELB 状态的唯一权威存储 |
| LBC | LoadBalancerConfig | OpenEverest 中定义 ELB 参数模板的自定义资源 |
| CCM | Cloud Controller Manager | Kubernetes 云控制器管理器 |
| Webhook | Mutating Webhook | 拦截并修改 Kubernetes API 请求的准入控制器 |
| Finalizer | Finalizer | Kubernetes 资源删除保护机制,确保清理逻辑执行完毕后才删除资源 |
| AK/SK | Access Key / Secret Key | 华为云访问密钥对 |
| VPC | Virtual Private Cloud | 虚拟私有云,华为云网络隔离服务 |
| SWR | Software Repository for Containers | 容器镜像服务,华为云容器镜像仓库 |
| IAM | Identity and Access Management | 统一身份认证服务,华为云权限管理服务 |
| NodePort | NodePort | Kubernetes Service 类型,通过节点端口暴露服务 |
| OwnerReference | OwnerReference | Kubernetes 资源关联机制,子资源通过 OwnerReference 关联父资源实现级联删除 |
- 点赞
- 收藏
- 关注作者
评论(0)