![公有云容器化指南:腾讯云TKE实战与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/564/35433564/b_35433564.jpg)
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必选参数
![](https://epubservercos.yuewen.com/03538B/18917073601139206/epubprivate/OEBPS/Images/2b5.jpg?sign=1739315919-u5S4nZwlK1q2GmFMf2gxyF7Wy810mS2m-0-ab150ff1a4ca0f95fb23bf55edab7e17)
以上这些都是编写YAML文件的必选参数,每个YAML文件都包含它们。
2.主要参数对象
上文说的都是必选参数,其他功能的参数,虽然不是必选项,但是可以让YAML定义得更详细、功能更丰富。接下来的参数都是Spec对象下面的,主要分为spec.containers和spec.volumes。
(1)spec.containers
spec.containers是一个List数组,它用来描述container容器方面的参数,所以包含的参数非常多,如表2-6所示。
表2-6 spec.containers参数
![](https://epubservercos.yuewen.com/03538B/18917073601139206/epubprivate/OEBPS/Images/2b6.jpg?sign=1739315919-DE918kp1nQalgv7XZvtyPAxMSYa2eAC1-0-feee63a38a16f08abb78d7710d379376)
![](https://epubservercos.yuewen.com/03538B/18917073601139206/epubprivate/OEBPS/Images/2b6x.jpg?sign=1739315919-worIhKtX7zwEpQ06e3gpXSIn18ZTiSHC-0-9113a59563ec9dfba54e630247cd0f24)
(2)spec.volumes
spec.volumes是一个list数组,很明显,看名字就知道它是用于定义同步存储的参数,包含的参数非常多,如表2-7所示。
表2-7 spec.volumes参数
![](https://epubservercos.yuewen.com/03538B/18917073601139206/epubprivate/OEBPS/Images/2b7.jpg?sign=1739315919-O2zPWvinAsWZOT2KPZDphEZFBaTPcwuu-0-4837f9bf755e9bd4ce946ed128cd6fcb)
(3)额外的参数对象
除了上面介绍的spec.containers和spec.volumes两个主要参数,还有几个额外的参数对象,如表2-8所示。
表2-8 额外参数对象
![](https://epubservercos.yuewen.com/03538B/18917073601139206/epubprivate/OEBPS/Images/2b8.jpg?sign=1739315919-1krYSvCnajIPetTUp1rv69IC24H5iCus-0-934e7100271bb7789841c61feb2db706)
上面的几张表格我们不用死记硬背,可以把这些表格当作字典,用到的时候再查看。话说回来,如果参数不那么丰富,那么Kubernetes的功能定义将大幅下降。
另外,YAML里的这些参数其实是Kubernetes声明式的一种体现,我们可以简单地把它理解为用户操作Kubernetes的一个接口。YAML里设置的参数数值,最终都会持久化到ETCD里。