Skip to content

基础资源选型 ​

这层到底提供什么 ​

基础资源层不处理数据,它回答四个问题:

问题组件能力
组件跑在哪、怎么调度Kubernetes统一编排、故障自愈、滚动发布
镜像从哪来Harbor私有镜像仓库,内网唯一来源
密钥怎么管、怎么轮转OpenBao密钥存储、动态凭证、PKI
外部怎么进来、证书怎么签Envoy Gateway + cert-manager南北向入口、证书签发与轮转

四个能力缺一个,后面每层都要打补丁。所以这层不是"装几个工具",是先把平台的公共能力立起来。

为什么是 Kubernetes ​

候选对比 ​

维度Kubernetes裸机 + 虚拟机Hadoop YARNNomad
组件承载范围计算与有状态服务统一编排,本栈全部组件以容器交付逐组件手工部署,无统一编排只调度 Hadoop 作业,不承载中间件容器为主,有状态支持有限
故障自愈声明式期望态 + 控制器循环,节点或进程故障自动重建依赖人工介入仅作业级重试声明式,但生态较弱
弹性与扩容加机器即扩算力,不改组件部署方式需重建虚机并重新部署需停机调整队列与节点可扩,但周边需自建
发布与回滚镜像版本即声明,回滚就是改回上一版靠人记操作步骤无版本化发布概念需自建发布流程
生态与事实标准云原生事实标准,所有组件的首选支持对象无统一生态仅覆盖 Hadoop 生态生态与插件较少
人才与知识可得知识库与人才供给最充足全手工,不可持续知识面窄人才稀少

结论 ​

Kubernetes 是必选项,不是可选项。 原因不是"流行",而是本栈的现实:

  • 十几个组件里既有无状态计算(Spark、Flink、Kyuubi),也有有状态服务(Kafka、PostgreSQL、Doris、Elasticsearch)。只有 K8s 能用同一套声明式方式管理两类负载。
  • 数仓要的是"ETL 不中断、对外服务不掉线"。K8s 的控制器循环、滚动升级、就绪探针、PDB 是这套可用性的最低保障。
  • 未来加 GPU 节点跑 AI 训练/推理,还是同一套调度;换成 YARN 或裸机,等于重做一遍。

Harbor:私有镜像仓库 ​

为什么必须有:K8s 每次拉镜像都走公网,一是慢、二是断网就起不来;镜像本身也是需要版本管理的资产。生产环境必须内网仓库。

落地要点:

  1. 先有鸡还是先有蛋:Harbor 自己也跑在 K8s 上。第一次要从公网拉 Harbor 镜像,装好后再把集群的镜像源切到 Harbor。
  2. 项目与配额:按 base、data、compute、governance 分项目,开镜像保留策略(保留最近 N 个 tag + 每周全量),否则半年就把盘吃满。
  3. 扫描与签名:开 Trivy 扫描;有条件上 cosign 签名,配合准入策略只允许签名镜像。
  4. 复制:多集群时用 Harbor 的 replication 做异地同步。

测试集群例外:短期测试可以暂时不装 Harbor,用公网镜像 + 国内加速;但要在验收清单里记一笔"生产必须补"。三节点都拉同一批镜像,重复流量不小,能配本地缓存/加速器就配。

OpenBao:密钥与证书 ​

背景:Vault 从 2023 年起改为 BUSL 许可,源码可见但不再是 OSI 开源。OpenBao 是它的开源分支(MPL-2.0),API 基本兼容,迁移成本低。

本栈里它干三件事:

用途引擎说明
静态密钥KV v2数据库密码、S3 AK/SK、组件 admin token
动态凭证Database secrets engine给 Spark/Flink 发短时数据库账号,避免长期密码
证书PKI secrets engine作为 cert-manager 的内部 CA 后端

落地要点:

  • 生产用 Raft 存储 + 三节点,开自动解封(云 KMS 或 transit);
  • 根令牌离线保存,日常用带策略的 AppRole / Kubernetes auth;
  • 密钥轮转不是"改个密码",要配合应用 reload(K8s Secret 更新后滚动重启);
  • 先定密钥分级:平台级、组件级、业务级,别把所有东西塞一个 path。

Envoy Gateway 与 cert-manager ​

Envoy Gateway:基于 Gateway API 的南北向入口。选它的理由是"够用且不复杂"——HTTPRoute/GRPCRoute、TLS 终止、统一认证(JWT/OIDC,必要时接外部鉴权)、限流,覆盖本栈对外暴露的需求。它不是唯一解,Traefik、APISIX、云厂商 LB 都能替代,但别同时上两套入口。

cert-manager:K8s 证书管理的事实标准。两种用法:

  • 对外域名走 ACME(Let's Encrypt / 企业 CA);
  • 内部组件间走 CA Issuer,CA 后端接 OpenBao PKI,证书自动续期。

注意:内部证书有效期别设太长(90 天足够),否则轮转逻辑永远得不到验证。

生产拓扑与测试集群的差异 ​

项生产3 节点测试集群
集群3 master + N worker,etcd 独立盘3 台 kubeadm(1 control-plane + 2 worker)
入口Envoy Gateway + 云 LB + WAFNodePort + SSH 隧道
镜像Harbor + 扫描 + 签名公网镜像 + 加速
密钥OpenBao 三节点 Raft单实例或三节点 Raft(看时间)
存储Ceph 独立存储节点池、独立故障域SeaweedFS 3 节点,或 Ceph 3 OSD 同机房
网络CNI + NetworkPolicy + 多网卡默认 CNI,单网卡/私网
升级先 staging 后生产,逐节点 drain不升级,随环境重建

落地检查清单 ​

  • [ ] K8s 版本与所有 Operator(Spark、Flink、Doris、Strimzi、OpenMetadata)的兼容矩阵核对过
  • [ ] 节点池按 system / compute / storage 打标签,组件用 nodeSelector 固定
  • [ ] 每个命名空间设置 ResourceQuota 与 LimitRange,防止一个组件吃光节点
  • [ ] 关键组件配 PodDisruptionBudget,节点维护时不至于全挂
  • [ ] 镜像仓库、密钥、入口、证书四件事都有 owner
  • [ ] 集群证书与 kubeconfig 的过期时间记录在案