每个 DevOps 工程师都必须知道的 YAML 基础知识

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 手册会员。