个人随笔
目录
Kubernetes核心基础:YAML声明式文件完全学习笔记
2026-06-27 18:23:37
在Kubernetes(K8s)集群管理中,YAML是核心的声明式配置文件格式,我们通过编写YAML资源清单文件,可精准定义Pod、命名空间、服务等各类集群资源,实现集群资源的自动化创建、管理与调度。本文全面梳理YAML基础语法、数据结构,以及K8s专属资源配置字段和实战案例,适合新手入门与日常查阅。

一、YAML核心介绍

YAML 全称 YAML Ain't Markup Language(仍是一种标记语言),是一种以数据为核心、高可读性、轻量化的数据序列化格式。
不同于XML、HTML等以标签嵌套为核心的标记语言,YAML专注于数据表达,语法简洁、结构清晰,非常适合用于配置文件编写,也是Kubernetes、Docker、SpringCloud等主流技术栈的标配配置格式。

二、YAML基础语法规则

YAML语法对缩进、格式有严格要求,核心规则如下,是编写正确配置文件的基础:
  • 缩进规则:低版本YAML严格禁止使用Tab键,仅支持空格缩进;相同层级的元素左侧对齐即可,缩进空格数量不固定(统一规范一般用2个空格)。
  • 注释规则:以 # 作为注释起始符号,从该符号到当前行末尾的所有内容,都会被解释器忽略,仅用于人工备注说明。
  • 大小写敏感:YAML严格区分大小写,键名、值的大小写不同会被判定为不同内容。
  • 空行无效:文件中的空白行会被自动忽略,不影响配置解析。

三、YAML支持的三大数据结构

YAML所有配置内容均由三种基础数据结构组成,可单独使用,也可组合形成复杂复合结构,完美适配K8s复杂的资源配置场景。

3.1 对象(键值对)

对象是键值对的集合,也称为映射(mapping)、哈希(hashes)、字典(dictionary),是YAML最常用的结构,格式为 key: value(冒号后必须跟一个空格)。
基础换行写法:
name: Steve
age: 18
行内简写写法(紧凑格式):
hash: { name: Steve, age: 18 }

3.2 数组(序列/列表)

数组是有序的值集合,也称为序列(sequence)、列表(list),多用于存储多个同类型配置项,K8s中容器列表、端口列表、环境变量列表均采用数组结构。
基础换行写法(连词线- 开头):
animal:
- Cat
- Dog
行内简写写法:
animal: [Cat, Dog]

3.3 纯量(基础值)

纯量是YAML中不可再拆分的基础值,是构成对象和数组的最小单元,支持字符串、数值、布尔、空值、时间、日期等多种类型。
常见纯量类型及写法示例:
# 浮点数/整数
number: 12.30

# 布尔值
isSet: true

# 空值
parent: ~

# ISO8601时间格式
iso8601: 2001-12-14t21:59:43.10-05:00

# ISO8601日期格式
date: 1976-07-31

# 强制数据类型转换(!!类型)
e: !!str 123    # 强制数字转为字符串
f: !!str true   # 强制布尔值转为字符串

3.4 重点:字符串详细规则

字符串是K8s配置中使用频率最高的纯量,YAML对字符串的写法灵活且有专属规则:
  • 默认无引号:普通字符串无需添加引号,直接书写即可。示例:str: 这是一行字符串
  • 特殊字符需加引号:字符串包含空格、冒号等特殊字符时,必须用单/双引号包裹。示例:str: '内容: 字符串'
  • 引号转义规则:单引号、双引号均可使用;双引号不会转义 \n 等特殊字符,单引号会原样输出;单引号嵌套需双写转义。示例:str: 'labor''s day'
  • 多行字符串:普通多行换行自动转为空格;| 保留原始换行符,> 折叠所有换行符。
多行字符串示例:
# 普通多行(换行转空格)
str: 这是一段
  多行
  字符串

# | 保留换行
this: |
Foo
Bar

# > 折叠换行
that: >
Foo
Bar

3.5 复合结构

实际K8s配置中,大多为对象+数组嵌套的复合结构,多层嵌套实现复杂资源定义,示例如下:
languages:
- Ruby 
- Perl 
- Python
websites:
  YAML: yaml.org 
  Ruby: ruby-lang.org 
  Python: python.org 
  Perl: use.perl.org

四、Kubernetes YAML资源清单核心详解

K8s通过YAML声明式文件定义各类集群资源,这类文件统称为资源清单文件。用户只需在YAML中定义「期望资源状态」,K8s控制器会自动比对集群实际状态,完成资源创建、更新和修复。

4.1 K8s YAML通用核心字段

所有K8s资源(Pod、Namespace、Deployment等)的YAML配置,均遵循统一字段规范,以下是生产、学习中高频核心字段详解:
参数名
字段类型
详细说明
apiVersion
String
K8S API版本,定义资源所属接口版本,常规资源默认 v1,可通过 kubectl api-versions 命令查询所有可用版本
kind
String
资源类型,定义当前YAML管理的资源角色,常用值:Pod、Namespace、Deployment、Service等
metadata
Object
资源元数据,固定字段,用于定义资源名称、命名空间、标签等基础信息
metadata.name
String
资源名称,自定义,集群内同类型资源名称唯一
metadata.namespace
String
资源所属命名空间,用于资源隔离,自定义命名空间名称
spec
Object
资源详细规格定义,核心字段,用于描述资源的运行参数、配置细节
spec.containers[]
List
Pod核心配置,容器列表,一个Pod可包含多个容器,为数组结构
spec.containers[].name
String
容器名称,自定义,当前Pod内容器名称唯一
spec.containers[].image
String
容器镜像名称,指定容器运行依赖的镜像(如nginx:latest、centos:7)
spec.containers[].imagePullPolicy
String
镜像拉取策略:1. Always:每次重启都拉取最新镜像(默认)2. Never:仅使用本地镜像,不拉取远程镜像3. IfNotPresent:本地有则用本地,无则拉取远程
spec.containers[].command[]
List
容器启动命令,数组格式可指定多个,不配置则使用镜像默认启动命令
spec.containers[].args
List
容器启动命令参数,配合command使用,支持多个参数配置
spec.containers[].workDir
String
容器内部工作目录,指定容器启动后的默认执行目录
spec.containers[].volumeMounts[]
List
容器存储卷挂载配置,用于数据持久化、目录挂载
spec.containers[].volumeMounts[].name
String
待挂载存储卷的名称,需与外部存储卷名称对应
spec.containers[].volumeMounts[].mountPath
String
容器内部挂载路径,指定存储卷在容器内的访问目录
spec.containers[].volumeMounts[].readOnly
String
挂载目录读写权限,true为只读,false为读写(默认)
spec.containers[].ports[]
String
容器端口配置列表,定义容器对外暴露的端口
spec.containers[].ports[].containerPort
String
容器内部监听端口,服务运行的端口
spec.containers[].ports[].hostPort
String
宿主机映射端口,将容器端口映射到主机,同主机端口唯一,不可重复
spec.containers[].ports[].protocol
String
端口协议,支持TCP、UDP,默认TCP
spec.containers[].env[]
List
容器环境变量列表,用于配置容器运行所需的环境参数
spec.containers[].env[].name
String
环境变量名称
spec.containers[].env[].value
String
环境变量对应值
spec.containers[].resources
Object
容器资源配额配置,用于限制CPU、内存资源使用,避免资源抢占
spec.containers[].resources.limits
Object
资源上限限制,容器运行时最大可占用的CPU、内存资源
spec.containers[].resources.limits.cpu
String
CPU最大限制,单位为core
spec.containers[].resources.limits.memory
String
内存最大限制,单位为MiB、GiB
spec.containers[].resources.requests
Object
资源初始请求,容器启动时需要分配的最小资源,用于集群调度
spec.containers[].resources.requests.cpu
String
CPU初始申请量
spec.containers[].resources.requests.memory
String
内存初始申请量
spec.restartPolicy
String
Pod重启策略:1. Always:无论异常与否,终止即重启(默认)2. OnFailure:仅非0退出码异常时重启3. Never:终止后永不重启
spec.nodeSelector
Object
节点选择器,通过标签筛选Pod调度的目标节点
spec.imagePullSecrets
Object
镜像拉取密钥,配置私有镜像仓库的认证密钥
spec.hostNetwork
Boolean
是否启用宿主机网络,默认false;true则共享宿主机网络,端口不可重复

4.2 实战YAML配置案例

通过两个入门级实战案例,快速掌握K8s YAML文件编写与使用规范。

案例1:YAML创建命名空间(Namespace)

命名空间用于集群资源隔离,适合多环境、多项目资源区分,最简配置如下:
apiVersion: v1
kind: Namespace
metadata:
  name: test  # 自定义命名空间名称
生效命令kubectl apply -f 文件名.yaml

案例2:YAML创建基础Pod

Pod是K8s最小资源调度单元,以下为Nginx镜像的基础Pod配置,包含镜像、拉取策略核心配置:
apiVersion: v1
kind: Pod
metadata:
  name: pod1  # 自定义Pod名称
spec:
  containers:
  - name: k8sonline1  # 容器名称
    image: nginx:latest  # 镜像名称
    imagePullPolicy: IfNotPresent  # 本地有镜像则优先使用
生效命令kubectl apply -f 文件名.yaml
查看Pod状态kubectl get pods

五、学习总结

1. YAML是K8s声明式配置的核心,核心掌握空格缩进、键值对、数组、纯量四大基础语法,规避语法报错;
2. K8s YAML配置遵循固定结构:apiVersion(版本)→ kind(资源类型)→ metadata(元数据)→ spec(资源规格)
3. 核心业务配置集中在spec字段,容器参数、资源配额、网络、存储、重启策略均在此定义;
4. 声明式配置的核心优势:一次编写、永久生效,K8s自动维持资源期望状态,适配集群自动化运维场景。
 4

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2