介绍

管理模块提供了集群级别的资源管控能力,帮助管理员维护集群的健康运行、资源分配和命名空间组织。该模块涵盖资源配额、节点管理、命名空间、自定义资源定义(CRD)以及应用项目(AppProject)等核心运维功能。

主要功能

功能 描述 入口
资源配额 (ResourceQuota) 限制命名空间的资源使用总量(CPU、内存、存储、对象数量等) ResourceQuota
资源范围 (LimitRange) 为命名空间设置容器资源请求/限制的默认值和约束范围 LimitRange
节点管理 (Nodes) 查看和管理集群节点状态、标签、污点、资源容量 Nodes
命名空间 (Namespaces) 创建和管理命名空间,实现多租户资源隔离 Namespaces
应用项目 (AppProjects) KDO 特有的项目模型,映射到命名空间并提供额外约束 AppProjects
自定义资源 (CRD) 查看和管理集群中安装的自定义资源定义 CustomResourceDefinitions

快速导航

常用任务


核心概念

资源配额 (ResourceQuota)

ResourceQuota 用于限制命名空间内的资源使用总量,防止某个项目占用过多集群资源。

支持的配额项:

  • 计算资源:requests.cpurequests.memorylimits.cpulimits.memory
  • 存储资源:requests.storage(所有 PVC 的总和)
  • 对象数量:podsservicesreplicationcontrollerssecretsconfigmaps
  • 扩展资源:requests.<ext>limits.<ext>

示例:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: development
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 8Gi
    limits.cpu: "8"
    limits.memory: 16Gi
    requests.storage: 50Gi
    pods: "20"
    services: "10"

节点管理 (Nodes)

管理员视角的节点管理包括:

  • 节点状态ReadyNotReadySchedulingDisabled
  • 资源容量:CPU、内存、GPU、可分配容量
  • 节点标签:用于Pod调度选择(nodeSelectornodeAffinity
  • 污点 (Taints):排斥不匹配的 Pod(如 dedicated=master:NoSchedule
  • 运行时信息:内核版本、Docker/Containerd 版本、操作系统

关键操作:

  • 查看节点详情(资源使用、标签、污点)
  • 排空节点(kubectl drain)用于维护
  • 删除/恢复节点(从集群移除或重新加入)

命名空间 (Namespaces)

命名空间提供逻辑隔离,是 Kubernetes 多租户的基础。

命名场景:

  • 按环境划分:devtestprod
  • 按团队划分:team-ateam-b
  • 按项目划分:project-xproject-y

资源隔离: 每个命名空间有独立的资源池,配合 ResourceQuota 限制用量。

操作:

  • 创建命名空间
  • 查看命名空间状态
  • 设置默认 ResourceQuota 和 LimitRange
  • 删除命名空间(自动清理所有资源)

应用项目 (AppProjects)

AppProject 是 KDO 特有的概念,用于管理一组相关的应用和环境。每个 AppProject 映射到一个或多个 Kubernetes 命名空间,并提供额外的约束:

  • 允许的集群角色:项目成员可以使用的角色(如 admineditview
  • 边缘项目设置:是否允许从外部镜像仓库拉取镜像
  • 命名空间创建策略:自动创建环境命名空间(dev/test/stage/prod)

典型配置:

apiVersion: kdo.project.io/v1alpha1
kind: AppProject
metadata:
  name: myproject
spec:
  allowedClusterRoles:
  - admin
  - edit
  - view
  edgeMembers:
  - user1
  - user2

最佳实践

资源管控

  • 📊 每项目必有 Quota:为每个 AppProject 或命名空间设置 ResourceQuota
  • 📊 设置 LimitRange:避免容器无限制申请资源
  • 📊 定期审核:检查资源使用率,调整配额以适应实际需求
  • 📊 预留缓冲:集群总容量预留 20% 应对突发流量

节点运维

  • 🔧 统一标签:为节点打上环境、区域、功能等标签,便于调度
  • 🔧 污点策略:关键节点(如 Master)设置污点避免应用调度
  • 🔧 监控:持续监控节点资源使用率,提前扩容
  • 🔧 定期维护:排空节点进行内核更新、安全补丁等操作

命名空间策略

  • 🏷️ 命名规范:使用小写字母、短横线分隔(如 team-frontend
  • 🏷️ 隔离原则:不同环境/团队使用独立命名空间
  • 🏷️ 生命周期:及时清理不再使用的命名空间
  • 🏷️ RBAC 绑定:在命名空间级别绑定 RoleBinding,精细化权限

常见问题

Q: ResourceQuota 不支持的资源类型?

ResourceQuota 支持的资源列表取决于 Kubernetes 版本和启用的 API 组。可以通过以下命令查看:

kubectl explain resourcequota --api-version=v1

如果某些资源无法设置配额,可能需要启用相应的 API 扩展(如自定义资源)。

Q: 节点 NotReady 如何处理?

  1. 确认节点网络是否正常
  2. 检查 kubelet 日志:journalctl -u kubelet -f
  3. 检查 Docker/Containerd 状态
  4. 如果节点故障,考虑从集群移除并替换新节点

Q: LimitRange 不生效?

  • 确认 LimitRange 在目标命名空间已创建
  • LimitRange 只对新创建的 Pod 生效,已有 Pod 不会自动调整
  • 检查请求值是否在范围之外(超出最小值或最大值会被拒绝)

Q: 如何自动为新项目创建配额?

可以使用 Kubernetes 的 LimitRangerResourceQuota 准入控制器,或者通过 KDO 的 AppProject 模板功能预先定义配额。


相关链接


Table of contents