2、多租户架构基础:租户定义、资源隔离模型与故障域概念

多租户架构是云原生平台实现资源复用与安全隔离的核心设计模式。在故障域隔离演练中,理解租户的定义粒度、隔离模型的实现层次以及故障域的物理/逻辑边界,是后续进行Argo CD追踪与样本抽检的前提。本节从三个维度展开:租户定义(Who)、资源隔离模型(How)、故障域概念(Where)。

2.1 租户定义:从业务实体到平台标识

租户(Tenant)是平台中拥有独立资源配额、访问权限和运维边界的逻辑单元。在SRE实践中,租户通常对应以下层级:

租户层级 典型对应实体 隔离粒度 故障域影响范围
Cluster Tenant 独立业务线、子公司 独占Kubernetes集群 集群级故障完全隔离
Namespace Tenant 部门、项目组、微服务团队 共享集群内的Namespace 受集群级故障影响
Sub-Namespace Tenant 环境分支(dev/staging)、特性团队 分层Namespace(Hierarchical Namespace) 受父Namespace及集群故障影响
SRE关键判断: 在多租户故障域隔离演练中,租户定义越粗(如Cluster Tenant),故障隔离越彻底,但资源碎片化越严重;租户定义越细(如Sub-Namespace Tenant),资源利用率越高,但故障爆炸半径控制越复杂。建议根据业务SLA等级选择混合模型。

2.2 资源隔离模型:Namespace与Cluster的对比

Kubernetes原生提供两种资源隔离边界:Namespace(软隔离)和Cluster(硬隔离)。下表从故障域隔离视角对比两者的关键差异:

隔离维度 Namespace隔离 Cluster隔离
API Server共享 是(共享控制面) 否(独立控制面)
网络策略 需NetworkPolicy显式配置 天然物理网络隔离
资源配额 ResourceQuota + LimitRange 集群级资源池独立
故障爆炸半径 共享组件故障(如kube-apiserver宕机)影响所有Namespace 集群级故障仅影响本集群租户
Argo CD管理方式 单集群多Application(通过destination.namespace区分) 多集群多Application(通过destination.server区分)
适用场景 低风险、高密度部署 高安全、高SLA、PCI-DSS等合规场景
# Argo CD Application示例:Namespace隔离模式
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: tenant-alpha-payment
spec:
  destination:
    server: https://kubernetes.default.svc  # 共享集群
    namespace: tenant-alpha-prod            # 租户独占Namespace
  source:
    repoURL: https://git.example.com/tenants/alpha
    path: payment-service
    targetRevision: main
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

2.3 故障域概念:AZ、Region与Node

故障域(Failure Domain)是系统在发生故障时,受影响资源的最小逻辑或物理边界。在云原生多租户架构中,常见的故障域层级如下:

  • Node(节点):单台物理机或虚拟机故障,影响该节点上所有Pod。租户若未配置PodAntiAffinity,可能出现同一租户多个副本集中在同一Node上,导致单点故障。
  • AZ(Availability Zone,可用区):同一Region内独立的物理数据中心,拥有独立的电力、网络和冷却系统。AZ故障影响该AZ内所有Node和依赖该AZ的云服务(如EBS、SLB)。
  • Region(区域):由多个AZ组成的地理区域,AZ间通过低延迟光纤互联。Region故障极为罕见,但一旦发生,影响整个区域的所有租户。
演练避坑: 很多团队在故障域隔离演练中只测试了Pod级别的故障(如kill一个Pod),却忽略了AZ级别的故障注入。请记住:Node故障是日常,AZ故障是灾难,Region故障是核弹。多租户隔离演练必须至少覆盖Node和AZ两个层级。
多租户故障域层级关系图 Region(区域) 故障影响:整个区域所有租户、所有集群、所有服务 隔离策略:跨Region部署 + 全局负载均衡(GSLB) 演练频率:极低(通常只做桌面推演) AZ-1(可用区A) 独立电力/网络/冷却 故障影响:该AZ内所有Node 隔离策略:PodTopologySpread 演练频率:季度/月度 AZ-2(可用区B) 独立电力/网络/冷却 故障影响:该AZ内所有Node 隔离策略:PodTopologySpread 演练频率:季度/月度 Node-1 租户A Pod Node-2 租户B Pod Node-3 租户A Pod Node-4 租户C Pod 关键原则:同一租户的Pod应尽量分布在不同的Node和AZ中,避免租户A的故障扩散到租户B

2.4 故障域隔离的Argo CD映射模型

在Argo CD的多集群多租户管理场景中,故障域隔离直接映射为Application的destination配置策略。以下是一个典型的故障域感知部署模型:

Argo CD 多租户故障域映射架构 Argo CD 控制面 ApplicationSet + 多集群管理 租户A(Namespace隔离) App: payment-service App: user-service App: notification-svc 目标集群: cluster-prod 目标Namespace: tenant-a-prod 故障域策略: AZ-A + AZ-B 分布 租户B(Cluster隔离) App: order-service App: inventory-svc App: payment-svc 目标集群: cluster-tenant-b-prod 目标Namespace: default 故障域策略: 独立集群 + AZ-A 部署 租户A共享集群但隔离Namespace,租户B独占集群——两种模式在Argo CD中通过不同的destination配置实现

2.5 关键路径总结:故障域隔离的SRE检查清单

在进行多租户故障域隔离演练前,SRE团队应逐项确认以下基线:

  1. 租户边界已定义:每个租户有明确的Cluster或Namespace归属,且通过Argo CD Application的destination字段锁定。
  2. Pod分布策略已配置:使用podAntiAffinity和topologySpreadConstraints确保同一租户的副本跨Node和AZ分布。
  3. 资源配额已设置:每个租户的Namespace配置了ResourceQuota,防止资源争抢导致的级联故障。
  4. 网络隔离已生效:租户间通过NetworkPolicy或独立集群实现网络隔离,避免故障扩散。
  5. 故障注入目标已明确:演练计划中标注了本次演练要模拟的故障域层级(Node / AZ / Region)。