首页/云/Kubernetes 速查/K8s YAML 清单结构要点
kubectl 基础56 条

K8s YAML 清单结构要点

一份清单的骨架:apiVersion/kind/metadata/spec 四段;理解缩进、字段层级与「声明期望状态」的语义,是写对 YAML 的基础。

Kubernetes 速查云更新于 2026-10-13

清单结构是什么

一份 Kubernetes 清单的骨架由四段组成:接口版本与资源类型说明「这是什么」,元数据段给出名称、命名空间与标签,定义段描述期望状态的细节。集群读到清单后做的事就是让现网向这份期望状态靠拢,而不是执行一串命令——这是声明式与命令式最根本的差别。

缩进与类型为什么关键

缩进层级决定字段挂在哪个对象下,同一层级必须一致,且只能用空格。更隐蔽的是类型推断:不加引号时某些词会被解析成布尔值,版本号、端口与开关类的值一旦被误判,对象可能创建成功但行为完全不对。

基本信息

适用格式YAML 与 JSON 均可,日常以 YAML 为主
必填段落接口版本、资源类型、元数据、定义
缩进规则使用空格,禁止制表符,同层缩进必须一致
命名空间多数资源可写,不写则落在当前上下文默认命名空间
标签元数据与模板中的标签需与选择器保持一致
状态段只读的运行时字段,写清单时不要出现

典型使用场景

  • 新建资源:按骨架写好清单后提交给集群
  • 改造模板:从现网对象导出后清理运行态字段作为模板
  • 排查创建失败:从缩进与字段层级入手,定位被拒或解析异常的原因
  • 多环境复用:同一份模板加差异化覆盖,避免手工改动生产清单
  • 代码评审:清单进版本库后可逐行评审字段变化
  • 学习字段位置:用解释命令确认某个参数应该写在哪一层

最小工作负载骨架

最小工作负载骨架
apiVersion: apps/v1          # 接口版本,非核心资源要带组名
kind: Deployment             # 资源类型
metadata:
  name: web
  namespace: prod
  labels:
    app: web
spec:
  replicas: 3
  selector:                  # 必须匹配下面模板的标签
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: registry.example.com/web:1.26.0
          ports:
            - containerPort: 8080

易错点速记

易错点速记
缩进用空格不用制表符,同层级必须对齐
版本号、端口、开关键必要时加引号,避免被当成布尔值
选择器与模板标签不一致时创建会被拒
不可变字段(如选择器)改动后只能删除重建
状态段是只读运行时数据,永远不要写进清单

四段含义

段落作用常见错误
接口版本与类型告诉集群这是哪一类对象的哪个版本核心资源误写组名,或版本号已废弃
元数据名称、命名空间、标签与注解标签与选择器不一致
定义期望状态的具体描述字段挂错层级或缩进错位
状态集群写入的运行时信息误把状态段写进提交的清单
接口版本写法随资源而异:核心资源通常是单纯的版本号,工作负载等属于某个接口组的资源要写成组名加版本号。
不确定字段位置时先查解释文档而不是猜:字段挂错层级往往不会报错,而是被当作未知字段忽略。

易错点

  • YAML 把未加引号的特定词解析为布尔值:版本号或端口被改写,对象能创建但行为与预期不符
  • 缩进错位:字段被挂到错误层级,提交时不报错但设置不生效,排查耗时很长
  • 选择器与模板标签不一致:工作负载创建被直接拒绝,或选中了无关的对象
  • 把状态段写进清单:提交时冲突或被忽略,还可能误以为配置已经生效

数据来源与参考

  • Kubernetes 官方文档 · Object Management / API Conventions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌