K8S集群中Yaml文件详解

目录

一、Yaml概述

二、Yaml基本语法

三、Yaml数据结构

四、K8S资源清单描述方法

五、api资源版本标签

六、Yaml文件示例详解

1.deployment.yaml文件详解

2.Pod yaml文件详解

3.Service yaml文件详解

七、Yaml文件相关操作

1.试运行

2.生成yaml格式

3.生成json格式 

4.使用yaml格式导出生成模板

5. 先查看已经部署的资源

6.导出资源配置

7.导出资源并保存在指定文件中

8.查看字段帮助信息

9.部署和卸载yaml文件


一、Yaml概述

K8S集群中对资源管理和资源对象编排部署都可以通过声明YAML文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。

  • YAML 文件 : 就是资源清单文件,用于资源编排

二、Yaml基本语法

  • 通过缩进表示层级关系;
  • 使用空格做为缩进,缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,一般缩进两个空格;
  • 低版本缩进时不允许使用 Tab 键,只允许使用空格;
  • 使用#代表注释,从这个字符一直到行尾,都会被解释器忽略;
  • 使用 --- 表示新的 yaml 文件开始;

三、Yaml数据结构

  • 对象:键值对的集合,又称为映射 (mapping) / 哈希(hashes) / 字典(dictionary)
# 对象类型:对象的一组键值对,使用冒号结构表示
name: Tom
age: 18
 
# yaml 也允许另一种写法,将所有键值对写成一个行内对象
hash: {name: Tom, age: 18}
  • 数组: 一组按次序排列的值,又称为序列(sequence) / 列表 (list)
# 数组类型:一组连词线开头的行,构成一个数组
People
- Tom
- Jack
 
# 数组也可以采用行内表示法
People: [Tom, Jack]
  • 纯量(scalars): 单个的、不可再分的值
number: 10.01
 
flag: true
 
# 字符串默认不使用引号表示
str: hello world
 
# 如果字符串中间包含空格或者特殊字符,需要放到引号中
str1: 'hello: world'
 
# 双引号不会对特殊字符进行转义
s1: '张\n三'
s2: "张\n三"
 
# 单引号中还有单引号,需要连续用两个单引号进行转义
s3: 'hello''world'

四、K8S资源清单描述方法

在 k8s 中,一般使用 YAML 格式的文件来创建符合我们预期期望的pod,这样的YAML 文件称为资源清单。主要分为两大部分,一个是控制器的定义、另一个是被控制的对象

资源清单中常用的属性名称:

参数名

字段类型

说明

是否必须

version

String

这里指定是K8S API的版本,目前基本上是v1,可以通过kubectl api-versions命令查询

kind

String

yaml文件定义的资源类型和角色,比如:Pod、Deployment、ReplicaSet、Service

metadata

Object

元数据对象,固定值就写metadata

metadata.name

String

元数据对象的名字,由我们自定义,比如命名Pod的名字,Service的名字

metadata.namespace

String

元数据对象的命名空间,由我们自定义。非必填,默认为default

spec

Object

详细定义对象,固定值就写spec

spec.containers[]

list

spec对象的容器列表定义

spec.containers[].name

String

容器名字

spec.containers[].image

String

容器所使用的镜像

spec.containers[].imagePullPolicy String

定义镜像拉取策略,有Always、Never、IfNotPresent三个值。

Always:意思是每次都尝试重新拉取镜像。(默认值是Always)

Never:表示仅使用本地镜像。

IfNotPresent:如果本地有镜像

### 3.1 PersistentVolume (PV) YAML 配置详解 PersistentVolume 是 Kubernetes 中代表集群中一块存储资源的对象。它通常由管理员预先创建,也可以通过 StorageClass 动态供应。PV 的配置包括存储容量、访问模式、存储类型(如 `hostPath`、`nfs`、`aws-ebs` 等)以及存储类名称(storageClassName)[^2]。 #### 示例:使用 NFS 创建 PersistentVolume ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs-storage nfs: server: 192.168.1.100 path: /data/nfs ``` - `capacity`: 定义 PV 的存储容量,通常以 Gi 为单位。 - `accessModes`: 指定 PV 的访问模式,如 `ReadWriteOnce`(单节点读写)、`ReadWriteMany`(多节点读写)等。 - `persistentVolumeReclaimPolicy`: 定义 PV 被释放后的处理策略,可选 `Retain`(保留)、`Recycle`(回收)或 `Delete`(删除)。 - `storageClassName`: 引用一个 StorageClass 名称,用于动态供应。 - `nfs`: 指定 NFS 服务器地址和共享路径。 --- ### 3.2 PersistentVolumeClaim (PVC) YAML 配置详解 PersistentVolumeClaim 是用户对存储资源的请求。它通过指定访问模式和存储容量来绑定到合适的 PV。如果集群启用了 StorageClass,则 PVC 可以动态触发 PV 的创建。 #### 示例:创建 PVC 并绑定到 StorageClass ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: nfs-storage ``` - `accessModes`: 请求的访问模式,必须与 PV 的 `accessModes` 匹配。 - `resources.requests.storage`: 请求的存储容量。 - `storageClassName`: 指定 PVC 所使用的 StorageClass,若不指定则使用默认 StorageClass[^5]。 --- ### 3.3 StorageClass YAML 配置详解 StorageClass 用于定义存储的“类别”或“等级”,并提供动态供应机制。管理员可以定义多个 StorageClass 来区分不同性能或类型的存储(如 SSD、HDD、NFS 等),并由 PVC 指定使用哪个类。 #### 示例:定义一个 NFS 类型的 StorageClass ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: example.com/nfs reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true ``` - `name`: StorageClass 的唯一标识。 - `annotations`: 可用于标记默认 StorageClass,如 `storageclass.kubernetes.io/is-default-class: "true"` 表示该类为默认类。 - `provisioner`: 指定用于动态供应的插件,如 `example.com/nfs`。 - `reclaimPolicy`: 定义 PVC 被删除后 PV 的处理方式,可选 `Delete` 或 `Retain`。 - `volumeBindingMode`: 控制卷绑定策略,`Immediate` 表示立即绑定,`WaitForFirstConsumer` 表示延迟到 Pod 调度时绑定。 - `allowVolumeExpansion`: 是否允许 PVC 动态扩展存储容量。 --- ### 3.4 完整示例:结合 PV、PVC 和 StorageClass 的 YAML 配置 #### 示例:使用 PVC 动态绑定 StorageClass 并挂载到 Pod ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: managed-nfs-storage --- apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: pvc-volume mountPath: /usr/share/nginx/html volumes: - name: pvc-volume persistentVolumeClaim: claimName: dynamic-pvc ``` - PVC 使用 `storageClassName` 指定 StorageClass,Kubernetes 会自动为其创建 PV。 - Pod 使用 `persistentVolumeClaim` 类型的卷,并指定 PVC 名称进行挂载。 --- ### 3.5 查看 StorageClass 的命令 可以通过以下命令查看集群中已有的 StorageClass: ```bash kubectl get storageclass ``` 输出示例: ``` NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-nfs-storage example.com/nfs Delete Immediate true 5m45s ``` 其中: - `PROVISIONER`:表示动态供应插件。 - `RECLAIMPOLICY`:回收策略。 - `VOLUMEBINDINGMODE`:卷绑定模式。 - `ALLOWVOLUMEEXPANSION`:是否支持扩展。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值