Kubernetes 对象详解:声明式管理的核心

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

相关推荐
A-刘晨阳18 小时前
K8s之负载均衡
linux·运维·容器·kubernetes·负载均衡
米高梅狮子19 小时前
11.Quota and Limits、健康检查和认证与授权
云原生·容器·架构·kubernetes·自动化
米高梅狮子1 天前
13.ETCD 存储系统、生产环境 Kubernetes 集群部署和Kubernetes 集群升级
数据库·云原生·容器·架构·kubernetes·自动化·etcd
梵得儿SHI2 天前
(第三篇)Spring AI 架构设计与优化:容器化与云原生部署,基于 K8s 的 AI 应用全生命周期管理
java·ci/cd·docker·云原生·kubernetes·容器化·spring ai
m0_737539372 天前
基于LNMP的综合实验
容器·kubernetes
胡小禾4 天前
K8S常识-如何指定只更新一个deployment中的某一个实例
云原生·容器·kubernetes
红球yyds4 天前
Kubernetes 简介及部署方法
云原生·容器·kubernetes
.柒宇.4 天前
AI掘金头条项目-K8s部署实战教程
python·云原生·容器·kubernetes·fastapi
PH = 75 天前
K8S集群的搭建
云原生·容器·kubernetes
ErizJ5 天前
Kubernetes|学习笔记
笔记·学习·kubernetes