
目前k8s的使用范围越来越广,而接触和使用k8s就必须会编写YAML文件。k8s所有的配置文件以及资源的定义配置文件都是基于YAML格式的,所以熟悉并掌握YAML是必要的。先说说YAML常用的校验工具,然后再细说YAML的基本语法。
pip3 install pyyaml
python3 -c 'import yaml, sys; yaml.safe_load(sys.stdin)' < demo.yaml

cat yapi-deployment.yml | shyaml get-value metadata.namespace
kube-ops
# 更多使用帮助请参考github上的文档

使用 YAML 文件的优点:
---用于表示开始的符号,在一个文件中包含多个YAML设定的时候使用非常常见。…用于表示yaml文件结束apiVersion: v1 # #后面是注释的部分
Unicode 编码作为字符标准编码,可以使用UTF-8、UTF-16、UTF-32字符集date: 2020-07-26
info:
- name: "云原生生态圈"
tags:
- num: 1
- descript: "writing somthing here"

#进行标记,可以在单行的任何位置开始注释的内容不提供特殊的多行注释,使用多行行首的单行注释#实现多行注释的需求info:
# 下面是两个空格,然后一个短横线
- name: Marionxue
整型、浮点型、时间戳类型、Null等基本数据类型 integer: 12345 # 整数标准形式
octal: 0o34 # 八进制表示,第二个是字母 o
hex: 0xFF # 十六进制表示
float: 1.23e+3 # 浮点数
fixed: 13.67 # 固定小数
minmin: -.inf # 表示负无穷
notNumber: .NaN # 无效数字
null: # 空值
boolean: [true, false] # 布尔值
string: '12345' # 字符串
date: 2015-08-23 # 日期
datetime: 2015-08-23T02:02:00.1z # 日期时间
iso8601: 2015-08-23t21:59:43.10-05:00 # iso8601 日期格式
spaced: 2015-08-23 21:59:43.10 -5 # ?
键/值方式和列表类型,并可进行嵌套组合:进行分隔,也可使用{}结合逗号进行表达-进行分隔,也可使用[]结合逗号进行表达--- # start
- [dog, cat, docker] #list
- [apache, tomcat]
- site: {devopsman:www.devopsman.cn, kube: www.kubemaster.top} # key/value list
|表示保留区块中的回车换行>表示将区块中的回车换行替换为空行,最终连成一行- describle: |
Hi,all:
my name is xxx.
- code: > # 注意: 区块中的换行会替换成空格
fmt.Println("姓名: %s",
name)
!!用于强制类型转换---
account-limiter:
account-blacklist:
- 1
- 2
- 3
---
account-limiter:
account-blackset: !!set {1, 2, 3} # 强制转换为set
...
# 以下为内置的类型
!!int # 整数类型
!!float # 浮点类型
!!bool # 布尔类型
!!str # 字符串类型
!!binary # 也是字符串类型
!!timestamp # 日期时间类型
!!null # 空值
!!set # 集合
!!omap, !!pairs # 键值列表或对象列表
!!seq # 序列,也是列表
!!map # 键值表
# example
isString: !!str 2020-07-26 # 强调是字符串不是日期数据
picture: !!binary | # Base64 图片
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
---
tags:
- yaml
# Following node labeled SS
- &SS "yaml tool" # 定义要复制的数据
desc:
- *SS # 这里是数据复制目标
- pyyaml
☸️ k8sdev? default ~ ? ? cat demo.yaml
---
tags:
- yaml
# Following node labeled SS
- &SS "yaml tool" # 定义要复制的数据
desc:
- *SS # 这里是数据复制目标
- pyyaml
☸️ k8sdev? default ~ ? ? cat demo.yaml| shyaml get-value desc.0
yaml tool% ☸️ k8sdev? default ~ ? ? cat demo.yaml| shyaml get-value desc.1
pyyaml% ☸️ k8sdev? default ~ ? ? cat demo.yaml| shyaml get-value tags.1
yaml tool%
❝当数据能够容易的被读懂的时候,任何事情都会变得简单。 ❞
configuration fileslog filesinterprocess messagingcross-language data sharingobject persistencedebugging of complex data structuresXML 是许多领域的优先采用格式。XML 最初设计为与标准通用标记语言 (SGML) 向后兼容,后者旨在支持结构化文档。因此,XML 存在许多设计上的约束。JSON 的设计理念是简单性和通用性,并且易于生成和解析。JSON 格式的可读性低,但是这种格式的数据每一种现代编程环境都可以轻松处理。YAML 的设计目标是提升可读性,提供更加完善的信息模型。YAML 的生成和解析更加复杂,因此可以将其视为 JSON 的自然超集。每个 JSON 文件都是一个有效的 YAML 文件。在需要额外功能的情况下,可以轻松地从 JSON 迁移到 YAML。YAML 是从 XML 衍生而来。
[1
在线校验YAML格式: http://www.yamllint.com/
[2]
YH高亮显示YAML:https://github.com/andreazorzetto/yh
[3]
shyaml: https://github.com/0k/shyaml