YAML语法基础(K8s基础)

  

YAML 语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
它的基本语法规则如下。
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

YAML支持的数据结构有三种。
  • 对象(Object):键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组(Aarry):一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

以K8s中的示例来说明对象和数组:
apiVersion: apps/v1    #这是一个对象,key:value,这种形式的键值对,在yaml中就称为对象,也可以叫字典 或 映射(map).
kind: ReplicaSet      #这也是对象
metadata:           #对象可以是多个k:v 组合,这就是一个多k:v组合的对象。
 name: myapp
 namespace: default
spec:          #它也是对象,它更复杂点,它是复合型的对象
 replicas: 2
  selector:
   matchLabels:
    app: myapp
    release: canary
  template:
   metadata:
    name: myapp-pod
    labels:
     app: myapp
     release: canary
     environment:qa
   spec:
    containers:      #它的帮助信息中显示,它的类型为: <[]Object> ,但Yamy中,
               #它实际上是一个对象类型,但这个对象的值是一个数组类型。
    -  name: myapp-container    #这是一个多属性的数组,即一个数组有多个元素组成。
       image: busybox
       ports:        #它和containers一样。也是一个对象类型,但值(value)是数组类型.
     -  name:http        #注意: 数组是以"-"开头的.
      containerPort: 80
       -   name: https
      containerPort: 443

#对象数组类型比较容易混乱,我将其转化为单行形式的:【注意: YAML语法中,这种单行形式,称为流式(flow)语法】
  ports: [ {name: http, containerPort: 80 }, {name:https, containerPort: 443} ]
这样看就可以很容易看到: ports: VALUE 个格式, 但这个VALUE是一个数组,
而数组内部,每一个元素又是一个对象,因为name:http 其实就是K:V,所有它就是一个对象。
和对象相对应的是值,即单个字符串: 如下面的数组的示例。

#这里需要注意,数组还有一种形式是:
ports:
  -
    name: http
       containerPort: 80
  -
    name: https
  containerPort: 443
这样写,也表示"-" 下面的是数组的组成元素。YAML语法是需要使用空格对齐的!

#在YAML中表示一个这样的数组: [Nginx, Hadoop, Apache]
#就可以这样写:
  - Nginx
  - Hadoop   #像这样单个字符串Hadoop,就是一个值,对象是K:V组合,因此要区分开。
  - Apache

还需要强调:
    关于对齐,YAML要求,同级别要对齐,不同级别错位时,至少错开一个空格,产生上下级层次,即可,没有规定必须空出多少个空格。
    对于数组对象,因为它是以"-"横线开头,因此横线可与上层持平,也不算错,当然错开也是可以的。

YAML语法中在同一个文件中写多个配置段的语法:
server:
    address: 192.168.1.100
---      #在YAML格式中,使用三个横线("---")表示一个配置段的开始.
spring:
    profiles: development
    server:
  address: 127.0.0.1
---
spring:
    profiles: production
    server:
  address: 192.168.1.120

YAML中在同一个文件中,写两个YAML文件的语法
#yaml文档1
---          #三个横线表示文档开始
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...          #三个点表示文档结束

#yaml文档2
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...

YAML中单引号和双引号的区别和使用

s1: ‘内容\n字符串‘
s2: "内容\n字符串"
用JavaScript表示:
  { s1: ‘内容\\n字符串‘, s2: ‘内容\n字符串‘ },可以看到,单引号会转义特殊字符,而双引号不会转义特殊字符.

str: ‘labor‘‘s day‘
用JavaScript表示:
   { str: ‘labor\‘s day‘ },从这个示例中,可以看到,双写单引号,可以起到转义后一个单引号的目的。

YAML语法中的一些高级用法:

下面是一种数组的另一种写法
意思即对象的属性是一个数组[key1, key2],对应的值也是一个数组[Value1, Value2]

  

数据类型:

boolean:
  - TRUE      #true,True都可以
  - FALSE    #false,False都可以
float:
  - 3.14
  - 6.8523015e+5    #可以使用科学计数法
int:
  - 123
  - 0b1010_0111_0100_1010_1110    #二进制表示
null:
  nodeName: ‘node‘
  parent: ~        #使用~表示null
string:
  - 哈哈
  - ‘Hello world‘      #可以使用双引号或者单引号包裹特殊字符
  - newline
    newline2       #字符串可以拆成多行,每一行会被转化成一个空格

date:
  - 2018-02-17      #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
  - 2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

picture: !!binary |            # Base64 编码的图片数据. 这里的"|",是YAML语法中的表示保留换行符的符号.
  R0lGODlhDAAMAIQAAP//9/X      #与"|" 相对的是 ">", 它表示 折叠换行,即 不保留换行符, 换行符会被替换为空格.
  17unp5WZmZgAAAOfn515eXv    #关于是否保留换行符,还有"|+" 和 “|-”参考下面
  Pz7Y6OjuDg4J+fn5OTk6enp            #注意:Base64编码在书写时,每行的前面必须有一个空格!!
  56enmleECcgggoBADs=

数据类型转换:

string:
  - !!str 54321 #这种就是将int类型转换为字符串类型. 需要使用两个叹号,即可。
  - !!str true

YAML中多行文本时,换行符保留与替换:

str: 这是一段
   多行
     字符串
用JavaScript表示: { str: ‘这是一段 多行 字符串‘ } ,换行符为替换为空格了。

this: |
    Foo
    Bar
用JavaScript表示: {this: ‘Foo\nBar\n‘} ,可以看到每个换行符都保留了。

s2: |+
    Foo
    abc
用JavaScript表示: {s2: ‘Foo\nabc\n\n‘}, 可看到,它保留了原始文本中的换号符,解析后还加入了一个换行符.

s3: |-
   Foo
   abc
用JavaScript表示: {s3: ‘Foo\nabc},减号,就表示删除文本块末尾的换行符.

that: >
   Foo
   Bar
用JavaScript表示: {that: ‘Foo Bar\n‘},这个可以看到,折叠换行就是,只保留文本块末尾的换行符.
注意: ">",也支持">-" 和 ">+" 以上和上面一样。

锚点(&) 和 引用(*) 的组合使用:

示例1
hr:
   - Mark McGwire
   - &SS Sammy Sosa      #创建了一个锚点叫SS, 其值为:Sammy Sosa
rbi:
   - *SS       #引用一个已经定义的锚点SS,这样就引用了SS的值 Sammy Sosa。
   - Ken Griffey
用JavaScript语法: {rbi: [Sammy Sosa, Ken Griffey], hr: [Mark McGwire, Sammy Sosa]}

另一种定义方法:
SS: &SS Sammy Sosa      #先定义一个对象,Key是SS,Value是一个锚点
hr:
    - Mark McGwire
    - *SS            #这里引用锚点SS.得到的结果和上面一样。
rbi:
    - *SS
    - Ken Griffey

示例2
defaults: &defaults          #定义了一个锚点:叫defautls
     adapter: postgres
   host: localhost

development:
  database: myapp_development
  <<: *defaults        #这里引用了defaults描点的值,并使用"<<"表示将其合并到当前对象(Object)或叫映射(map)中。

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

示例3:
merge:
  - &CENTER { x: 1, y: 2 }
  - &LEFT { x: 0, y: 2 }
  - &BIG { r: 10 }
  - &SMALL { r: 1 }

sample1:
  <<: *CENTER
  r: 10

sample2:
  << : [ *CENTER, *BIG ]
  other: haha

sample3:
  << : [ *LEFT, *BIG ]
  r: 100

合并就相当于下面:
sample1:
  x: 1
  y: 2
  r: 10

sample2:
  x: 1
  y: 2
  r: 10
  other: haha

sample3:
  x: 0
  y: 2
  r: 100 #sample3还引入了BIG,它的值是r:10,但sample3中已经有r:100了,因此引入后,sample3原始值会覆盖引入的r:10.

原文地址:https://www.cnblogs.com/wn1m/p/11286109.html

时间: 2024-07-31 10:20:13

YAML语法基础(K8s基础)的相关文章

kubernetes(k8s) 基础概念

K8S基础概念 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubernetes的Kubelet.kube-proxy服务进程,这些服务进程负责Pod的创建.启动.监控.重启.销毁.以及实现软件模式的负载均衡. Node包含的信息: Node地址:主机的IP地址,或Node ID. Node的运行状态:Pending.Running.Terminated三种状态. Node Condition:- N

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

java基础之基础语法详录(一)

[前言] java的语法先从基础语法学,Java语言是由类和对象组成的,其对象和类又是由方法和变量组成,而方法,又包含了语句和表达式. 对象:(几乎)一切都是对象,比如:一只熊猫,他的外观,颜色,他在吃.喝.睡.玩 类:如果说一切都是对象,那么什么决定了某一类对象的外观和行为呢?类是一个模板,它描述一类对象的行为和状态. class HelloWorld{/*这表示一个类,class后跟的是类名*/} 方法:(方法也可以称作成员函数)方法你可以看成是行为,一个类可以有很多方法.逻辑运算.数据修改

【K8S】K8S-网络模型、POD/RC/SVC YAML 语法官方文档

K8S-网络模型.POD/RC/SVC YAML 语法官方文档 Kubernetes - Production-Grade Container Orchestration kubernetes/kubernetes: Production-Grade Container Scheduling and Management Posts containing 'yaml' - Stack Overflow how to pass a configuration file thought yaml o

Object Pascal 语法之语言基础(二)

1.5 数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object Pascal 语言中不会看到像C 语言编译器提示的“可疑的指针转换”等警告信息.由于Object Pascal 语言对数据类型比较严谨,因此它会对代码进行严格检查,以确保不会出现错误.变量是程序代码中代表一个内存地址的标识符,那么该地址的内存内容就可以在程序代码执行时被改变.每个变量都有一个名字和数据类型,名字可以用来引用变量,数据类型决

Object Pascal 语法之语言基础(四)

1.8 过程与函数 过程与函数是实现一定功能的语句块,是程序中的特定功能单元.可以在程序的其他地方被调用,也可以进行递归调用.过程与函数的区别在于过程没有返回值,而函数有返回值. 1.过程与函数的定义过程与函数的定义包括过程原型或函数原型.过程体或函数体的定义.过程定义的形式如下: procedure ProcedureName(ParameterList); directives; var LocalDeclarations; begin statements end; ProcedureNa

Object Pascal 语法之语言基础(一)

Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言. 1 语言基础 Object Pascal 语言是在Pascal 语言的基础上发展起来的,它继承了Pascal 语言语法严谨.数据结构丰富等优点,同时融入了面向对象编程的语法要素,使之成为一个完善的面向对象的编程语言. 1.1 Object Pascal 语言编写环境 随着Windows 操作系统的普及,很少有人在DOS 环境下编写程序了,下面将为读

Object Pascal 语法之语言基础(三)

1.6 Object Pascal 的运算符 运算符是程序代码中对各种类型的数据进行计算的符号,通常分为算数运算符.逻辑运算符.比较运算符和按位运算符. 1.算术运算符Object Pascal 语言的算术运算符,如表1-9 所示.表1-9 Object Pascal 语言算术运算符 操作符 操作 操作数据类型 结果类型 + 加 整型.实型 整型.实型 - 减 整型.实型 整型.实型 * 乘 整型.实型 整型.实型 / 除 整型.实型 整型.实型 mod 取余 整型 整型 div 整除 整型 整

k8s基础知识和概念

k8s基础知识和概念 一. 简介 kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制. Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务