yaml文件格式
yaml文件概述:
k8s中对资源的管理和资源对象的编排部署都可以通过声明式文件(yaml文件)来解决,也就是把对资源对象的操作编辑到yaml文件中,我们把这种文件称之为资源清单文件,然后通过kubectl命令直接应用资源清单文件就可以实现对大量资源对象进行编排部署了。
yaml基本语法:
yaml是一种标记语言,基本语法特点如下:
1、大小写敏感;
2、采用空格作为缩进来表示层级关系;
3、不支持tab键缩进(起码低版本不支持),要使用空格缩进,缩进的空格数不重要,只要相同层级的左侧对其即可,但为了统一美观,我们常采用第3条的做法;
4、通常开头缩进2个空格,字符后缩进1个空格,如冒号,道号之后空一格;
5、在单个配置文件中,可以使用---来表示分割多个yaml文件,如在一个redis_config.yaml
文件中既有deployment的定义,又有service的定义,那么就可以使用---将两个资源的定义分割开来;
6、yaml文件使用#号表示注释;
7、冒号,在key:value的冒号后面一定要有一个空格;
8、yaml文件的后缀既可以是.yaml,也可以是.yml,官方建议使用.yaml,但是很多人或网站提供的yaml文件是使用.yml后缀做为文件后缀的。
yaml支持的数据类型:
纯量:单个的,不可分割的值;
对象:键值对的集合,又称之为映射(mapping)、哈希(hash)、字典(dictionary);
数组:一组按次序排列的值,又称为序列(sequence)、列表(list);
纯量,就是指一个简单的不可再分割值,如整数、浮点数、字符串、布尔值、null,时间、日期等;
1、布尔类型
flag: true (或True)
flag1: false (或False)
2、整型、浮点型
a: 25
b: 24.6
3、字符串
name: "LiMing"
4、null类型
nothing: #不写值就表示null
nothing: ~ #使用~也可表示null
5、日期类型(日期类型必须使用ISO 8601格式,即yyyy-MM-dd)
date: 2022-01-01
6、时间类型(时间类型使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区)
time: 2022-01-01T15:02:03+08:00
对象,其实就是键值对的集合;
1、写法一(推荐使用)
teacher:
age: 27
name: "liMing"
2、写法二(不推荐使用,了解即可)
teacher: {age: 15,name: "liMing"}
数组:一组按次序排列的值,又称为序列(sequence)、列表(list);
1、写法一(推荐使用)
address:
- "深圳福田岗厦"
- "深圳福田华强北"
2、写法二(不推荐使用,了解即可)
address: ["深圳福田岗厦","深圳福田华强北"]
综合范例演示:
teacher:
name: "liMing"
man: true
age: 27
address:
- "深圳福田岗厦"
- "深圳福田华强北"
k8s简单资源yaml清单
下面对一个简单的k8s资源对象的yaml清单进行解读,加深语法格式:
[root@master ~]# vim deplyment_nginx.yaml #创建一个deployment资源描述清单yaml文件
apiVersion: apps/v1 #定义api版本
kind: Deployment #资源类型,deployment
metadata: #资源元数据
name: deployment-nginx #资源名称
labels: #资源本身的标签,这里定义2个标线
env: dev
tiar: front
namespace: default #所属命名空间
spec: #资源规格
replicas: 3 #pod副本数量
selector: #标签选择器,用于匹配pod
matchLabels:
app: nginx
template: #pod模板
metadata: #pod元数据
labels: #pod的标签
app: nginx
spec: #pod规格
containers: #容器配置,可以有多个容器
- image: nginx:1.7.9 #镜像版本
name: nginx-container #容器名称
readinessProbe: #容器的就绪探针
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 2
failureThreshold: 3
successThreshold: 1
exec:
command:
- ls
- /var/ready
ports: #定义容器的端口
- name: http #给端口起个名称
containerPort: 80 #容器的端口
[root@master ~]#
如何快速的编写yaml文件
1、使用kubectl create
结合--dry-run
参数尝试创建资源,然后输出yaml文件
# --dry-run 参数并不会真正创建资源,只是试运行
[root@master ~]# kubectl create deployment web --image=nginx -o yaml --dry-run >>web_deployment.yaml
2、从已有的资源对象中导出yaml文件来进行编辑
[root@master ~]# kubectl get deploy nginx -o yaml --export >nginx_deploy.yaml