3. 集群蓝图总览:多租户集群的整体架构图、控制面与数据面分离、租户生命周期管理

本章是整门课程的架构总纲。我们将从全局视角出发,绘制多租户隔离集群的完整蓝图,明确控制面与数据面的职责边界,并梳理租户从创建到销毁的完整生命周期。理解这张蓝图,是后续所有分层设计与技术选型的基础。

3.1 多租户集群整体架构图

下图展示了多租户隔离集群的核心组件与交互关系。整个系统遵循“控制面-数据面”分离原则,租户仅能感知到属于自己的隔离资源。

多租户隔离集群整体架构图 控制面 (Control Plane) API Server Scheduler Controller Manager 多租户控制器 etcd (租户元数据 / 配额 / RBAC / NetworkPolicy) 数据面 (Data Plane) 租户 A 隔离空间 Namespace-A ServiceAccount-A NetworkPolicy-A ResourceQuota-A Pod / Deployment / Service (租户A) 租户 B 隔离空间 Namespace-B ServiceAccount-B NetworkPolicy-B ResourceQuota-B Pod / Deployment / Service (租户B) 调度与编排
架构要点:控制面统一管理所有租户的元数据与策略,数据面通过 Namespace、NetworkPolicy、ResourceQuota 实现租户间的硬隔离。多租户控制器是控制面的核心扩展组件,负责租户的创建、配额初始化与策略注入。

3.2 控制面与数据面分离

控制面与数据面的分离是多租户集群设计的基石。这种分离不仅带来了安全收益,也使得控制面的扩展与数据面的弹性伸缩可以独立进行。

维度 控制面 (Control Plane) 数据面 (Data Plane)
职责 租户管理、认证授权、配额校验、策略下发 运行用户工作负载、网络通信、存储挂载
安全要求 极高,需严格审计与 RBAC 高,需 NetworkPolicy 与 Pod Security
扩展性 垂直扩展为主,支持 HA 水平扩展,Node 池可独立扩缩
租户可见性 不可见,仅平台管理员操作 可见,租户可查看自己的资源
故障影响 影响整个集群调度能力 仅影响该租户的工作负载
最佳实践:控制面组件应部署在独立的 Master 节点上,并开启 etcd 加密与审计日志。数据面节点应禁止非授权访问,且所有节点间的通信必须使用 TLS。

3.3 租户生命周期管理

租户的生命周期管理是平台自动化的核心。一个完整的租户生命周期包含以下五个阶段,每个阶段都有对应的自动化操作与校验点。

租户生命周期管理流程 1. 租户创建 提交申请 2. 初始化 Namespace/Quota 3. 激活 RBAC/NetworkPolicy 4. 运行 监控/审计 5. 销毁 清理资源 各阶段关键操作说明 1. 创建:平台管理员或自助门户提交租户申请,包含租户名称、配额模板、管理员列表。 2. 初始化:自动创建 Namespace、ServiceAccount、ResourceQuota、LimitRange。 3. 激活:绑定 RBAC Role/ClusterRole,下发默认 NetworkPolicy,配置 Pod Security Admission。 4. 运行:持续监控资源使用、审计操作日志、自动扩缩容(可选)。 5. 销毁:回收所有 Namespace 资源、清理 etcd 元数据、通知关联系统。

3.4 租户生命周期管理的关键操作清单

下表列出了每个生命周期阶段中,平台需要执行的具体操作与校验点,供架构设计与自动化脚本开发参考。

阶段 操作项 校验点 自动化程度
创建 提交租户申请、审批流程、分配租户 ID 租户名称唯一性、配额模板有效性 全自动 / 半自动
初始化 创建 Namespace、ServiceAccount、ResourceQuota、LimitRange Namespace 是否成功创建、Quota 是否生效 全自动
激活 绑定 RBAC、下发 NetworkPolicy、配置 Pod Security RBAC 权限是否正确、NetworkPolicy 是否阻断跨租户流量 全自动
运行 资源监控、成本计量、审计日志、配额预警 资源使用率是否超过阈值、是否有异常操作 全自动
销毁 删除 Namespace、清理 etcd 元数据、通知计费系统 Namespace 是否完全删除、残留资源是否清理 全自动(需确认)
注意:租户销毁阶段必须设计“软删除”机制。建议先标记租户为“冻结”状态,保留数据 7-30 天,确认无数据恢复需求后再执行硬删除。直接删除 Namespace 可能导致 PVC 数据无法恢复。

3.5 多租户控制器核心逻辑

多租户控制器是控制面的核心扩展组件,它监听租户 CRD 的变化,并自动执行生命周期操作。以下是一个简化的控制器工作流程伪代码:

// 多租户控制器核心逻辑(伪代码)
func (c *MultiTenantController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    tenant := &multitenancyv1.Tenant{}
    if err := c.Get(ctx, req.NamespacedName, tenant); err != nil {
        return ctrl.Result{}, client.IgnoreNotFound(err)
    }

    switch tenant.Status.Phase {
    case "Pending":
        // 1. 创建 Namespace
        ns := buildNamespace(tenant)
        if err := c.Create(ctx, ns); err != nil { return ctrl.Result{}, err }

        // 2. 创建 ResourceQuota
        rq := buildResourceQuota(tenant)
        if err := c.Create(ctx, rq); err != nil { return ctrl.Result{}, err }

        // 3. 更新状态为 "Initializing"
        tenant.Status.Phase = "Initializing"
        c.Status().Update(ctx, tenant)

    case "Initializing":
        // 4. 绑定 RBAC
        roleBinding := buildRoleBinding(tenant)
        if err := c.Create(ctx, roleBinding); err != nil { return ctrl.Result{}, err }

        // 5. 下发 NetworkPolicy
        netPol := buildDefaultNetworkPolicy(tenant)
        if err := c.Create(ctx, netPol); err != nil { return ctrl.Result{}, err }

        // 6. 更新状态为 "Active"
        tenant.Status.Phase = "Active"
        c.Status().Update(ctx, tenant)

    case "Terminating":
        // 7. 删除 Namespace(级联删除所有资源)
        ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: tenant.Spec.Namespace}}
        if err := c.Delete(ctx, ns); err != nil { return ctrl.Result{}, err }

        // 8. 更新状态为 "Deleted"
        tenant.Status.Phase = "Deleted"
        c.Status().Update(ctx, tenant)
    }
    return ctrl.Result{}, nil
}
设计建议:租户 CRD 应包含 Spec(租户名称、配额模板、管理员列表)和 Status(阶段、资源使用概览、错误信息)。控制器应使用 Finalizer 确保资源被正确清理,避免孤儿资源。