k8s之yml语法格式
YAML 语法格式
YAML 基础
- 它的基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略。
- 在我们的kubernetes中,你只需要两种结构类型就行了:
- Map对象:键值对的集合(map);
- Lists 数组:一组按次序排列的值(array);
- 纯量(scalars):单个的、不可再分的值;
也就是说,你可能会遇到Lists、Maps 等等。不过不用担心,你只要掌握了这两种结构也就可以了,其他更加复杂的我们暂不论
Maps 对象
方式一
首先我们来看看Maps,我们都知道Map是字典,就是一个 key:value 的键值对,Map可以让我们更加方便的去书写配置信息,例如
第一行的 - - - 是分隔符,是可选的,在单一文件中,可用连续三个连字号 - - - 区分多个文件
方式二
Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
hash: { name: Steve, foo: bar }
方式三:
较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
思即对象的属性是一个数组[complexkey1,complexkey2],对应的值也是一个数xe组[complexvalue1,complexvalue2]
List 数组
方式一
Lists就是列表,说白了就是数组,在YAML文件中我们可以这样定义:
当然,list的子项也可以是Maps,Maps的子项也可以是list如下所示
方式二
数组也可以采用行内表示法
animal: [Cat, Dog]
yaml纯量
纯量是最基本的、不可再分的值
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
示例
- 数值直接以字面量的形式表示
number: 12.50
- 布尔值用true和false表示
isSet: true
- null使用~表示
parent: ~
如果转换为JavaScript,代码如下:
{ parent: null }
- 时间采用ISO8601格式
iso8601: 2001-12-14t21:59:43.10-05:00
如果转换为JavaScript,代码如下:
{ iso8601: new Date('2001-12-14t21:59:43.10-05:00') }
- 日期采用复合 iso8601 格式的年、月、日表示
date: 1976-07-31
如果转换为JavaScript,代码如下:
{ date: new Date('1976-07-31') }
- YAML 允许使用两个感叹号,强制转换数据类型
e: !!str 123
f: !!str true
如果转换为JavaScript,代码如下:
{ e: '123', f: 'true' }
yaml字符串
- 字符串默认不使用引号表示;
str: 这是一行字符串
如果转换为JSON,代码如下:
{"str": "这是一行字符串"
}
如果字符串之中包含空格或特殊字符,需要放在引号之中
str: '内容:字符串'
如果转换为JSON,代码如下:
{"str": "内容:字符串"
}
单引号和双引号都可以使用,双引号不会对特殊字符转义
s1: '内容\n字符串'
s2: "内容\n字符串"
如果转换为JSON,代码如下:
{"s1": "内容\\n字符串","s2": "内容\n字符串"
}
单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'labor''s day'
如果转换为JSON,代码如下:
{"str": "labor's day"
}
字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
str: 这是一段
多行
字符串
如果转换为JavaScript,代码如下:
{ str: '这是一段 多行 字符串' }
多行字符串可以使用| 保留换行符,也可以使用> 折叠换行
this: |
Foo
Bar
that: >
Foo
Bar
转为 JavaScript 代码如下
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
- 表示保留文字块末尾的换行, - 表示删除字符串末尾的换行
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
转为 JavaScript 代码如下
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
字符串之中可以插入 HTML 标记
message: |
<p style="color: red">
段落
</p>
转为 JavaScript 代码如下
{ message: '\n<p style="color: red">\n 段落\n</p>\n' }
yaml引用
锚点& 和别名* ,可以用来引用。
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
等同于下面的代码
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
& 用来建立锚点( defaults ), << 表示合并到当前数据, * 用来引用锚点。
示例:
- &showell Steve
- Clark
- Brian
- Oren
- *showell
转为 JavaScript 代码如下
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]