claims 将一组受管资源表示为一个命名空间内的单一 Kubernetes 对象。

用户在访问 CompositeResourceDefinition 中定义的自定义 API 时会创建 claims。

Tip
claims 类似于 [composite resources](https://crossplane.devops.gold/master/concepts/composite-resources/Claims 和复合资源的区别在于,crossplane 可以在一个 namespace 中创建 Claims,而复合资源是集群作用域的。

crossplane 有四个核心组件,用户通常会把它们混为一谈:

  • Composition - 用于定义如何创建资源的模板。
  • Composition Resource Definition (XRD) - 一种自定义 API 规范。
  • 复合资源 (XR) - 通过使用 Composition Resource Definition 中定义的自定义 API 创建。XRs 使用 Composition 模板来创建新的托管资源。
  • claims (XRC) - 本页面。与 Composition Resource 类似,但具有名称空间范围。

创建claim

创建claim需要一个 CompositionCompositeResourceDefinition (XRD)已经安装。

Note
XRD 必须 启用claim.

Composition 定义了要创建的资源集。 XRD 定义了用户为请求资源集而调用的自定义 API。

Crossplane组件关系图](/media/composition-how-it-works.svg)

例如,该 复合资源定义创建了一个 Composition 资源 API 端点xmydatabases.example.org并启用claim API 端点数据库.example.org

 1apiVersion: apiextensions.crossplane.io/v1
 2kind: CompositeResourceDefinition
 3metadata: 
 4  name: xmydatabases.example.org
 5spec:
 6  group: example.org
 7  names:
 8    kind: XMyDatabase
 9    plural: xmydatabases
10  claimNames:
11    kind: Database
12    plural: databases
13  # Removed for brevity

claim被引用 XRD 的种类API 端点来请求资源。

claim的 版本与 XRD 类型与 XRDclaim名称种类

1apiVersion: example.org/v1alpha1
2kind: database
3metadata:
4  name: my-claimed-database
5spec:
6  # Removed for brevity

当用户在 namespace 中创建一个 Composition 时,crossplane 也会创建一个复合资源。

被引用 kubectl describe来查看相关 Composition 资源。

资源参考 资源参考是为该claim创建的 Composition 资源 crossplane。

 1kubectl describe database.example.org/my-claimed-database
 2Name:         my-claimed-database
 3API Version:  example.org/v1alpha1
 4Kind:         database
 5Spec:
 6  Resource Ref:
 7    API Version:  example.org/v1alpha1
 8    Kind:         XMyDatabase
 9    Name:         my-claimed-database-rr4ll
10# Removed for brevity.

被引用 kubectl describe在 Composition 资源上查看claims Ref将复合资源与原始 claims 链接起来。

 1kubectl describe xmydatabase.example.org/my-claimed-database-rr4ll
 2Name:         my-claimed-database-rr4ll
 3API Version:  example.org/v1alpha1
 4Kind:         XMyDatabase
 5Spec:
 6  Claim Ref:
 7    API Version:  example.org/v1alpha1
 8    Kind:         database
 9    Name:         my-claimed-database
10    Namespace:    default
Note

Crossplane 支持直接创建复合资源。 Composition 允许为使用自定义 API 的用户提供名称空间范围和隔离。

如果您在 Kubernetes 部署中不使用 namespace,则不需要claim。

claim现有 Composition 资源

默认情况下,创建一个 Composition 会创建一个新的复合资源。 Claims 也可以链接到现有的复合资源。

claim现有复合资源的一个用例可能是资源调配缓慢。 复合资源可以预先调配,claim可以使用这些资源,而无需等待创建。

设置claim的 资源并匹配预先存在的 Composition 资源名称.

1apiVersion: example.org/v1alpha1
2kind: database
3metadata:
4  name: my-claimed-database
5spec:
6  resourceRef:
7    apiVersion: example.org/v1alpha1
8    kind: XMyDatabase
9    name: my-pre-created-xr

如果一个 claims 指定了一个资源则 crossplane 不会创建复合资源。

Note
所有 claims 都有一个资源编号。手动定义资源编号无需手动定义。资源的信息。

claim connection secrets

如果claim需要连接secret,claim必须定义一个writeConnectionSecretToRef对象。

写入writeConnectionSecretToRef对象定义了用于保存连接详细信息的 Kubernetes secret 对象的名称。

Note
crossplane 会在与 claim 相同的 namespace 中创建 secret 对象。

例如,将一个名为my-claim-secret 的新secret对象。被引用writeConnectionSecretToRefname: my-claim-secret.

1apiVersion: example.org/v1alpha1
2kind: database
3metadata:
4  name: my-claimed-database
5spec:
6  writeConnectionSecretToRef:
7    name: my-claim-secret

有关连接secret的更多信息,请阅读连接secret知识库文章.