Kubernetes编程—— 使用自定义资源 —— 介绍自定义资源(Custom Resource,CR)
介绍自定义资源(Custom Resource,CR)
自定义资源(Custom Resource,CR),它是整个 Kubernetes 生态系统中最核心的扩展机制。
定义资源可以用作系统内部使用的对象,仅仅对它进行声明式定义,而不关联控制器逻辑,用不保存少量配置信息。但是自定义资源也可以成为很多复杂 Kubernetes 项目的核心,用于提供原生 Kubernetes API 体验。这类服务的例子有 Istio、Linker2.0 和 AWS App Mesh,它们的核心都是自定义资源。
我理解意思是说: 在Kubernetes中,资源是集群内部使用的对象,可以通过定义和声明式配置的方式来描述。Kubernetes提供了许多内置资源,如Pod、Service、Deployment等。这些内置资源由Kubernetes控制器进行管理和控制。
然而,有时内置资源无法满足特定的需求,而在Kubernetes中引入自定义资源(Custom Resource)就显得非常有用。自定义资源允许用户定义和创建自己的资源类型,扩展Kubernetes API以适应特定的应用程序或领域需求。
自定义资源可以由用户创建和定义,但不一定需要关联控制器逻辑。这意味着用户可以使用自定义资源来进行简单的配置声明,而无需开发额外的控制器来处理其逻辑。这对于一些简单应用或快速原型开发来说非常方便,用户只需定义资源类型和其规范,Kubernetes会自动完成对其的创建和生命周期管理。
另一方面,自定义资源也可以成为复杂项目的核心,并用于提供原生Kubernetes API体验。通过定义与内置资源类似的CRD(Custom Resource Definition),用户可以创建自己的资源类型,并为其编写控制器逻辑。这使得用户可以通过Kubernetes API以相同的方式管理自定义资源和内置资源,享受到Kubernetes的扩展性和强大功能。
自定义资源可以为Kubernetes提供更高级别的抽象,使得用户能够用更符合其业务逻辑的方式描述和管理资源。它们为开发人员提供了一种扩展Kubernetes的方法,以适应各种不同的应用程序和场景需求。
所谓自定义资源定义(CustomeResourceDefinition,CRD)其本身也是一种 Kubernetes 资源,用于描述可以在当前集群中使用的自定义资源。
我理解意思是说: 我们举个最简单的自定义资源例子,一个名叫 "Book" 的自定义资源
首先,需要创建一个名为 "MyBook" 的自定义资源定义(Custom Resource Definition,CRD)对象,指定自定义资源的规范。以下是一个示例的CRD对象定义文件:
apiVersion: apiextensions.k8s.io/v1 // 指定了 CRD 的 API 版本。 kind: CustomResourceDefinition // 表示这是一个自定义资源定义对象。 metadata: name: books.example.com // 指定了CRD的名称为"books.example.com"。 spec: group: example.com // 指定了自定义资源所属的组为"example.com"。 versions: // 定义了自定义资源的版本"v1"。 - name: v1 served: true // "served"表示该版本是否被提供服务。 storage: true // "storage"表示该版本是否将数据存储到持久化存储中。 scope: Namespaced // 定义了自定义资源的作用域为"Namespace"级别,即在命名空间内使用。 names: // 指定了自定义资源的名称相关配置。 plural: books // "plural"表示复数形式的资源名为"books"。 singular: book // "singular"表示单数形式的资源名为"book"。 kind: Book // "kind"表示资源在Kubernetes中的种类为"Book"。 shortNames: // "shortNames"为资源的简称。 - bk
然后,使用该CRD定义创建一个名为"MyBook"的自定义资源对象。以下是一个示例的MyBook自定义资源对象:
apiVersion: example.com/v1 kind: Book metadata: name: introduction-to-kubernetes spec: title: Introduction to Kubernetes author: John Doe price: 19.99