Kubernetes yaml 文件

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 文件模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 第一部分:控制器示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx

# 第二部分:Pod 的设置
template: # Pod 元数据
metadata:
labels:
app: nginx
spec: # Pod 规格
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

4. 如何快速编写 yaml 文件

在实际开发过程中,如果说让我们从零开始编写一个完整的 yaml 文件出来,还是有一定难度的,至少字段以及格式上就很难保证不出错。手写是不现实的,所以我们通常需要通过一定的方式 快速生成yaml文件

方法一:kubectl create 生成

使用 kubectl create 命令创建一个名为 web 的 deployment 资源,但是不让它真正创建,而是生成一个 yaml 文件;

1
kubectl create deployment web --image=nginx -o yaml --dry-run

–dry-run:尝试运行,不真正运行。

命令运行完之后 yaml 文件会自动生成,yaml 包含了所有字段以及格式,之后对它进行复制修改即可。此过程并未在集群中执行,而仅仅是以 yaml 文件的形式输出了,我们索取需要的文件内容和格式即可。

为了更加方便,我们也可以直接将生成的 yaml 文件内容输入到某一个文件当中,之后修改文件内容,如下;

1
kubectl create deployment web --image=nginx -o yaml --dry-run > ma.yaml

方法二:kubectl get 导出

此方法适用于已经部署好的项目中,将项目中的 yaml 文件导出。在这里我先查看以下集群中已经部署的项目资源;

以操作 nginx 资源为例,将 nginx 资源相关内容以 yaml 格式导出并输入到 ma2.yaml 文件中,命令如下:

1
kubectl get deploy nginx -o=yaml --export > ma2.yaml

执行完成之后会生成 ma2.yaml 文件。


Kubernetes yaml 文件
https://flepeng.github.io/042-云原生-02-kubernetes-31-核心概念-Kubernetes-yaml-文件/
作者
Lepeng
发布于
2023年3月1日
许可协议