kubernetes 多租户管控核心是按部门设独立 namespace 并配 resourcequota 限总量、limitrange 管单 pod 资源,辅以标签、rbac、监控告警实现精准可控隔离。

在 Kubernetes 中,通过 Namespace 隔离业务部门、再配合 ResourceQuota 设置资源使用上限,是实现多租户安全管控的核心手段。关键不在于“能不能限制”,而在于“限制是否精准、可维护、不误伤业务”。
按部门划分独立 Namespace
每个业务部门(如 finance、marketing、ai-platform)应拥有专属的 Namespace,避免资源混用和权限越界。
- 创建时添加标签便于后续策略管理,例如:
kubectl create namespace finance --dry-run=client -o yaml | kubectl label -f - team=finance - 禁止直接在 default 或 kube-system 等系统命名空间中部署业务应用
- 结合 RoleBinding + ServiceAccount,确保部门只能操作自己 Namespace 内的资源
为每个 Namespace 配置 ResourceQuota
ResourceQuota 作用于单个 Namespace,能限制 CPU、内存、Pod 数量、ConfigMap/Secret 总数等,但不控制单个 Pod 的资源请求——那是 LimitRange 的职责。
- 定义示例(保存为 quota-finance.yaml):
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: finance
spec:
hard:
requests.cpu: "8"
requests.memory: 16Gi
limits.cpu: "12"
limits.memory: 24Gi
pods: "20"
configmaps: "30"
secrets: "50"- 应用后,该 Namespace 下所有对象的资源总和不能超过设定值;超出时,新 Pod 创建会失败并提示
exceeded quota - 建议从“requests”入手限制,避免因调度器无法分配资源导致服务不可用
搭配 LimitRange 实现更细粒度约束
ResourceQuota 管总量,LimitRange 管单个容器的默认值与上下限,二者互补才能防住“一个 Pod 吃光配额”的情况。
- 在 finance Namespace 中设置默认 limit/request,防止开发忘记写 resources:
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: finance
spec:
limits:
- default:
cpu: 500m
memory: 1Gi
defaultRequest:
cpu: 200m
memory: 512Mi
type: Container- 还可限制单个容器最大可申请资源(max),避免个别 Pod 过度索取
- 若已有工作负载未声明 resources,上线 LimitRange 后需同步补全,否则可能被拒绝调度
监控与告警不能只靠 kubectl describe
ResourceQuota 的使用率需持续可观测,否则等到 Pod 创建失败才发现问题就晚了。
- 用
kubectl get resourcequota -n finance -o wide查看当前使用量和配额比 - 将指标接入 Prometheus(通过 metrics-server 或 kube-state-metrics),采集
resourcequota_used和resourcequota_hard - 对 usage > 80% 的 Namespace 触发企业微信/钉钉告警,并附上 top 消耗 Pod 列表(
kubectl top pods -n finance)











