K8s开发-API详解
K8s开发-API详解
基于K8s v1.29
资源对象
一个K8s资源对象描述一般是kind、apiVersion、metadata、spec和status五个部分
资源对象的类型
资源对象的类型用Kind属性表示,总体分为3个类型:
- 对象(Object)、代表系统中永久资源实体,比如Pod、RC
- 列表(List):资源对象的合集
- 简单类别(Simple):作用于资源对象或非持久辅助实体的特定操作,比如Status、Scale、ListOptions等
资源对象的元数据
metadata是资源对象的元数据定义,由一组属性来定义,在K8s中,每个资源对象都必须包含以下元数据属性:
- namespec:对象所属的命名空间,如果不指定,则昔日会将对象置于名为default中
- name:对象的名称、在一个ns下,唯一性
- uid:系统为每个对象生成唯一的ID,符合RFC4122
- labels:自定义标签
- annotations:用户自定义注解,被K8s内部进程或者外部工具使用
- resourceVersion:用于识别资源内部斑斑的字符串,在Watch操作,可以避免Get和下一次Watch不一致,用于区别资源是否改变
- createTimestamp:创建系统对象的时间戳,符合RFC3339
- deletionTimestamp:删除系统对象的时间戳,符合RFC3339
- selfLink:通过API访问资源自身的URL
资源对象的版本
K8s一直在发展,为来兼容API,所以设计来APIVersion
资源对象的主体定义
对资源对象进行详细描述主体部分都是在spec给出,这部分内容会被K8s完整保存到etcd
资源对象的状态
status记录对象在系统中的当前状态信息
Pod的status的主要信息包含conditions、containerStatus、hostIP、phase、podIP、startTime等,
- phase:描述对象所处生命周期,典型值包含Pending、Running、Active或Terminated
- condition:表示条件,由条件类型和状态值组成,条件类型可能包含Pod Scheduled、Initialized、Ready、ContainersReady等
K8sAPI详解
API分组管理
K8s API并不是简单以资源对象机械能管理,而是以group/version的方式对资源进行管理
K8s 的API Group的总体分为以下俩组
核心组(Core Group):作为K8s的核心资源组,比如apiVersion:v1
拓展组API,除来核心组之外的APIGroup,比如batch/v1
常见的一些API Group说明:
- app/v1:最常见的APi Group,其中包含许多核心资源对象
- batch/v1:包含批处理
通过kubectl api-resources
可以查看当前集群的API Group和资源对象 列表
API 版本号通常描述API的成熟阶段:
- v1表示GA稳定阶段
- v1beta3表示Beta版本(预发布版本)
- V1aplpha1表示实验性版本
API标准
API资源使用REST模式,对资源对象的操作方法
GET/<资源名复数格式>:获取某一类型的资源列表,比如GET/pods返回一个Pod资源列表
POST/<资源名复数格式>:创建一个资源,该资源来资源用户提供的JSON对象
GET/<资源名复数格式>/<名称>:通过给出的名称获得单个资源
DELETE/<资源名复数格式>/<名称>:通过给出的名称来删除单个资源,在删除选项可以指定优雅删除的时间
PUT/<资源名复数格式>/<名称>:通过给出的资源名和客户端提供的JSON对象来更新或创建资源
PATCH/<资源名复数格式>/<名称>:选择修改资源详细制定的域
支持PATCH的类型:
- JSON Patch,Content-Type:application/json-patch+json
- Merge Patch,Content-Type:application/merge-json-patch+json
- Strategic Merge Patch,Content-Type:application/strategic-json-patch+json
K8s API调用和调试
部署swagger-editot
1 | apiVersion: apps/v1 |