这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」
如果这些资源想要使用,我们要将其转换成对应的对象。比如Pod资源,我们要使用Pod资源,最终要运行为pod实例对象才行。从pod资源运行为pod实例对象的过程,我们需要向集群发送一些特定的pod对应的属性,比如pod使用的是哪个镜像,名字叫什么,工作在哪个名字空间下,有没有用到一些存储。这些都是pod实例化资源对象需要关注的属性。而这些属性是通过什么告诉集群的呢?资源清单,下面就来研究什么是资源清单。
一、什么是资源清单
k8s一般都是通过定义资源清单的方式去创建资源,资源清单等价于剧本,写好了每一步应该如何去做。
在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的 对象 (例如:pod),这样的yaml文件,我们一般称为资源清单。
其实资源清单,就是用来描述一个资源变成一个实例的过程。
查看资源有那些资源清单属性,使用以下命令:
kubectl explain pod
查看属性说明,使用以下命令
kubectl explain pod.apiVersion
资源清单,在后面将是我们的重点,写资源清单就要了解资源清单的结构。
1、 资源清单的格式
apiVersion: group/apiversion #如果没有给定group名称,那么默认为core,可以使用kubectl api-versions命令获取当前k8s版本上所有的api-version版本信息(每个版本可能不同)
kind: #资源类别
metadata: #资源元数据
name:
namespace:
lables:
annotations: #主要目的是方便用户阅读查找
spec: #期望的状态(disired state)
status: #当前状态,本字段由Kubernetes自身维护,用户不能去定义
配置清单主要有5个一级字段,其中status用户不能定义,有k8s维护。
1)apiVersion:
指的是当前应该去哪个目录下找对应的功能。这个值由谁决定的呢?apiVersion的值由kind决定。kind是资源类别。假设现在要创建一个map,如果资源类别kind是pod,那么创建的是一个map的pod;如果资源类型是service,那么就创建一个map的service。我们的要求是一样的,都是创建map,但类型不同,结果也是不同的。apiVersion是通过kind反推出来的。我需要先知道kind类别,才能知道对应的接口。不同的kind类型的接口在不同的接口文件夹下都定义好了,路径也都定义好了。
那么,我们怎么知道哪一个类别的资源应该在哪个目录下去创建呢?我们可以通过命令搜索
kubectl explain pod
这里的kind类型是Pod,apiVersion是v1
查询apiVersion有哪些组合的值可以天呢?
kubectl api-versions
这里列出了所有的apiVersion的可用组合,最后一个v1就是上面pod所在的位置。
2) kind :
kind表示资源的类型,如果是pod,就写pod;如果是RC就写RC。官方建议,kind应该定义全称,而不是缩写。
我们都知道缩写RS,RC,但是如果我们不知道全拼怎么写怎么办呢?
kubectl explain rc
通过命令,我们可以查到全拼。
3)metadata
metadata 元数据,一个资源对象的元数据都有哪些呢?我们可以通过命令查看
kubectl explain pod
这个命令列出了pod需要的5个关键属性的内容。
如果想要看元数据,可以使用如下命令
kubectl explain pod.metadata
这个命令会列出pod的所有的元数据信息。
\