Administrator
发布于 2026-08-13 / 2 阅读
0
0

第四章.k8s资源清单-资源清单的编写1

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=14

第四章 k8s资源清单-资源清单的编写1

资源清单整体结构

K8s资源清单采用YAML格式编写,通过缩进表示对象的层次关系,整体包含5个一级根对象,所有资源清单都必须包含这5个根对象:

  • 前4个根对象(apiVersion、kind、metadata、spec)需要用户手动编写,用于定义资源的属性与期望

  • 最后一个根对象status由K8s集群自动维护生成,用户无需编写

各根对象详解

apiVersion(接口组+版本)

apiVersion用于指定资源所属的API接口组与版本,格式为<组名>/<版本号>,核心组(K8s落地时就存在的核心功能组)可省略组名,直接写版本号(如v1实际代表core/v1)。

  • 设计逻辑类比:类似代码的微服务目录结构,不同组对应不同业务模块(如classroom对应教室管理模块、student对应学生管理模块),访问不同功能需指定对应路径(如访问教室管理功能需访问classroom/v1/index.php,访问学生管理功能需访问student/v1/index.php),对应K8s中不同组对应不同的资源功能;同一模块下的不同版本(如v1、v2beta1、v3)对应同一功能的不同迭代版本,v1为基础功能版,v2beta1为性能优化版,v3可能新增功能或废弃旧功能,需根据实际需求选择对应版本。

  • 查询方式:无需硬背,可通过kubectl api-versions命令查询当前集群所有可用的API组与版本,输出格式为组名/版本号,核心组仅输出版本号。

  • 注意事项:不同K8s版本的同一资源可能对应不同apiVersion,如K8s 1.15及更早版本中Deployment默认使用extensions/v1beta1,当前版本已改为apps/v1,编写时需勤查避免报错。

kind(资源类别)

kind用于指定要创建的资源类型,如Pod、Deployment,相当于告诉K8s集群你要创建的具体资源,类似工厂生产时告知要生产汽车还是飞机,必须与实际要创建的资源类型匹配。

metadata(元数据)

metadata用于定义资源的描述信息,属于资源的附属属性,常见子对象包括:

  • name:资源的名称,同一命名空间下资源名称唯一

  • namespace:资源所属的命名空间,Pod属于命名空间级资源,不指定时默认归属到default命名空间,若需归属到其他命名空间需显式指定

  • labels:标签,用于给资源打标记,方便后续筛选、归类资源,如app: nginx表示该资源属于nginx应用。

spec(期望)

spec是声明式API的核心,用于定义用户期望的资源状态,比如Pod需要运行哪些容器、使用什么镜像、执行什么命令等。K8s集群会持续朝着用户定义的期望努力,但无法保证最终结果一定符合预期(如镜像不存在时集群会持续重试拉取,多次失败后会停止尝试)。

类比:期望孩子考上北大是spec,实际结果可能考上北大也可能考上其他院校,但会朝着期望努力。

status(状态)

status是K8s集群自动维护的字段,用于实时反映资源当前的实际状态,如Pod的状态是Running、Pending还是CrashLoopBackOff,用户编写资源清单时无需定义该字段。

实操:创建首个Pod资源清单

集群初始化验证

启动K8s集群后需等待containerd、docker、cri-dockerd、kubelet等组件及系统Pod全部启动完成,所有Pod处于Running状态才算初始化完成,可通过以下命令验证:

  1. kubectl get node 查看节点状态,节点状态为Ready表示节点正常

  2. kubectl get pod -A 查看所有命名空间的Pod,所有Pod状态为Running表示集群初始化完成

Pod资源清单示例

apiVersion: v1

kind: Pod

metadata:

name: pod-demo

namespace: default

labels:

app: nginx

spec:

containers:

  • name: myapp-1

image: nginx:v1

  • name: busybox-1

image: busybox

command: [“sh”,"-c",“sleep 3600”]

Pod组成说明:每个Pod包含1个pause容器(基础设施容器)和N个业务容器,所有容器共享网络、IPC、PID命名空间。

创建操作步骤

  1. 将上述YAML内容保存为pod-demo.yaml文件

  2. 执行kubectl create -f pod-demo.yaml命令,将资源清单提交给K8s集群,集群会根据spec中的期望实例化对应的Pod资源

  3. 可通过kubectl get pod命令查看Pod的创建状态

运维提示:执行删除等危险操作前需反复确认目标,避免误删重要文件。

字段查询工具

若不确定资源或子对象的字段定义,可通过kubectl explain命令查询官方手册,实现“哪部分不会查哪部分”,例如:

  • kubectl explain pod 查询Pod根对象的字段定义

  • kubectl explain pod.spec 查询Pod的spec子对象的字段定义

  • kubectl explain pod.spec.containers 查询containers字段的定义与要求

AI 总结

本视频为K8s教程第四章第一节,核心讲解K8s资源清单(YAML格式)的核心构成与编写方法:首先通过代码目录、微服务拆分的类比,帮助学员理解apiVersion的组、版本设计逻辑;随后逐一解析5个一级根对象的含义、编写规则与注意事项,明确用户需要编写的字段范围;接着演示了kubectl api-versions、kubectl explain等实用命令的用法,解决字段记忆痛点;最后以创建Pod为例,完成首个资源清单的编写与提交实操,帮助学员掌握资源清单的基础编写能力,为后续学习其他资源对象的编写打下基础。


评论