购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 使用YAML创建Kubernetes resource

YAML在Kubernetes中十分重要,因为Kubernetes中一切皆resource,而创建resource最常用的方式就是将resource的定义(配置)写入YAML文件,然后通过该文件来创建resource。因此,不管是自己创建resource还是看别人的YAML文件,都需要掌握YAML文件的用法。本节将介绍Kubernetes中YAML文件的基础用法,具体说明如下。

YAML是“YAML Ain't a Markup Language”(YAML不是一种标记语言)的缩写。YAML是一种数据序列化标准,它可以用于所有的编程语言,其特点是人性化,易读好懂。

序列化是指将内存中的对象(这里的对象,指面向对象编程中的对象,是广义的)数据,按照一定的标准(YAML就是其中的一种标准,JSON也是其中的一种标准),转换成可以传输或存储的数据。

反序列化:程序根据序列化标准,解析序列化数据,在内存中恢复出该对象的过程。

1.YAML使用步骤

使用YAML文件创建resource的步骤如下。

1)使用“kubectl explain XXX”获得指定resource的Object信息。

2)将Object信息按照YAML的标准写入YAML文件。

3)运行kubectl命令读取YAML文件来创建resource。

4)kubectl将YAML文件中的数据转换JSON格式的数据,并组成HTTP请求,发送给Kubernetes。

5)Kubernetes响应请求创建resource,并返回创建结果。

对于用户来说,最重要的就是将resource的Object信息,按照YAML的标准写入文件。

2.YAML描述示例

假设一个顾客(resource)Object的数据,包括两个成员:第一个成员是string类型,Key为name,Value值是张三;第二个成员是Object,Key是contact,Value有3个成员,其中第一个成员的Key是address,Value值是“江苏省南京市”,第二个成员的Key是telephone,Value是数组,包含一个值025-xxxxx,第三个成员的Key是mobilephone,Value是数组,包含两个值,分别是138xxxxxx和159xxxxxx。将上述Object写入YMAL文件,内容如图3-1所示。

图3-1 顾客Object的YAML描述图

上述Object也可以转换成JSON格式,内容如图3-2所示。

图3-2 顾客Object的JSON描述图

同一个resource的Object数据,既可以用YAML描述,也可以用JSON描述,YAML和JSON可以互相转换。这就如同一篇文章,既可以用中文,又可以用英文,不管使用哪种,它们表达的意思是一样的。

3.YAML基本语法

下面介绍使用YAML描述Object的基本语法。

(1)基本数据类型成员的表示

如图3-1第1行所示,name是Key在左边,中间使用冒号“:”分隔,张三是Value,在右边。要特别注意“:”的右边一定要有空格,但个数不限。

(2)Object成员的描述

如图3-1第2~8行所示,contact是Key在左边,中间使用冒号“:”分隔,“:”的右侧不能有数据,必须换行列出Value的各项成员,包括:address、telephone和mobilephone。要特别注意以下几点。

address的首字母a,必须和Key(contact)有缩进,而且必须用空格来缩进,不能用〈Tab〉键,通常是缩进两个空格,但具体的空格数没有限制,如果不缩进的话,address就会被解析成和contact平级的成员。

telephone的首字母t必须和address的a对齐,以此表示它们是同级的成员。

(3)数组成员的描述

如图3-1的4~5或6~8行所示,mobilephone是数组名,也是Key,位置在左边,后面跟“:”做分隔,“:”的右侧不能有数据,必须换行列出Value中各个元素,要特别注意以下几点。

数组元素以“-”作为开头,“-”不能超出Key(mobilephone)的位置,可以和Key(mobilephone)对齐,也可以缩进,建议缩进两个空格。

“-”后面要有空格,否则Value就是对象类型,而不是数组类型了。

数组内的元素的“-”一定要对齐,就如“- 138xxxxxx”和“- 159xxxxxx”的“-”一定要对齐,否则会报错。

(4)对象成员的命名

同一级的对象成员不能同名,例如图3-3的写法就会报错。

图3-3 同组对象成员同名示例

(5)YAML使用“#”作为注释符号

(6)YAML文件通常以yml作为文件扩展名

小窍门:http://nodeca.github.io/js-yaml/是一个在线将YAML转JSON的网站,可以输入YAML格式的描述,如果能够顺利转换成JSON,且逻辑正确的话,则说明编写的YAML文件正确。

4.YAML描述resource

如下所示就是使用YAML描述的一个Pod Object。

上述Pod Object的YAML文件说明如下。

1)第1个成员的Key是apiVersion,Value值是v1。v1是API version,是稳定版,core是API Group,core默认不写入,因此最终的apiVersion就是v1。

2)第2个成员Key是kind,值是Pod。

3)第3个成员类型是Object,它的Key是metadata,Value有1个成员,成员的Key是name,值mypod,它将作为Pod的标识。

4)第4个成员也是一个对象,Key是spec,有1个成员containers,containers是一个Object数组,数组中有1个元素,该元素有两个成员,第一个成员的Key是name,Value值是myfrontend,第二个成员的Key是image,Value值是nginx。表明该Pod只有1个容器,容器的名字为myfrontend,镜像的名字为nginx。

如果要我们自己来填写YAML文件,那么上述YAML中各个成员的值是从哪里获取的呢?说明如下。

1)apiVersion和kind值,是通过运行“kubectl explain Pod”查询得到的。

2)metadata和spec的详细结构,可以运行“kubectl explain Pod--recursive=true”来查询,但是每个成员的值,是需要用户填入的,因为这个属于配置信息,没有固定的值供选择。

3)访问https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20可以获得resource中各个成员值的描述和说明。

4)使用命令“kubectl api-resources”查询当前Kubernetes所支持的resource。

5)使用命令“kubectl api-versions”查询当前Kubernetes所支持的API版本,其版本的具体形式是GROUP/VERSION。 lox4sKXVf0BDq74FN9Dt0PbLgvRy6NDfXbkMhpYO2AAJjMR0wgd4+W6k+WAEpB6k

点击中间区域
呼出菜单
上一章
目录
下一章
×