从零单排冲kubebuilder(二)

背景

总觉干什么事要把基础打好,尤其是k8s,概念多,杂,而且国内真的把这玩意玩的特别透彻的感觉人也不多,更多的还是使用层面。下面说一说几个关键词,这在后面会经常提起。

关键词

下面是我从k8s官网截取的官方术语,要好好记住下面的定义,因为这一块很乱,看了很多文章的叫法都不相同,采用官网的最为准确。

在这里插入图片描述

GET /api/v1/namespaces/test/pods
---
200 OK
Content-Type: application/json
{
  "kind": "PodList",
  "apiVersion": "v1",
  "metadata": {"resourceVersion":"10245"},
  "items": [...]
}
1资源类型

如上 GET /api/v1/namespaces/test/pods 中的 pods叫做资源类型

2资源类别

“kind”: “PodList”,中的PodList称为类别(种类)
因为一个资源类型里有多个类别,如pods资源类型里有 Pod、PodLIst两种类型,Pod代表单个,PodList代表集合。

3资源(对象)
apiVersion: batch/v2alpha1
kind: CronJob

比如pods资源类型的单个实例pod就是资源(对象),一个资源对象包括 资源组、资源版本、资源种类,那大白话说我们在写一个yaml文件时包含group、version、kind,这个东西apply -f之后就是一个资源对象。

当apply -f后发生了什么?

我们说一下当我们apply -f 一个yaml文件后是如何创建资源对象的?
你想创建资源对象的前提是你要先有这个资源类别(种类)。就好像你想new一个对象出来你要先有class,资源类别(种类)就是class,资源对象就是object

所以第一步是先找这个资源类型在不在,比如说我现在想创建一个CronJob资源对象
在这里插入图片描述

yaml文件如下

apiVersion: batch/v2alpha1
kind: CronJob

其中,group = bacth, version = v2alpha1, kind = CronJob,这个叫做GVK
你有没有想过一个问题,你只是提交了一个yaml文件,他怎么知道发送到哪个url呢?
要通过GVK生成一个url,通过RESTMappers实现,这个URL就是GVR,/apis/batch/v2alpha1/cronjobs.
此时yaml文件提交到了apiservier,apiserver开始匹配资源类别(种类)是否存在,先匹配Group,再匹配version,最后是resource

然后apiserver开始根据提交上来的yaml文件创建资源对象,group = bacth, version = v2alpha1, kind = CronJob,我们知道了GVK,现在想根据GVK创建实际的资源对象,资源类别(种类)实际上就是golang中的type,Scheme 存储了 GVK 和 Go type 的映射关系,所以根据GVK就能找到对应的go type。从而创建对象,
在这里插入图片描述
在这里插入图片描述

apiserver会把提交上来的yaml文件保存到ETCD
apiserver通过watch机制通知kube-scheduler
scheduler通过算法选择节点并告诉apiserver
apiserver将节点写到ETCD中
apiserver通知节点的kubelet组建
节点通过kubelet创建pod
kubelet将状态告诉apiserver
apiserver将状态写到ETCD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值