编辑推荐: |
在本教程中,您将了解 YAML 的结构以及如何编写 YAML 文件的基础知识
,希望对您的学习有所帮助。
本文来自于IBM,由Alice编辑、推荐。 |
|
如果您从事软件开发已经有一段时间了,尤其是使用 Kubernetes 或容器,您可能会遇到 YAML 文件。 YAML — 或“另一种标记语言” — 是一种用于指定与配置相关的数据的文本格式。 在本教程中,您将了解 YAML 的结构以及如何编写 YAML 文件的基础知识。 您将探索 Kubernetes 中使用的示例 YAML 文件。
目标
在本教程中,您将学习:
- YAML 文件的定义
- 为什么开发人员使用 YAML
- YAML与JSON和XML的关系
- YAML 文件的基本结构
- 如何在 Kubernetes 中使用 YAML 文件
先决条件
本教程假设您已经了解用于存储和传输数据的语言的基础知识,例如 XML 和 JSON。
YAML 文件的定义
在继续之前,您需要了解 YAML 的定义。 根据 yaml.org 的说法,“YAML 是一种人性化的、适用于所有编程语言的数据序列化标准。”
YAML 是专门为常见用例创建的,例如:
- 配置文件
- 日志文件
- 进程间消息传递
- 跨语言数据共享
- 对象持久化
- 复杂的数据结构
为什么你应该使用 YAML
使用 YAML 文件有几个优点:
1.它们很容易被人类阅读。 YAML 文件具有表现力和可扩展性。
2.它们易于实施和使用。
3.它们很容易在编程语言之间移植。
4.它们与敏捷语言的原生数据结构相匹配。
5.YAML 文件具有一致的模型来支持通用工具。
6.它们支持一次性处理。
7.它们使用方便,因此您不再需要将所有参数添加到命令行。
8.您可以进行维护。 可以将 YAML 文件添加到源代码管理以跟踪更改。
9.他们很灵活。 您可以使用 YAML 创建比在命令行上使用的复杂得多的结构
与 JSON 和 XML 的关系
XML 是许多领域的先驱。 XML 最初被设计为与标准通用标记语言 (SGML) 向后兼容,SGML 旨在支持结构化文档。 因此,XML 存在许多设计约束。
JSON 的设计目标是简单性和通用性,其目标是生成和解析。 它降低了人类的可读性,但每个现代编程环境都可以轻松处理其数据。
YAML 的设计目标是人类可读性和更完整的信息模型。 YAML 的生成和解析更加复杂,因此可以将其视为 JSON 的自然超集。 每个 JSON 文件也是一个有效的 YAML 文件。
综上所述,如果/当需要附加功能时,它可以很容易地从 JSON 迁移到 YAML。 YAML 是从 XML 中吸取教训的结果。
YAML 文件的结构
以下是 YAML 文件的构建块:
1.键值对——YAML 文件中的基本条目类型是键值对。 在键和冒号之后有一个空格,然后是值。
2.数组/列表 - 列表将在列表名称下列出许多项目。 列表的元素将以 - . 可以有一个 n 列表,但是数组中各种元素的缩进很重要。
3.Dictionary/Map——更复杂的 YAML 文件类型是 Dictionary 和 Map。
编写 YAML 文件时的一般准则
编写 YAML 文件时请记住以下准则。
缩进和制表符的重要性
考虑下图,其中包含有关“香蕉”的详细信息。 有3个属性:
1.卡路里 = 200
2.脂肪 = 0.5g
3.碳水化合物 = 30 克
假设使用了额外的缩进或制表符——那么 YAML 对象的整个含义就会改变,如下所示。 因此,当涉及到您的 YAML 文件时,我们需要小心缩进和制表符。
YAML 基础的重要方面
创建 YAML 文件时需要关注的其他方面包括:
- SCALAR - 您可以 date 以“YYYY-MM-DD”的格式提及并将其分配给 date 变量。
- COLLECTIONS — 假设您提到了帐单地址,并且送货地址与帐单地址相同。 然后,您在帐单地址前面使用 & 后跟一个 ID。 如果您需要根据送货地址复制相同的地址,则使用该 * 符号以及帐单地址中使用的相同 ID。 这有助于数据的冗余。
- 多行集合——假设你有一个地址行,它有多行并且需要保持格式。 然后使用 | (竖线)符号。
- LISTS/DICTIONARIES — 上一节介绍了列表和字典。
- 多行格式 - 假设您有一个长字符串值并且需要在多行中提及维护格式,然后您使用 > 前面提到的符号。
Kubernetes 中的 YAML 使用
了解了 YAML 文件的优势和基本构建块之后,让我们了解 YAML 在 Kubernetes 中的使用方式。 Kubernetes 资源以声明方式创建,因此使用 YAML 文件。 Kubernetes 资源(例如 pod、服务和部署)是使用 YAML 文件创建的。
以下示例帮助解释使用 YAML 创建部署资源。 注意: 此示例包含基本规范和高级规范。
以下是各个领域的简要说明:
- replicas — 告诉 Kubernetes 在部署期间要创建多少个 pod。 修改此字段是扩展容器化应用程序的一种简单方法。
- spec.strategy.type — 假设有另一个版本的应用程序需要部署,并且在部署阶段,您需要在不导致中断的情况下进行更新。 滚动更新策略 允许 Kubernetes 通过一次更新一个 pod 来更新服务,而不会导致中断 。
- spec.strategy.rollingUpdate.maxUnavailable — 滚动更新期间不可用的最大 pod 数。
- spec.strategy.rollingUpdate.maxSurge — 可以调度的最大 pod 数高于所需的 pod 数。
- spec.minReadySeconds — 一个可选的整数,描述最小秒数,新的 pod 应该准备好,没有任何容器崩溃才能被认为是可用的。
- spec.revisionHistoryLimit — 一个可选的整数属性,可用于明确告诉 Kuberneres 在任何给定时间保留多少旧 ReplicaSet。
- spec.template.metadata.labels — 为部署规范添加标签。
- spec.selector — 一个可选对象,告诉 Kubernetes 部署控制器仅针对与指定标签匹配的 pod。 因此,要仅针对具有“app”和“deployer”标签的 pod,您可以对我们的部署 YAML 进行以下修改。
从各个字段的解释中可以看出,YAML 文件确实可以以声明式的方式帮助你维护和控制 Kubernetes 资源。
YAML 正在被视为配置文件的事实上的标准。
|