Kubernetes YAML 编写技巧和坑

快猫运营团队 2025-07-08 11:21:48

Kubernetes 资源定义重度依赖 YAML 文件,本文会讲解一些 YAML 编写的技巧和坑!

  • 原文地址:https://itnext.io/kubernetes-yaml-tips-and-tricks-904a2c0b2b81

不要用 Tab

缩进,对 YAML 很重要,不要用 Tab 来缩进,用两个空格、四个空格都是 OK 的。

YAML 官方在 FAQ 中说明过为啥不要用缩进:

由于不同的编辑器和工具对制表符(Tabs)的处理方式不同,制表符已被禁用。而且由于缩进对于正确解读YAML至关重要,这个问题极其棘手,甚至都不值得尝试。实际上,Python的吉多·范罗苏姆(Guido van Rossum)已经承认,在Python源代码中允许使用制表符给许多人带来了麻烦,如果他重新设计Python,他会禁止使用制表符。

YAML 中最重要的结构是 Map 和 List,Map 是一堆键值对,而且可以嵌套,对应 JSON 的话示例如下:

另一个重要结构是列表,列表的每一项前面有个短横线:

任何列表或映射的值都可以是字符串、数字、布尔值、null 或其他 Map 或 List。

在大多数情况下,字符串不需要引号。但有时,如果你错过了他们……💣💥

挪威问题

认情况下,单词 “yes” 和 “no” 将转换为布尔值。

注意哦,不止是 false 会当做 bool 值,nooff 都会被转换为 bool 值。这可能会跟你的原始期望不符,小心哦!(加上双引号可以解决)

数字转换

有些版本号,你原本是当做字符串的,如果没有加双引号,也可能会有问题,比如:

还有日期,可能会被自动转换为时间戳,比如:

键关键字

虽然 JSON 中的键始终是字符串,但在 YAML 中,它们可以是任何值,包括布尔值。

on 作为键是一个糟糕的主意。

其他有用的功能

1、您可以使用 --- 分隔文档

2、引用机制,避免重复编写内容

上例中,matchLabels 是一个 Map,里边有一个 run 的字段,matchLabels 右侧加了一个 &pod-label,之后就可以在其他地方使用 *pod-label 引用。

当然,也可以引用一大段,比如:

user: &user
  name: John
  address:
    street: 123 Main St
    city: Anytown

admin:
  <<: *user
  role: admin

调试工具

  1. http://www.yamllint.com/ 这样的在线 YAML linter
  2. https://yamllint.readthedocs.io/en/stable/ 这样的 CLI
  3. 如果您使用 Visual Studio Code,请从 Red Hat 安装 YAML 扩展以实现自动完成 https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml

另外,在用 JSON 时经常会用到一个工具叫 jq,在 YAML 中也可以使用 yq 工具,比如上面的 YAML 文件可以使用 yq 转换为 JSON 做测试:

ulric@192 trash % cat a.yaml
user: &user
  name: John
  address:
    street: 123 Main St
    city: Anytown

admin:
  <<: *user
  role: admin%
ulric@192 trash % yq --tojson a.yaml
Flag --tojson has been deprecated, please use -o=json instead
{
  "user": {
    "name": "John",
    "address": {
      "street": "123 Main St",
      "city": "Anytown"
    }
  },
  "admin": {
    "name": "John",
    "address": {
      "street": "123 Main St",
      "city": "Anytown"
    },
    "role": "admin"
  }
}

其他 yq 的用法这里就不赘述了。下次见!

在监控领域创业四年了,如果您想索要监控/可观测性白皮书资料或申请产品演示,都可联系我们(免费哒)👇

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat