# kubernetes源码-资源定义相关汇总


资源的定义相关汇总.

<!--more-->

## 资源定义

> 日常开发或者学习源码的过程中，需要经常翻阅 kubernetes 资源的相关定义文件，来回找很麻烦，所以整理了一下，记录下来方便日后快速查找用。

### 资源的内部版本

> 诸如 pod，deployment 资源 api 的定义，用 yaml 或者 Json 文件创建资源对象时，会转换成这里的内部版本定义。

**有组**：`kubernetes\pkg\apis\<group>\`

**无组**：`kubernetes\pkg\apis\core\types.go`

### 资源的外部版本

> 定义资源的数据结构，使用 yaml 或者 Json 文件创建资源对象时，所使用的是外部版本的资源对象（kubectl apply 的就是外部资源对象）。

**有组**：`kubernetes\staging\src\k8s.io\api\<group>\<version>\<resource file>`

**无组**：`kubernetes\staging\src\k8s.io\api\core\v1`

### 核心的数据结构

> Group，Version，Resource等核心的数据结构，其中包含了 kubernetes 集群中所有组件使用的通用核心数据结构，以及定义了资源的操作方法参数（DeleteOptions，ListOptions，GetOptions等）。

`kubernetes\staging\src\k8s.io\apimachinery\pkg\apis\meta\v1\types.go`

### 资源操作方法接口

> create，delete，deletecollection，get，list 的接口定义。

`kubernetes\staging\src\k8s.io\apiserver\pkg\registry\rest\rest.go`

### 资源操作方法

> 增删改查实际上都是针对存储的操作（create，delete，deletecollection，get，list）。

`kubernetes\staging\src\k8s.io\apiserver\pkg\registry\generic\registry\store.go`

### 定义控制器

> 定义 controller 。

`kubernetes\pkg\controller\`

## 常用资源

> kubernetes 内置资源全图，记录哪些组对应有哪些资源，方便日后查阅用。

### apps

- DaemonSet：在Pod资源对象的基础上提供守护进程的资源类型；

- RepliceSet：在Pod资源对象的基础上提供一组Pod副本的资源类型；

- Deployment：在Pod资源对象的基础上提供支持无状态服务的资源类型；

- Statefulment：在Pod资源对象的基础上提供支持有状态服务的资源类型；

### batch

- Job：提供一次性任务的资源类型；

- CronJob：提供定时任务的资源类型；

### core

- Event：提供Kubernetes集群事件管理的资源类型；

- LimitRange：为命名空间的每种资源对象设置资源(硬件资源)的使用限制；

- Namespace：提供资源对象所在命名空间的资源类型；

- Node：提供Kubernetes集群中管理工作节点的资源类型，每个节点都有一个唯一标识；

- PersistentVolume：提供PV存储的资源类型；

- PersistentVolumeClaim：提供PVC存储的资源类型；

- Pod：提供容器集合管理的资源类型；

- RepilcationController：在Pod资源对象的基础上提供副本数的保持不变的资源类型；

- Secret：提供存储密码、Token、密钥等敏感数据的资源类型；

- Service：提供负载均衡器为Pod资源对象的代理服务的资源类型；

### event

- Event：提供Kubernetes集群事件管理的资源类型；

### networking

- Ingress：提供Kubernetes集群外部访问集群内部服务管理的资源类型；

### node

- RuntimeClass：提供容器运行时功能的资源状态；

### policy

- Evictions：在Pod资源对象的基础上提供驱逐策略的资源类型；

- PodDisruptionBudget：提供限制同时Pod中断的数量，以保证集群的高可用性；

### scheduling

- PriorityClass：提供Pod资源对象优先级管理的资源类型；

## 结束

资源作为Kubernetes的核心名词，可以说在Kubernetes的体系中，将所有的实例都当作的资源；理解Kubernetes的数据结构可以对理解Kubernetes起到启发性的帮助。

