Jump to section

什么是 YAML?

复制 URL

YAML 是一种数据序列化语言,通常用于编写配置文件。业界对 YAML 有不同的看法,有人会说 YAML 不过代表了另一种标记语言,另外一些人认为"YAML ain’t markup language"("YAML 不是标记语言"),"YAML" 正是这句话的递归缩写,强调了 YAML 是用于数据而不是文档。 

YAML 是一种流行的编程语言,因为它是人类可读的语言,易于理解。它还可以与其他编程语言结合使用。鉴于 YAML 的灵活性和可访问性,Ansible 自动化工具使用它以 Ansible Playbook 的形式创建自动化流程。

YAML 拥有 Perl、C、XML、HTML 和其他编程语言的特性。YAML 也是 JSON 的超集,所以 JSON 文件在 YAML 中有效。

YAML 使用 Python 风格的缩进来表示嵌套。它不能使用 Tab(制表符),因而使用空格来代替。没有通常的格式符号,如大括号、方括号、结束标记或引号。YAML 文件使用 .yml 或. yaml 扩展名。 

YAML 文件的结构是映射或列表。

它以映射来关联键值对。每个键必须是唯一的,而且顺序并不重要。这跟 Python 字典或 Bash 脚本中的变量赋值相似。

YAML 中的映射必须经过解析后才能关闭,然后创建新的映射。新的映射可以通过增加缩进级别或解析之前的映射并新建一个相邻映射来创建。 

列表包括以特定顺序列出的值,可以包含任何数量的所需项目。一个列表序列以破折号(-)和空格开始,而缩进则将其与父级分开。我们可以把序列看作是一个 Python 列表或者 Bash 或 Perl 中的数组。一个列表可以嵌入到一个映射中。 

YAML 还包含标量,它是以 Unicode 编码的任意数据,可以用作字符串、整数、日期、数字或布尔等值。

在创建 YAML 文件时,需要确保遵循这些语法规则,而且文件必须有效。linter 是验证文件语法的应用。在将 YAML 文件交给应用之前,使用 yamllint 命令可以确保已经创建了一个有效的 YAML 文件。

下面是一个关于员工记录的简单 YAML 文件示例,它演示了语法规则。

 --- # An employee record name: Martin D'vloper job: Developer skill: Elite employed: True foods: - Apple - Orange - Strawberry - Mango languages: perl: Elite python: Elite pascal: Lame education: | 4 GCSEs 3 A-Levels BSc in the Internet of Things 

YAML 最常见的用途之一是创建配置文件。相比 JSON,因为 YAML 有更好的可读性,对用户更友好,所以通常建议用 YAML 来编写配置文件,尽管它们在大多数情况下可以互换使用。  

除了在 Ansible 中使用之外,YAML 还用于 Kubernetes 资源和部署。 

使用 YAML 的一大好处是,YAML 文件可以添加到源代码控制中,比如 Github,这样就可以跟踪和审计变更。 

Ansible 中的 YAML

Ansible Playbook 主要用来编排 IT 流程。Playbook 是一个 YAML 文件,其中包含 1 个或多个 play,用于定义系统的所需状态。 

每个 play 可以运行一个或多个任务,每个任务调用一个 Ansible 模块。这些模块用来完成 Ansible 中的自动化任务。Ansible 模块可用任何能返回 JSON 的语言编写,如 Ruby、Python 或 bash。

Ansible Playbook 由映射和列表组成。要创建一个 playbook,首先要创建一个 YAML 列表,命名 play,然后按顺序列出任务。记住,缩进并不是逻辑继承的标志。要把每一行看作是一种 YAML 数据类型(列表或映射)。

通过使用 YAML 模板,Ansible 用户可以对重复性任务进行编程,使其自动完成,而不需要学习高级编程语言。

用于 Kubernetes 的 YAML

Kubernetes 基于定义的预期状态和实际状态工作。Kubernetes 对象代表集群的状态,并会告知 Kubernetes 您希望工作负载进入何种状态。Kubernetes 资源(如 Pod、对象和部署)可以使用 YAML 文件来创建。 

当创建一个 Kubernetes 对象时,需要包括规范以定义对象的预期状态。Kubernetes API 可用来创建对象。对 API 的请求包括 JSON 格式的对象规范,但大多数情况下会以 YAML 文件的形式向 kubectl 提供所需信息。Kubectl 在发出 API 请求时将该文件转换成 YAML。

在创建并定义了对象后,Kubernetes 会确保该对象始终存在。 

开发人员或系统管理员利用提交到 Kubernetes API 的 YAML 或 JSON 文件来指定预期状态。Kubernetes 使用控制器来分析新预期状态和集群实际状态之间的差别。

红帽 Ansible 自动化平台支持人类可读 YAML 自动化语言,使整个企业的用户能够共享、审查和管理自动化内容。

Ansible 自动化平台包括实施企业级自动化所需的所有工具,包括 playbook 和分析。它允许用户通过可视化控制面板、基于职能角色的访问控制等功能来集中管理和控制自己的 IT 基础架构,从而降低运维的复杂性。

红帽 OpenShift 是用于企业的 Kubernetes。它汇集了所有相关的先进技术,旨在将 Kubernetes 打造成为可供企业使用的强大平台,这些技术包括:镜像仓库、联网、遥测、安全防护、自动化和服务。

借助红帽 OpenShift 的可扩展性以及控制和编排功能,开发人员可以构建新的容器化应用、对其进行托管并在云端加以部署,从而轻松快速地将各种奇思妙想转变为新业务。

扩展阅读

文章

什么是 Ansible Playbook?

Ansible playbook 是设定自动化任务的一种蓝图,可在无需人工干预或有限干预的前提下执行复杂的 IT 操作。Ansible playbook 对一组或一类共同构成 Ansible 清单的主机执行。

文章

Kubernetes 基础知识入门

Kubernetes 是一个开源的容器编排平台,它可以将部署、管理和扩展容器化应用程序的许多手动过程自动化。Kubernetes 可以帮助开发人员大规模地交付和管理容器化的传统和云原生的应用程序。

文章

什么是配置管理?

配置管理是指将计算机系统、服务器和软件维持在理想、一致状态的过程。通过这种方式,可以确保系统随时间变化而正常运行。 

用于自动化和应用部署的平台

Red Hat Ansible Automation Platform

构建大规模 IT 自动化系统的平台。通过可视化控制面板、基于职能角色的访问控制等功能,集中并控制您的 IT 基础架构。

Red Hat OpenShift

企业就绪型 Kubernetes 容器平台,可实现全栈自动化运维,从而轻松管理混合云、多云和边缘部署。 

Illustration - mail

获取更多类似的内容

免费订阅我们的 Red Hat Shares 通讯邮件