4、集群资源模型抽象:Namespace、Deployment、StatefulSet、DaemonSet、Service、Ingress、ConfigMap、Secret
在 Kubernetes 集群中,一切皆资源。平台门户集成 Operator 后,需要将这些底层资源抽象为统一的可视化模型,供运维大盘展示与操作。本章将逐一解析 8 类核心资源模型,并给出它们在运维大盘中的抽象映射方式。
4.1 资源模型总览
下表列出了 8 类资源的核心作用、生命周期特征以及在大盘中的展示形态:
| 资源类型 | 核心作用 | 生命周期 | 大盘展示形态 |
|---|---|---|---|
| Namespace | 逻辑隔离与资源配额边界 | 持久 | 项目/租户下拉选择器 |
| Deployment | 无状态应用声明式管理 | 滚动更新 | 副本数/版本/状态卡片 |
| StatefulSet | 有状态应用有序管理 | 有序更新 | Pod 序号/存储卷映射表 |
| DaemonSet | 每个节点运行一个 Pod | 节点驱动 | 节点覆盖率热力图 |
| Service | Pod 网络抽象与负载均衡 | 持久 | 端点列表/流量拓扑 |
| Ingress | 七层路由与域名接入 | 配置驱动 | 域名/路径/证书表格 |
| ConfigMap | 非敏感配置注入 | 挂载即生效 | 键值对编辑器 |
| Secret | 敏感数据加密存储 | Base64 编码 | 脱敏展示/权限审计 |
4.2 资源抽象关系图
下图展示了 8 类资源在集群中的逻辑分层与依赖关系:
4.3 核心资源详解
4.3.1 Namespace —— 逻辑隔离边界
Namespace 是集群资源隔离的基础单元。在大盘设计中,Namespace 通常作为第一级筛选条件,所有资源列表都基于当前选中的 Namespace 进行展示。
- 关键字段:name、status(Active/Terminating)、labels、resourceQuota
- 大盘映射:顶部下拉选择器 + 配额仪表盘
- Operator 集成点:自动创建/删除 Namespace 并绑定资源配额
4.3.2 Deployment —— 无状态应用管理
Deployment 是最常用的工作负载类型,支持声明式更新和回滚。大盘需要展示副本状态、更新策略和版本历史。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
readyReplicas 与 availableReplicas 的差值,当差值大于 0 时触发告警。
4.3.3 StatefulSet —— 有状态应用有序管理
StatefulSet 为每个 Pod 提供稳定的网络标识和持久存储。大盘需要展示 Pod 序号、当前状态以及 PVC 绑定关系。
- 核心特性:Pod 名称有序(如 web-0、web-1)、每个 Pod 独立 PVC
- 大盘展示:表格列出 Pod 序号、节点分布、存储卷状态
- Operator 集成点:扩缩容时保持顺序,大盘需展示当前操作进度
4.3.4 DaemonSet —— 节点级守护进程
DaemonSet 确保每个节点(或指定节点)运行一个 Pod 副本,常用于日志采集、监控代理等场景。
| 指标 | 含义 | 大盘展示 |
|---|---|---|
| desiredNumberScheduled | 期望运行的节点数 | 目标值 |
| currentNumberScheduled | 当前运行的节点数 | 实际值 |
| numberReady | 就绪的 Pod 数 | 健康值 |
| numberUnavailable | 不可用的 Pod 数 | 告警阈值 |
4.3.5 Service —— 网络抽象与负载均衡
Service 为一组 Pod 提供稳定的访问入口。大盘需要展示 Service 类型、ClusterIP、端点列表以及流量分布。
- 类型:ClusterIP、NodePort、LoadBalancer、ExternalName
- 大盘映射:拓扑连线图展示 Service 与后端 Pod 的映射关系
- Operator 集成点:自动创建 Service 并绑定端点,大盘实时刷新端点状态
4.3.6 Ingress —— 七层路由与域名接入
Ingress 提供 HTTP/HTTPS 路由能力,将外部请求转发到集群内部 Service。大盘需要展示域名、路径、后端 Service 以及 TLS 证书信息。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: default
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
4.3.7 ConfigMap —— 非敏感配置注入
ConfigMap 用于存储非敏感配置数据,以键值对形式存在,可被 Pod 以环境变量或卷挂载方式使用。
- 数据格式:data 字段存储明文键值对
- 大盘映射:提供键值对编辑视图,支持 YAML/JSON 格式切换
- Operator 集成点:配置变更后自动触发关联 Pod 滚动更新
4.3.8 Secret —— 敏感数据加密存储
Secret 用于存储密码、、证书等敏感信息,数据以 Base64 编码存储,在 etcd 中可启用加密。
| Secret 类型 | 用途 | 大盘展示策略 |
|---|---|---|
| Opaque | 通用键值对 | 仅显示键名,值脱敏 |
| kubernetes.io/tls | TLS 证书 | 显示证书有效期、颁发者 |
| kubernetes.io/dockerconfigjson | 镜像仓库认证 | 显示仓库地址,隐藏密码 |
4.4 资源抽象在运维大盘中的统一模型
平台门户集成 Operator 后,所有资源将被抽象为统一的 ResourceModel 结构,便于前端统一渲染和操作:
// ResourceModel 统一资源模型
{
"kind": "Deployment", // 资源类型
"name": "nginx-deploy", // 资源名称
"namespace": "default", // 所属命名空间
"status": "Ready", // 当前状态
"labels": {"app": "nginx"}, // 标签
"annotations": {}, // 注解
"spec": {}, // 资源规格(类型相关)
"metrics": { // 实时指标
"cpu": "120m",
"memory": "256Mi",
"replicas": 3
},
"events": [], // 关联事件
"ownerReferences": [] // 归属关系
}
4.5 资源抽象与 Operator 集成流程
下图展示了 Operator 如何将 CRD 资源映射为大盘可消费的统一模型:
4.6 最佳实践与避坑指南
- 大盘中所有资源列表默认按 Namespace 分组,支持全局搜索和标签过滤
- Deployment 和 StatefulSet 的更新历史保留最近 5 个版本,支持一键回滚
- ConfigMap 和 Secret 的变更应触发关联 Pod 的滚动更新,大盘展示更新进度
- Ingress 的 TLS 证书过期前 30 天在大盘发出预警
- 不要直接在大盘展示 Secret 的明文值,应使用脱敏显示或权限审计
- StatefulSet 缩容时注意数据安全,大盘应提示用户确认 PVC 保留策略
- DaemonSet 的节点选择器变更可能导致 Pod 漂移,大盘需展示变更影响范围
- Service 的
externalTrafficPolicy设置为 Local 时,需注意客户端 IP 保留问题
通过以上 8 类资源的抽象建模,平台门户可以构建出统一、可扩展的集群资源可视化与运维大盘,为后续的 Operator 集成和自动化运维奠定坚实基础。