k8s操作自定义资源

本文介绍了如何在 Kubernetes 中操作自定义资源,包括使用 dynamicClient 和 RESTClient,以及通过代码生成器如 kubebuilder、k8s.io/code-generator 和 operator-sdk 创建自定义控制器。code-generator 用于生成 API 相关代码,而 kubeBuilder 更加适合operator的开发需求,理解GVK和GVR的概念对于操作K8S资源至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何操作自定义资源?

client-go为每种K8S内置资源提供对应的clientset和informer。那如果我们要监听和操作⾃定义资源对象,应该如何做呢?这⾥我们有两种⽅式:

⽅式⼀:
使⽤client-go提供的dynamicClient来操作⾃定义资源对象,当然由于dynamicClient是基于RESTClient实现的,所以我们也可以使⽤RESTClient来达到同样的⽬的。
⽅式⼆:
使⽤代码生成器来帮助我们⽣成我们需要的代码,这样我们就可以像使⽤client-go为K8S内置资源对象提供的⽅式监听和操作⾃定义资源了。

总结:k8s操作内置资源可以使用client-go,而操作自定义资源则需要通过代码生成器生成需要的代码来操作自定义资源。

概述

k8s相关功能有许多代码生成器,operator方面常使用kubebuilder、k8s.io/code-generator,以及operator-sdk。而operator-sdk,简而言之,是在kubeBuilder的基础上扩展了功能,它底层还是调用kubeBuilder。通过代码生成器根据配置信息自动生成相关API代码。截至目前版本,前两款工具在生成的文件上有如下区别:

在这里插入图片描述总结:如果是制作完整的operator,那就2款产品一起用吧。

code-generator

code-generator是K8S官⽅提供的⼀组代码⽣成⼯具,它主要有两个应⽤场景:

为CRD编写⾃定义controller时,可以使⽤它来⽣成我们需要的versionedclient、informer、lister以及其他⼯具⽅法;

编写⾃定义APIServer时,可以⽤它来internal和versioned类型的转换defaulters、internal和versioned的clients和informers;

kubeBuilder

kubeBuilder相较于code-generator,在生成的代码框架上更满足于operator的需求,于是我们有必要先了解一下几个有关API的术语。在default命名空间中,一个HTTP路径为:/apis/batch/v1/namespaces/default/jobs,其中,batch为group,v1是version,jobs是resource,核心概念就出来了:

GV & GVK & GVR
GV:group & version
GVK:group & version & kind
GVR:group & version & resource

资源(resourse)总是从属于某个API组(group)的某个版本(version),也就称为GVR,同样,类型(kind)也从属于某个API组(group)的某个版本(version),称为GVK。根据GVK,k8s就能找到一个yaml所对应的资源类型,根据GVR,就能够找到对应的资源信息,于是,GVK/GVR也就成了k8s资源的坐标。

以上两种代码生成器将在接下来的文章进行介绍和实战。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值