1. yaml 文件概述
Kubernetes 集群中对资源管理和资源对象的编排部署可以通过声明样式(yaml)文件的方式来解决,把需要对资源对象的操作都编辑到 yaml 格式的文件中,这种文件叫做 资源清单文件
。通过 kubectl 命令可以直接使用资源清单文件实现对大量的资源对象进行编排和部署。
2. yaml 文件书写格式
yaml 的可读性非常高,它是用来表达 数据序列
的格式。它本身仍是一种 标记语言
,但这种语言是以数据为中心,而不是以标记语言为中心。
yaml 文件基本语法如下:
- 使用空格作为缩进;
- 缩进的空格数自定,但要求相同层级的元素左侧对齐;
- 一般开头缩进两个空格,字符后面也要缩进一个空格;
- 低版本缩进时不能用 Tab 键,只能用空格键;
- 使用 # 标识注释,从这个字符处开始到行尾,都会被解释器忽略;
- 使用一个 - 代表普通的格式,使用三个 - 则代表以下开始书写新的 yaml 文件。
3. yaml 文件组成部分及字段含义
通常在一个完整的 yaml 文件中,包含两个部分,控制示例
和 被控制的对象
。文件中必须存在的属性有如下几个:
字段 | 含义 |
---|---|
apiVersion | API 版本,可使用 kubectl api-version 命令查看 |
kind | yaml 文件定义的资源类型和角色,如 pod 等 |
metadata | 元数据对象 |
spec | 详细定义对象 |
replicas | 副本数量 |
selector | 标签选择器 |
template | Pod 模板 |
metadata | Pod 元数据 |
spec | Pod 规格 |
containers | 容器配置 |
如下是一个最基本的完整的 yaml 文件模板:
#第一部分:控制器示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
#第二部分:被控制的对象
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
4. 如何快速编写 yaml 文件
在实际开发过程中,如果说让我们从零开始编写一个完整的 yaml 文件出来,还是有一定难度的,至少字段以及格式上就很难保证不出错。手写是不现实的,所以我们通常需要通过一定的方式 快速生成yaml文件
:
• 方法一:kubectl create 生成
如下,我使用 kubectl create 命令创建一个名为 web 的 deployment 资源,但是不让它真正创建,而是生成一个 yaml 文件;
kubectl create deployment web --image=nginx -o yaml --dry-run
–dry-run:尝试运行,不真正运行。
可以看到 yaml 文件已经生成,包含了所有字段以及格式,之后对它进行复制修改即可。此过程并未在集群中执行,而仅仅是以 yaml 文件的形式输出了,我们索取需要的文件内容和格式即可。
为了更加方便,我们也可以直接将生成的 yaml 文件内容输入到某一个文件当中,之后修改文件内容,如下;
kubectl create deployment web --image=nginx -o yaml --dry-run > ma.yaml
• 方法二:kubectl get 导出
此方法适用于已经部署好的项目中,将项目中的 yaml 文件导出。在这里我先查看以下集群中已经部署的项目资源;
以操作 nginx 资源为例,将 nginx 资源相关内容以 yaml 格式导出并输入到 ma2.yaml 文件中,命令如下:
kubectl get deploy nginx -o=yaml --export > ma2.yaml