我的 kubernetes 集群中已经定义了一些 CRD。
kubectl
可以很好地创建/更新/删除资源。
当我尝试使用程序进行这些操作时,我通过搜索找到的方法是使用以下工具生成代码:
https://github.com/kubernetes/code-generator
我想知道为什么kubectl
可以在不为 CRD 生成代码的情况下开箱即用。
是否需要生成代码才能添加或删除 CRD 资源?
谢谢!
我的 kubernetes 集群中已经定义了一些 CRD。
kubectl
可以很好地创建/更新/删除资源。
当我尝试使用程序进行这些操作时,我通过搜索找到的方法是使用以下工具生成代码:
https://github.com/kubernetes/code-generator
我想知道为什么kubectl
可以在不为 CRD 生成代码的情况下开箱即用。
是否需要生成代码才能添加或删除 CRD 资源?
谢谢!
首先让我们了解一下 CRD 是什么。
CustomResourceDefinition API 资源允许您定义自定义资源。 定义 CRD 对象会创建一个具有您指定的名称和架构的新自定义资源。Kubernetes API 提供并处理您的自定义资源的存储。CRD 对象的名称必须是有效的 DNS 子域名。
这使您无需编写自己的 API 服务器来处理自定义资源,但实现的通用性意味着您的灵活性低于 API 服务器聚合。
为什么要创建自定义资源:
资源 是 Kubernetes API中的 一个端点, 用于存储某种 API 对象 的集合。例如,内置的 pods 资源包含 Pod 对象的集合。
自 定义资源 是 Kubernetes API 的扩展,在默认 Kubernetes 安装中不一定可用。它表示对特定 Kubernetes 安装的自定义。但是,现在许多核心 Kubernetes 功能都是使用自定义资源构建的,这使得 Kubernetes 更加模块化。
自定义资源可以通过动态注册在正在运行的集群中出现和消失,并且集群管理员可以独立于集群本身更新自定义资源。安装自定义资源后,用户可以使用 kubectl创建和访问其对象,就像对 Pods等内置资源所做的那样。
因此,要回答您的问题,如果您需要 Kubernetes 中缺少的功能,您需要使用 CRD 自己创建它。没有它,集群将不知道您想要什么以及如何获得它。
如果您正在寻找 Kubernetes Client-go 的使用示例,您可以在官方GitHub Client-go/examples 上找到它们