Jochen

Code is Poetry

什么是 YAML

YAML 语言创建于2001年,比 XML 晚了三年。XML 你应该知道吧,它是一种类似 HTML 的标签式语言,有很多繁文缛节。而 YAML 虽然在名字上模仿了 XML,但实质上与XML完全不同,更适合人类阅读,计算机解析起来也很容易。

YAML 的官网(https://yaml.org/)有对语言规范的完整介绍,所以我就不在这里列举语言的细节了,只讲一些与 Kubernetes 相关的要点,帮助你快速掌握。

你需要知道,YAML 是 JSON 的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。也就是说,任何合法的 JSON 文档也都是 YAML 文档,如果你了解 JSON,那么学习 YAML 会容易很多。

但和 JSON 比起来,YAML 的语法更简单,形式也更清晰紧凑,比如:

  • 使用空白与缩进表示层次(有点类似 Python),可以不使用花括号和方括号。
  • 可以使用 # 书写注释,比起 JSON 是很大的改进。
  • 对象(字典)的格式与 JSON 基本相同,但 Key 不需要使用双引号。
  • 数组(列表)是使用 - 开头的清单形式(有点类似 MarkDown)。
  • 表示对象的 : 和表示数组的 - 后面都必须要有空格。
  • 可以使用 --- 在一个文件里分隔多个 YAML 对象。

下面我们来看几个 YAML 的简单示例。

首先是数组,它使用 - 列出了三种操作系统:

1
2
3
4
5
# YAML数组(列表)
OS:
- linux
- macOS
- Windows

这段 YAML 对应的 JSON 如下:

1
2
3
{
"OS": ["linux", "macOS", "Windows"]
}

对比可以看到 YAML 形式上很简单,没有闭合花括号、方括号的麻烦,每个元素后面也不需要逗号。

再来看一个 YAML 对象,声明了1个 Master 节点,3个 Worker 节点:

1
2
3
4
# YAML对象(字典)
Kubernetes:
master: 1
worker: 3

它等价的 JSON 如下:

1
2
3
4
5
6
{
"Kubernetes": {
"master": 1,
"worker": 3
}
}

注意到了吗 YAML 里的 Key 都不需要使用双引号,看起来更舒服。

把 YAML 的数组、对象组合起来,我们就可以描述出任意的 Kubernetes 资源对象,第三个例子略微复杂点,你可以自己尝试着解释一下:

1
2
3
4
5
6
7
8
9
# 复杂的例子,组合数组和对象
Kubernetes:
master:
- apiserver: running
- etcd: running
node:
- kubelet: running
- kube-proxy: down
- container-runtime: [docker, containerd, cri-o]

关于 YAML 语言的其他知识点我就不再一一细说了,都整理在了这张图里,你可以参考 YAML官网

Proudly powered by Hexo and Theme by Hacker
© 2024 Jochen