目前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 files
log files
interprocess messaging
cross-language data sharing
object persistence
debugging of complex data structures
XML
是许多领域的优先采用格式。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