YAML 在过去几年中广受欢迎,因为它成为了关键的 DevOps 工具、技术和流程的一部分,例如 Ansible、 Kubernetes、CI/CD 管道等。
我们已经介绍了很多关于 Ansible 和 Kubernetes 的教程。 我想介绍 YAML 的基本要素,以便您必须注意更顺畅地使用您的 DevOps 工具配置。
什么是 YAML?
YAML 代表“YAML Ain’t Markup Language”最初是“Yet Another Markup Language”的首字母缩写词。 YAML 是一种“数据序列化”语言,基本上是一种人类可读的结构化数据格式。
它被设计为可读可写。 YAML 的对象序列化特性将其自身呈现为一种可行的替代方案 JSON. YAML 是 JSON 的超集,它使用基于缩进的范围来表示类似 Python 的结构。
这是一个示例 YAML example:
---
Student-ID: 314159
First-Name: Linus
Last-Name: Torvalds
Phone-numbers:
- 281.555.7777
- 832.676.8888
- 937.996.9999
Addresses:
- Street: 123 Main St.
- City: Houston
- State: Tx
---
你应该永远记住的 YAML 基本规则
如果您不想在解析 YAML 文件时看到重复的错误,则在处理 YAML 时必须始终牢记以下几点:
- YAML 中不允许使用制表符。 您应该使用空格进行缩进。
- 尽管只要子节点缩进大于父节点,空格的数量并不重要,但保持相同数量的空格是一个好习惯。
- YAML 的不同元素之间必须有空格(稍后解释)。
- YAML 区分大小写。
- YAML 文件应以扩展名结尾,例如
.yaml
或者.yml
. - YAML 允许 UTF-8、UTF-16 和 UTF-32 编码。
现在让我们了解 YAML 语法。
YAML 文件的元素:基本语法
YAML 文件用于描述数据。 在 YAML 文件中,内容都是关于 键值对的集合 其中值可以是从字符串到树的任何内容。
让我们通过一个 example. 这是一个 Kubernetes 服务清单文件。
kind: Service
metadata:
name: web-app-svc
spec:
type: NodePort
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort: 30012 #Node Port from the range - 30000-32767
selector:
app: web-app
它是一组键值对元素的自我解释: Name: Value
.
从上面的文件可以看出,一个 YAML 文件由许多不同的元素构成。 它们一起可以用来描述各种各样的结构。
1. 空格或缩进
在 YAML 中,您使用空格而不是制表符缩进。 元素之间必须有空格。
正确规格:
Kind: Service
不正确的规格:
Kind:Service
因为上面的语句冒号后面没有空格!
2. YAML 中的注释
可以通过在项目前面放置一个哈希来定义评论 ‘#
‘。 注释可以在行首或行中的任何位置进行。
如果您浏览我们的 YAML 配置文件,我们会看到三个内联注释,例如“#service port”等。
3.标量(键值)
标量是组成页面数据的字符串和数字。 简单来说,它们是键值对。
kind: Service
metadata:
name: web-app-svc
4. 收藏和列表
列表和集合元素或成员是以相同缩进级别开始的行,以破折号开头,后跟一个空格。
- web-app-prod
- prod-deployments
- prom-monitored
它是一个基本列表,列表中的每个项目都放置在自己的行中,并带有一个开头的破折号。
5. 嵌套集合
如果要创建包含项和子项的嵌套序列,可以通过在子项中的每个破折号前放置一个空格来实现。
-
- web-app-prod
- prod-deployments
- prom-monitored
-
- web-app-test
- staging-deployments
- not-monitored
6. 字典
字典包括一个 key: value
内容缩进的格式。
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort: 30012 #Node Port from the range - 30000-32767
您可以像这样合并和混合列表和字典的集合:
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort:
- 30012
- 30013
- 30014
这些是 YAML 的非常基本的概念,但对于 DevOps 工程师来说是必不可少的。
YAML 不需要特殊的编辑器。 您最喜欢的文本编辑器应该已经支持 YAML 或在需要时使用插件。
有很多东西可以深入挖掘和学习。 为此,您可以随时参考 YAML 的官方文档.
想成为更好的系统管理员或 DevOps? 立即成为 Linux 手册会员。