×

本指南介绍开发人员如何管理来自自定义资源定义 (CRD) 的自定义资源 (CR)。

自定义资源定义

在 Kubernetes API 中,资源是一个端点,用于存储特定类型的一组 API 对象。例如,内置的Pods资源包含一组Pod对象。

自定义资源定义 (CRD) 对象定义了一种新的、唯一的对象类型(称为kind)在集群中,并允许 Kubernetes API 服务器处理其整个生命周期。

自定义资源 (CR) 对象是从已由集群管理员添加到集群的 CRD 创建的,允许所有集群用户将新的资源类型添加到项目中。

特别是,操作符通过将其与任何所需的 RBAC 策略和其他特定于软件的逻辑一起打包来使用 CRD。集群管理员还可以手动将 CRD 添加到集群中,而不依赖于操作符的生命周期,从而使所有用户都可以使用它们。

虽然只有集群管理员才能创建 CRD,但如果开发人员具有对其的读写权限,他们可以从现有的 CRD 创建 CR。

从文件创建自定义资源

将自定义资源定义 (CRD) 添加到集群后,可以使用 CLI 从包含 CR 规范的文件创建自定义资源 (CR)。

先决条件
  • 由集群管理员添加到集群的CRD。

步骤
  1. 为 CR 创建一个 YAML 文件。在下面的示例定义中,cronSpecimage 自定义字段设置在Kind: CronTab的 CR 中。Kind来自 CRD 对象的spec.kind字段

    CR 的示例 YAML 文件
    apiVersion: "stable.example.com/v1" (1)
    kind: CronTab (2)
    metadata:
      name: my-new-cron-object (3)
      finalizers: (4)
      - finalizer.stable.example.com
    spec: (5)
      cronSpec: "* * * * /5"
      image: my-awesome-cron-image
    1 从 CRD 指定组名和 API 版本(名称/版本)。
    2 在 CRD 中指定类型。
    3 为对象指定名称。
    4 指定对象的终结器(如有)。终结器允许控制器实现必须在对象可以被删除之前完成的条件。
    5 指定特定于对象类型的条件。
  2. 创建文件后,创建对象

    $ oc create -f <file_name>.yaml

检查自定义资源

您可以使用 CLI 检查集群中存在的自定义资源 (CR) 对象。

先决条件
  • CR 对象存在于您有权访问的命名空间中。

步骤
  1. 要获取有关特定 CR 类型的信息,请运行

    $ oc get <kind>

    例如

    $ oc get crontab
    示例输出
    NAME                 KIND
    my-new-cron-object   CronTab.v1.stable.example.com

    资源名称不区分大小写,您可以使用CRD中定义的单数或复数形式,以及任何简称。例如

    $ oc get crontabs
    $ oc get crontab
    $ oc get ct
  2. 您还可以查看CR的原始YAML数据。

    $ oc get <kind> -o yaml

    例如

    $ oc get ct -o yaml
    示例输出
    apiVersion: v1
    items:
    - apiVersion: stable.example.com/v1
      kind: CronTab
      metadata:
        clusterName: ""
        creationTimestamp: 2017-05-31T12:56:35Z
        deletionGracePeriodSeconds: null
        deletionTimestamp: null
        name: my-new-cron-object
        namespace: default
        resourceVersion: "285"
        selfLink: /apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-object
        uid: 9423255b-4600-11e7-af6a-28d2447dc82b
      spec:
        cronSpec: '* * * * /5' (1)
        image: my-awesome-cron-image (1)
    
    1 将显示您用于创建对象的YAML中的自定义数据。