YAML 是一种非常简洁/强大/专门用来写配置文件的语言!
YAML 全称是 ”YAML Ain’t a Markup Language” 的递归缩写,该语言的设计参考了 JSON / XML 和 SDL 等语言,强调以数据为中心,简洁易读,编写简单。
k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。 YAML文件:就是资源清单文件,用于资源编排
一 . YAML文件介绍
1.1 YAML概述
YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。
YAML 是一个可读性高,用来表达数据序列的格式。
XML | JSON | YAML |
---|---|---|
… |
1.2 YAML 基本语法
- 使用空格做为缩进
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 不允许使用Tab 键,只允许使用空格
- 使用#标识注释
- 使用 —- 表示新的yaml文件开始
- 大小写敏感
1.3 YAML 支持的数据结构
这块很多知识:YAML语法
-对象: 键值对的字典 (键值对的集合,又称为映射(mapping) / 哈希(hashes) / 字典(dictionary))
-数组: 一组按次序排列的列表
-纯量: 单个的且不可再分的值
# 纯量
hello
# 数组
- Cat
- Dog
- Goldfish
# 数组也可以采用行内表示法
People: [Tom, Jack]
# 数组类型:一组连词线开头的行,构成一个数组
People
- Tom
- Jack
# 对象
animal: pets
# 对象类型:对象的一组键值对,使用冒号结构表示
name: Tom
age: 18
# yaml 也允许另一种写法,将所有键值对写成一个行内对象
hash: {name: Tom, age: 18}
二 . YAML文件组成部分
控制器的定义
被控制的对象
属性说明
在一个YAML文件的控制器定义中,有很多属性名称
属性名称 | 介绍 |
---|---|
apiVersion | API版本 |
kind | 资源类型 |
metadata | 资源元数据 |
spec | 资源规格 |
replicas | 副本数量 |
selector | 标签选择器 |
template | Pod模板 |
metadata | Pod元数据 |
spec | Pod规格 |
containers | 容器配置 |
如何快速编写YAML文件
一般来说,我们很少自己手写YAML文件,因为这里面涉及到了很多内容,我们一般都会借助工具来创建
使用kubectl create命令
这种方式一般用于资源没有部署的时候,我们可以直接创建一个YAML配置文件
# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run
或者我们可以输出到一个文件中
kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml
使用kubectl get命令导出yaml文件
可以首先查看一个目前已经部署的镜像
kubectl get deploy
然后我们导出 nginx的配置
kubectl get deploy nginx -o=yaml --export > nginx.yaml
然后会生成一个 nginx.yaml
的配置文件