OpenEverest 数据库集群 ELB 自动管理控制器架构

举报
华为云架构中心 发表于 2026/09/10 14:14:07 2026/09/10
【摘要】 为运行在华为云 CCE 上的 OpenEverest 数据库集群(PostgreSQL、MySQL/PXC、MongoDB/PSMDB)自动创建和管理华为云 ELB 实例,替代 CCE CCM 的 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 流程描述

数据流步骤与架构图中圆圈数字 ①-⑧ 一一对应:

  1. 数据库客户端访问:数据库客户端(psql/mysql/mongosh)→ EIP 弹性公网 IP(客户端通过公网 IP 连接数据库)
  2. 流量转发到 ELB:EIP → ELB 实例(公网 IP 将流量转发到弹性负载均衡器)
  3. ELB 分发到节点:ELB → CCE 节点(ELB 通过 NodePort 将流量分发到后端 CCE 节点)
  4. 节点转发到数据库 Pod:CCE 节点 → 数据库 Pod(节点上 NodePort 转发到数据库 Pod 中的 pgbouncer + postgresql)
  5. Service 创建触发 Webhook:DatabaseCluster CR → OpenEverest 创建 LoadBalancer Service → K8s API Server 调用 Mutating Webhook(拦截 everest 命名空间的 Service CREATE 请求)
  6. Webhook 注入 loadBalancerClass:Webhook 检查通过后注入 spec.loadBalancerClass: huawei-elb.io/direct-api → CCM 看到不匹配的 class 完全跳过该 Service
  7. Controller 创建 ELB 资源栈:Controller watch 到 Service → 创建 ELBBinding CRD(OwnerReference + finalizer)→ 探测 VPC/子网/可用区 → 直接调 ELB v3 API 创建 ELB + Listener + Pool + Members + HealthCheck + ACL
  8. 状态回写与对外可用: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/v1alpha1 API 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 关联父资源实现级联删除
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。