日常工作中,我们经常会遇到 YAML,例如 docker-compose 配置,ELK 中的 filebeat 配置, K8S 集群配置,ansible 的 playbook 等,也有越来越多的项目使用了 YAML 作为配置文件的选型。那今天,我们就来了解下它到底是何许人也。
YAML 官网:https://yaml.org/
YAML (YAML: YAML Ain’t Markup Language) 是一种类似 XML,JSON 的数据序列化语言,是一种通用的数据串行化格式。它是主要用来写配置文件的语言,比 XML 要简洁和简单,便于人阅读理解,号称 一种人性化的数据格式语言
。
正如其官网介绍,What It Is: YAML is a human friendly data serialization standard for all programming languages.
YAML 配置文件的后缀为 .yml,如 docker-compose.yml。
基本语法
#
表示注释 最基本的一个文件结构如下,demo.yml1
2apiVersion: v1
kind: Pod
若是要在一个文件中进行多个文档配置,则多个文档之间需要使用“—”(三个横线) 作为分隔符。例如 demo2.yml
1 | --- |
YAML 支持的基础数据结构有三种。
Maps 键值对使用冒号结构表示,key: value,冒号后面需要加一个空格。
也可以使用 key:{key1: value1, key2: value2, key3: value3} 来表示(一般不常用)。
1 | apiVersion: v1 |
上面的例子中,表示有两个键:apiVersion
和 kind
,它们对应的值分别是 v1
和 Pod
。上面的 YAML 文件转换成 JSON 格式如下:1
2
3
4{
"apiVersion": "v1",
"kind": "pod"
}
下面来看一些复杂的情况:
1 |
|
该配置文件中,metadata
这个 key 对应的 value 就是一个 Maps,并且下一层的 labels
对应的 value 又是一个 Maps,实际使用中,可能会有多层的嵌套。
上面的 YAML 文件转换成 JSON 文件如下:
1 | { |
前面提到了,在 YAML 文件中,一定不要使用 tab,层级中的缩进没有做具体规定,只要保持一致即可,我们所在的团队中使用两个空格。YAML 解析器根据缩进来处理内容之间的关联性。
一组连线 -
开头的行,构成一个数组。在 YAML 中我们可以这样定义:
1 | --- |
1 | [ |
1 | --- |
1 | [ |
1 | --- |