2.5 如何编写Pod YAML文件
刚学习Kubernetes的人会接触到非常多的概念,见得最多的就是YAML文件配置了。网络上讲解Kubernetes的文章都只选取一小段YAML配置文件做一个简单的示意,初学者通常对YAML没有整体的认识,还处于迷惑状态。下面我们对Pod YAML文件的编写和配置进行整体讲解。
2.5.1 什么是YAML文件
前面我们了解到,Kubernetes配置文件都是YAML文件格式的,那么什么是YAML文件?它的编写语法是什么呢?
1.YAML的特点
YAML(Yet Another Markup Language)结合了我们之前接触过的properties、XML、JSON等数据格式标记语言的特性,具有以下特点。
●层次分明、结构清晰。
●使用简单、上手容易。
●语义丰富。
●大小写敏感。
●禁止使用Tab键缩进,只能使用空格键缩进。
2.YAML的语法
我们通过一个例子快速了解YAML的语法。
#前面是key,后面是value,表示如下: name: nginx # 表示metadata.name=nginx: metadata: name: nginx # 表达数组,即表示containers为[name,image,port]用-就可以了 containers: - nginx - nginx - 80 # 常量、布尔、字符串定义 version: 1.1 # 定义一个数值1.1 rich: true # 定义一个Boolean值 say: 'hello world' # 定义一个字符串
掌握了上面的语法,基本就能看懂和编写Kubernetes的YAML了。Kubernetes里的YAML用不到其他高级的语法格式。
2.5.2 Pod YAML的参数定义
Pod是Kubernetes的最小单元,它的信息都记录在一个YAML文件里。那么这个YAML文件应该怎么写呢?里面有哪些参数?如何修改YAML文件?带着这几个问题,我们来深入了解YAML文件。
初学者看到Kubernetes的YAML配置文件会觉得又长又没规律。其实,我们可以从两个方面对其进行梳理:第一是找出必选参数,第二是找出主要参数对象。
1.必选参数
注意,对于YAML文件,下面几个参数是必须要声明的,不然运行绝对会出错,YAML文件参数、字段类型及说明如表2-5所示。
表2-5 YAML必选参数
以上这些都是编写YAML文件的必选参数,每个YAML文件都包含它们。
2.主要参数对象
上文说的都是必选参数,其他功能的参数,虽然不是必选项,但是可以让YAML定义得更详细、功能更丰富。接下来的参数都是Spec对象下面的,主要分为spec.containers和spec.volumes。
(1)spec.containers
spec.containers是一个List数组,它用来描述container容器方面的参数,所以包含的参数非常多,如表2-6所示。
表2-6 spec.containers参数
(2)spec.volumes
spec.volumes是一个list数组,很明显,看名字就知道它是用于定义同步存储的参数,包含的参数非常多,如表2-7所示。
表2-7 spec.volumes参数
(3)额外的参数对象
除了上面介绍的spec.containers和spec.volumes两个主要参数,还有几个额外的参数对象,如表2-8所示。
表2-8 额外参数对象
上面的几张表格我们不用死记硬背,可以把这些表格当作字典,用到的时候再查看。话说回来,如果参数不那么丰富,那么Kubernetes的功能定义将大幅下降。
另外,YAML里的这些参数其实是Kubernetes声明式的一种体现,我们可以简单地把它理解为用户操作Kubernetes的一个接口。YAML里设置的参数数值,最终都会持久化到ETCD里。