涨薪技术|Kubernetes(k8s)之yaml语法大全

01yaml介绍

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。YAML代表YAML Ain't Markup Language,是一种数据序列化语言。它实质上是一种通用的数据串行化格式,它的基本语法规则如下。

  • 大小写敏感;

  • 使用缩进表示层级关系;

  • 缩进时不允许使用Tab键,只允许使用空格;

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;

YAML 支持的数据结构有三种

  • 对象:键值对的集合(map);

  • 数组:一组按次序排列的值(array);

  • 纯量(scalars):单个的、不可再分的值;

02yaml 语法

表示注释,从这个字符一直到行尾,都会被解析器忽略;

... 和---配合使用,在一个配置文件中代表一个文件的结束;

复制代码
---time: 20:03:20player: Sammy Sosaaction: strike (miss)...---time: 20:03:47player: Sammy Sosaaction: grand slam...

相当于在一个yaml文件中连续写了两个yaml配置项。

03yaml对象

对象的一组键值对,使用冒号结构表示。

复制代码
animal: pets

如果转换为JavaScript,代码如下:

复制代码
{ animal: 'pets' }

Yaml 也允许另一种写法,将所有键值对写成一个行内对象。

复制代码
hash: { name: Steve, foo: bar }

如果转换为JavaScript,代码如下:

复制代码
{ hash: { name: 'Steve', foo: 'bar' } }

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:​​​​​​​

复制代码
?- complexkey1- complexkey2:- complexvalue1- complexvalue2

思即对象的属性是一个数组[complexkey1,complexkey2],对应的值也是一个数xe组[complexvalue1,complexvalue2]

04yaml数组

一组连词线开头的行,构成一个数组​​​​​​​

复制代码
- Cat- Dog- Goldfish

如果转换为JavaScript,代码如下:

复制代码
[ 'Cat', 'Dog', 'Goldfish' ]

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格​​​​​​​

复制代码
-- Cat- Dog- Goldfish

如果转换为JavaScript,代码如下:

复制代码
[ [ 'Cat', 'Dog', 'Goldfish' ] ]

数组也可以采用行内表示法

复制代码
animal: [Cat, Dog]

如果转换为JavaScript,代码如下:

复制代码
{ animal: [ 'Cat', 'Dog' ] }

05复合结构

对象和数组可以结合使用,形成复合结构​​​​​​​

复制代码
languages:- Ruby- Perl- Pythonwebsites:YAML: yaml.orgRuby: ruby-lang.orgPython: python.orgPerl: use.perl.org

如果转换为JavaScript,代码如下:​​​​​​​

复制代码
{ languages: [ 'Ruby', 'Perl', 'Python' ],websites:{YAML: 'yaml.org',Ruby: 'ruby-lang.org',Python: 'python.org',Perl: 'use.perl.org'}}

06yaml纯量

纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量。

  • 字符串

  • 布尔值

  • 整数

  • 浮点数

  • Null

  • 时间

  • 日期

数值直接以字面量的形式表示

复制代码
number: 12.50

如果转换为JavaScript,代码如下:

复制代码
{ number: 12.50 }

布尔值用true和false表示

复制代码
isSet: true

如果转换为JavaScript,代码如下:

复制代码
{ 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 123f: !!str true

如果转换为JavaScript,代码如下:

复制代码
{ e: '123', f: 'true' }

07yaml字符串

字符串是最常见,也是最复杂的一种数据类型;

字符串默认不使用引号表示;

复制代码
str: 这是一行字符串

如果转换为JavaScript,代码如下:

复制代码
{ str: '这是一行字符串' }

如果字符串之中包含空格或特殊字符,需要放在引号之中

复制代码
str: '内容:字符串'

如果转换为JavaScript,代码如下:

复制代码
{ str: '内容: 字符串' }

单引号和双引号都可以使用,双引号不会对特殊字符转义

复制代码
s1: '内容\n字符串's2: "内容\n字符串"

如果转换为JavaScript,代码如下:

复制代码
{ s1: '内容\\n字符串', s2: '内容\n字符串' }

单引号之中如果还有单引号,必须连续使用两个单引号转义

复制代码
str: 'labor''s day'

如果转换为JavaScript,代码如下:

复制代码
{ str: 'labor\'s day' }

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格​​​​​​​

复制代码
str: 这是一段多行字符串

如果转换为JavaScript,代码如下:

复制代码
{ str: '这是一段 多行 字符串' }

多行字符串可以使用| 保留换行符,也可以使用> 折叠换行​​​​​​​

复制代码
this: |FooBarthat: >FooBar

转为 JavaScript 代码如下

复制代码
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
  • 表示保留文字块末尾的换行, - 表示删除字符串末尾的换行​​​​​​​

    s1: |Foos2: |+Foos3: |-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' }

08yaml引用

锚点& 和别名* ,可以用来引用。​​​​​​​

复制代码
defaults: &defaultsadapter: postgreshost: localhostdevelopment:database: myapp_development<<: *defaultstest:database: myapp_test<<: *defaults

等同于下面的代码​​​​​​​

复制代码
defaults:adapter: postgreshost: localhostdevelopment:database: myapp_developmentadapter: postgreshost: localhosttest:database: myapp_testadapter: postgreshost: localhost

& 用来建立锚点( defaults ), << 表示合并到当前数据, * 用来引用锚点。

示例:​​​​​​​

复制代码
- &showell Steve- Clark- Brian- Oren- *showell

转为 JavaScript 代码如下

复制代码
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
相关推荐
visual_zhang7 小时前
大型 iOS 工程单元测试 — 变更驱动测试与跨模块 Mock
单元测试·代码规范
摇滚侠8 小时前
虚拟机部署龙虾 OpenClaw,VMware 安装 Linux CentOS 虚拟机操作系统,部署 Docker,部署 OpenClaw
linux·docker·centos
SuniaWang8 小时前
Vue 项目 Docker 多阶段构建部署指南(阿里云)
vue.js·阿里云·docker
returnthem8 小时前
Docker学习笔记
云原生·eureka
AI成长日志9 小时前
【agent专栏】Agent服务化与性能优化——Docker容器化、并发处理、成本控制
docker·容器·性能优化
indexsunny9 小时前
互联网大厂Java面试实战:微服务与Spring Boot在电商场景下的应用解析
java·spring boot·redis·docker·微服务·kubernetes·oauth2
minstbe9 小时前
IC 设计私有化 AI 助手实战:基于 Docker + OpenCode + Ollama 的数字前端综合增强方案(实战篇)
人工智能·python·docker·ai
江湖有缘9 小时前
从零开始:在Docker中一键部署Umbrel个人云系统
运维·docker·容器
岁岁种桃花儿9 小时前
kubenetes从入门到上天系列第十五篇:Kubernetes的持久化存储PC和PVC
云原生·容器·kubernetes
returnthem9 小时前
Docker数据卷
运维·docker·容器