通过本课件,你将掌握:
YAML 的本质:它不是编程语言,也不是标记语言;
YAML 的核心语法规则与书写规范;
YAML 与 JSON、XML 的关键区别与适用场景;
YAML 在 DevOps 和云原生生态中的典型应用;
使用 YAML 的最佳实践与安全注意事项。
在现代软件开发中,我们经常需要编写配置文件——无论是 Kubernetes 的部署清单、Docker Compose 的服务定义,还是 CI/CD 流水线脚本。这些文件需要既能让机器解析,又便于人类阅读和修改。
YAML(读作 /ˈjæməl/)正是为此而生。它的设计哲学是:“代码即文档”。
关键认知:YAML 不是用来写逻辑的,而是用来描述数据结构的。
YAML 是一种开源的、基于 Unicode 的数据序列化语言,专为人类可读性而设计。
YAML 的全称有两种解释,且都正确:
Yet Another Markup Language(又一种标记语言)— 最初命名
YAML Ain’t Markup Language(YAML 不是标记语言)— 现在的官方解释
这个递归缩写强调了一个事实:YAML 不用于标记文档(如 HTML),而是用于表示数据。
使用 空格(禁止使用 Tab)表示层级关系;
推荐每级缩进 2 个空格;
缩进错误会导致解析失败。
metadata:
name: nginx-deployment
labels:
app: nginx格式:key: value
冒号后必须有一个空格
✅ 正确:
name: Alice
age: 28❌ 错误:
name:Alice # 缺少空格每项以 - (短横线 + 空格)开头
hobbies:
- reading
- coding
- hikingYAML 支持多种标量写法:
多行字符串示例:
description: |
This is a multi-line
string in YAML.
Each line break is preserved.
summary: >
This is a folded
string. Line breaks
become spaces..yaml(推荐)
.yml(兼容旧习惯)
重要事实:任何合法的 JSON 文件都是合法的 YAML 文件。
使用 --- 分隔多个独立文档:
# 第一个文档
apiVersion: v1
kind: ConfigMap
---
# 第二个文档
apiVersion: apps/v1
kind: Deployment常用于 Kubernetes 的单文件多资源定义。
避免重复定义:
defaults: &defaults
image: nginx:1.25
ports: [80]
service-a:
<<: *defaults
name: web-a
service-b:
<<: *defaults
name: web-b在云原生时代,不会 YAML 几乎无法高效使用 Kubernetes。
但注意:YAML 解析器可能存在反序列化漏洞(如 Python 的
yaml.load()),生产环境应使用安全模式(如yaml.safe_load())。
始终使用空格,禁用 Tab;
统一缩进风格(推荐 2 空格);
字符串尽量不加引号,除非包含特殊字符;
复杂配置使用锚点避免重复;
敏感信息不要硬编码在 YAML 中(应使用 Secrets 或外部注入);
使用 YAML 校验工具(如 VS Code 插件、YAML Lint)。
为什么 YAML 禁止使用 Tab 缩进?这背后的设计哲学是什么?
在 Kubernetes 中,如果 YAML 文件缩进错误,会报什么类型的错误?如何快速定位?
YAML 的锚点功能能否跨文件引用?为什么?
📘 延伸阅读: