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    
posted @ 2023-06-30 14:27  左扬  阅读(137)  评论(0编辑  收藏  举报
levels of contents