跳转至

Kubernetes 其他资源详解:Namespace、Label、HPA、PDB、ResourceQuota 一文讲透

文章摘要

除了 Pod、Deployment、Service、PV、Ingress 等常见资源外,Kubernetes 还提供了许多辅助资源对象。

这些资源虽然不像 Deployment 那样显眼,却广泛应用于资源管理、调度控制、自动扩缩容、服务高可用以及集群运维中。

本文将系统讲解 Kubernetes 中最常见的其他资源对象,帮助你建立完整的 Kubernetes 资源体系认知。


学习目标

阅读完本文后,你将掌握:

  • Namespace 的作用
  • Label 与 Annotation 区别
  • ResourceQuota 与 LimitRange
  • HPA 自动扩缩容
  • PDB 高可用保障
  • Event 与 Lease 的作用
  • Kubernetes 资源管理最佳实践

适用人群

本文适合:

  • Kubernetes 初学者
  • Linux 运维工程师
  • DevOps 工程师
  • 云原生学习者
  • Kubernetes 面试准备人员

为什么会有这么多辅助资源?

Kubernetes 并不仅仅负责运行容器。

它还需要解决:

资源隔离

资源配额

自动扩容

服务高可用

节点选举

事件记录

等问题。


因此 Kubernetes 提供了大量辅助资源。


Namespace

Namespace(命名空间)是 Kubernetes 中最常见的资源之一。


作用:

逻辑隔离资源

例如:

dev

test

prod

同一个资源名称:

nginx

可以同时存在于:

dev

和:

prod

中。


查看:

kubectl get ns

默认存在:

default
kube-system
kube-public
kube-node-lease

使用场景

常见环境隔离:

开发环境

测试环境

生产环境

团队隔离:

team-a

team-b

Label

Label(标签)是 Kubernetes 中最核心的元数据之一。


作用:

资源分类

例如:

labels:
  app: nginx
  env: prod
  team: devops

Label 最大用途:

资源选择

例如:

Service 通过 Label 找到 Pod:

Service


Selector


Pod

Annotation

Annotation(注解)也是元数据。


但与 Label 不同。


Label 用于:

筛选资源

Annotation 用于:

存储额外信息

例如:

annotations:
  description: nginx-web

或者:

annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /

Label 与 Annotation 对比

项目 Label Annotation
用途 分类筛选 附加信息
可查询
参与 Selector

ResourceQuota

ResourceQuota(资源配额)。


作用:

限制 Namespace 资源总量

例如:

限制:

CPU

Memory

Pod数量

避免:

单个团队耗尽资源

例如:

最多创建20个Pod

或者:

最多使用16CPU

查看:

kubectl get resourcequota

LimitRange

LimitRange 用于:

限制单个资源

例如:

每个 Pod:

CPU最大2核

内存最大4GB

与 ResourceQuota 的区别:

资源 作用
ResourceQuota 限制总量
LimitRange 限制单个对象

HPA

HPA 全称:

Horizontal Pod Autoscaler

中文:

水平自动扩缩容

作用:

自动增加或减少 Pod 数量

例如:

CPU > 80%

自动扩容:

3 Pods


6 Pods

负载下降:

6 Pods


3 Pods

查看:

kubectl get hpa

VPA

VPA 全称:

Vertical Pod Autoscaler

作用:

自动调整CPU和内存

例如:

CPU 500m


CPU 1000m

注意:

生产环境使用相对较少。


PDB

PDB 全称:

Pod Disruption Budget

中文:

Pod 中断预算

作用:

保证业务高可用

例如:

Deployment:

10 个副本

升级节点时:

至少保留8个副本

运行。


避免:

全部Pod同时中断

查看:

kubectl get pdb

Event

Event(事件)。


作用:

记录资源运行过程

例如:

Pod创建

镜像拉取

调度失败

容器重启

查看:

kubectl get events

故障排查时非常重要。


Lease

Lease 是 Kubernetes 较新的资源。


主要用于:

节点心跳

例如:

Node01


定期更新Lease

如果超时:

Node NotReady

控制平面组件也会使用 Lease。


例如:

Scheduler

Controller Manager

高可用选举。


常见资源关系图

资源管理:

Namespace


ResourceQuota


LimitRange

自动扩缩容:

Deployment


HPA

高可用:

Deployment


PDB

元数据:

Resource


Label

Annotation

生产环境最佳实践

所有业务使用 Namespace

避免全部放在 default。


使用统一 Label 规范

例如:

app:
env:
version:
team:

配置 ResourceQuota

防止资源抢占。


配置 LimitRange

防止超规格申请。


为关键业务配置 PDB

保证升级过程可用性。


使用 HPA

提升资源利用率。


常见故障排查

查看 Namespace:

kubectl get ns

查看 Label:

kubectl get pod --show-labels

查看 HPA:

kubectl get hpa

查看 PDB:

kubectl get pdb

查看 Event:

kubectl get events

查看 Lease:

kubectl get lease -A

面试常见问题

Namespace 的作用是什么?

资源逻辑隔离。


Label 和 Annotation 的区别?

Label 用于筛选,Annotation 用于描述。


ResourceQuota 和 LimitRange 的区别?

一个限制总量,一个限制单个对象。


HPA 的作用是什么?

自动扩缩容。


PDB 的作用是什么?

保证业务高可用。


Event 有什么作用?

记录资源运行事件。


FAQ

Namespace 是否提供真正安全隔离?

不是。

主要是逻辑隔离。


HPA 根据什么扩容?

通常根据:

CPU

Memory

自定义指标

Event 会永久保存吗?

不会。

会定期清理。


总结

除了核心资源外,Kubernetes 还提供了大量辅助资源用于资源管理、自动扩缩容、高可用和运维管理。

其中:

  • Namespace 实现资源隔离
  • Label 与 Annotation 提供元数据管理
  • ResourceQuota 与 LimitRange 控制资源使用
  • HPA 实现自动扩缩容
  • PDB 保障业务高可用
  • Event 提供故障排查依据
  • Lease 实现节点心跳与选举

可以记住一句话:

Kubernetes 不仅管理容器,还通过大量辅助资源管理整个集群的生命周期。


相关阅读

Kubernetes 架构原理

  • Kubernetes API Server 工作原理
  • Kubernetes Scheduler 工作原理
  • Kubernetes Controller Manager 工作原理
  • Kubernetes Kubelet 工作原理
  • Kubernetes ETCD 工作原理

Kubernetes 资源体系

  • Kubernetes API 资源详解
  • Kubernetes 工作负载资源详解
  • Kubernetes 存储资源详解
  • Kubernetes 网络资源详解
  • Kubernetes 安全资源详解

Kubernetes 实战教程

  • Kubernetes HPA 自动扩缩容实战(待更新)
  • Kubernetes ResourceQuota 配置指南(待更新)
  • Kubernetes PDB 使用指南(待更新)
  • Kubernetes Label 与 Selector 实战(待更新)