Kubernetes 对象详解:声明式管理的核心
📌 前言
Kubernetes 对象是 K8s 系统中的持久实体 ,也是理解 Kubernetes 声明式管理模式的关键入口。
本文将带你全面了解:
- ✅ 什么是 K8s 对象
- ✅ 对象的两个核心字段:Spec 与 Status
- ✅ 如何用 YAML 描述对象
- ✅ 必填字段与操作方式
一、什么是 Kubernetes 对象?
📖 定义
Kubernetes 对象是系统中的持久实体 ,本质是一个 "Record of Intent"(意图记录)。
你告诉 K8s "我想要什么",K8s 负责让它变成现实。
📦 对象可以描述的内容
| 类别 | 具体内容 |
|---|---|
| 应用运行状态 | 哪些容器化应用在运行、在哪些节点上 |
| 资源 | 应用可用的 CPU、内存等资源 |
| 策略 | 重启策略、升级策略、容错策略 |
💡 核心承诺
一旦创建对象,Kubernetes 会持续确保对象的期望状态存在。
二、核心机制:Spec 与 Status
每个 Kubernetes 对象都包含两个关键嵌套字段:
| 字段 | 含义 | 由谁定义/更新 |
|---|---|---|
| Spec | 期望状态(Desired State) | 用户创建时定义 |
| Status | 实际状态(Actual State) | K8s 系统提供并持续更新 |
🔄 工作流程示例(Deployment)
假设你要运行一个应用,要求 3 个副本 :
用户创建 Deployment,在 spec 中定义:replicas: 3
↓
K8s 系统读取 spec,启动 3 个实例 → 更新 status 为 3
↓
如果某个实例失败(status 变为 2)
↓
系统检测到 spec 与 status 的差异
↓
系统自动启动一个新实例,使 status 重新匹配 spec
text
这就是 Kubernetes 声明式(Declarative) 工作机制的核心:你只管声明"要什么",系统负责"怎么达成"。
三、如何操作 Kubernetes 对象?
🔧 操作方式
| 方式 | 说明 |
|---|---|
| kubectl CLI | 命令行工具,底层调用 Kubernetes API |
| 直接调用 API | 可编程调用,官方提供 Golang 客户端库 |
💻 常用命令
bash
# 创建对象
kubectl create -f nginx-deployment.yaml --record
# 查看对象
kubectl get deployments
kubectl get pods
# 查看对象详情
kubectl describe deployment nginx-deployment
# 删除对象
kubectl delete -f nginx-deployment.yaml
四、YAML 文件示例
📄 nginx-deployment.yaml
yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
-
📋 字段解析
字段 值 说明
apiVersion apps/v1beta1 使用 apps 组的 v1beta1 版本
kind Deployment 对象类型为 Deployment
metadata.name nginx-deployment 对象名称
spec.replicas 3 期望 3 个副本
spec.template Pod 模板 定义要创建的 Pod 规格
containers.image nginx:1.7.9 使用 nginx 1.7.9 镜像
🚀 创建命令及输出
bash
$ kubectl create -f nginx-deployment.yaml --record
deployment "nginx-deployment" created
五、YAML 必填字段
每个 Kubernetes 对象的 YAML 文件必须包含以下字段:
字段 说明 示例
apiVersion 创建对象使用的 Kubernetes API 版本 apps/v1beta1
kind 对象的类型 Deployment、Pod、Service
metadata 唯一标识对象的数据 name: nginx-deployment
spec 对象的期望状态格式 replicas: 3
📌 注意事项
metadata 中 name 是必填,namespace 可选(默认 default)
每种对象类型的 spec 格式不同,需查阅 Kubernetes API Reference
六、总结
📊 核心概念回顾
概念 要点
对象是什么 持久实体,描述集群期望状态
本质 Record of Intent(意图记录)
Spec 期望状态(用户定义)
Status 实际状态(系统更新)
工作机制 声明式:系统持续使 Status 匹配 Spec
操作方式 YAML 文件 + kubectl(或直接调用 API)
必填字段 apiVersion、kind、metadata、spec
🎯 一句话记忆
Kubernetes 对象 = 用户用 YAML 声明 Spec(想要什么),K8s 系统持续维持 Status(实际是什么)与 Spec 一致。
七、速记口诀
text
对象是意图记录,Spec 想要 Status 报
YAML 必备四件套:apiVersion、kind、metadata、spec 不能少
kubectl create -f 创建,系统自动帮你调
八、下一步学习建议
📖 学习常用对象类型:Pod、Deployment、Service、ConfigMap、Secret
✍️ 实践编写 YAML 文件,用 kubectl apply -f 创建对象
🔍 熟悉 kubectl get、kubectl describe、kubectl edit 等命令
📚 查阅 Kubernetes API Reference 了解各对象的 spec 格式
📚 参考资料
Kubernetes 官方文档 - Understanding Kubernetes Objects
Kubernetes API Conventions