mirror of https://github.com/crossplane/docs.git
docs snapshot for crossplane version `v1.3`
This commit is contained in:
parent
ac66cc34bd
commit
5d5cf9863f
|
|
@ -0,0 +1,216 @@
|
||||||
|
---
|
||||||
|
title: Terminology
|
||||||
|
toc: true
|
||||||
|
weight: 51
|
||||||
|
indent: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Terminology
|
||||||
|
|
||||||
|
## A Note on Style
|
||||||
|
|
||||||
|
Each type of Kubernetes resource has a ‘Pascal case’ name - i.e. a title case
|
||||||
|
name with no spaces between each word. Examples include ‘DaemonSet’ and
|
||||||
|
‘PersistentVolumeClaim’. Often these names are written using fixed width fonts
|
||||||
|
to draw attention to the fact that they’re a concrete type of resource within
|
||||||
|
the API - e.g. `PersistentVolumeClaim`.
|
||||||
|
|
||||||
|
Crossplane follows this convention. We often use names like RDSInstance or
|
||||||
|
CompositeResourceDefinition when discussing Crossplane types. Crossplane also
|
||||||
|
has “classes of types” - i.e. concepts that aren’t a distinct type of API
|
||||||
|
resource, but rather describe a group of conceptually similar types. For example
|
||||||
|
there is no ManagedResource type in Crossplane - instead types like RDSInstance
|
||||||
|
and GKECluster are said to be “a managed resource”.
|
||||||
|
|
||||||
|
Use your discretion as to whether you use pascal case when writing about a
|
||||||
|
distinct type - e.g. “RDS Instance” and “RDSInstance” are both fine. The pascal
|
||||||
|
case form makes more sense in contexts like documentation where you’re referring
|
||||||
|
to Crossplane’s RDSInstance managed resource rather than the general concept of
|
||||||
|
“an RDS instance”. Avoid using Pascal case when talking about classes of types -
|
||||||
|
i.e. always write “managed resource”, not “ManagedResource”. Each of the below
|
||||||
|
terms clarify whether they correspond to a single type, or a class of types.
|
||||||
|
|
||||||
|
### Why 'X'?
|
||||||
|
|
||||||
|
You may notice that Crossplane uses “X” as shorthand for “Crossplane” and/or
|
||||||
|
“Composite”. This is because some of our concepts - specifically Composite
|
||||||
|
Resources (XRs) and Composite Resource Definitions (XRDs) are modelled on
|
||||||
|
similar Kubernetes concepts - Custom Resources (CRs) and Custom Resource
|
||||||
|
Definitions (CRDs). We chose to abbreviate to (e.g.) XRD instead of CRD to avoid
|
||||||
|
confusion.
|
||||||
|
|
||||||
|
## Crossplane Terms
|
||||||
|
|
||||||
|
The below terms are commonly used in the Crossplane ecosystem.
|
||||||
|
|
||||||
|
### Composition
|
||||||
|
|
||||||
|
The term Composition has two related but distinct meanings.
|
||||||
|
|
||||||
|
“Composition” refers broadly to the feature of Crossplane that allows teams to
|
||||||
|
define their own opinionated platform APIs.
|
||||||
|
|
||||||
|
“A Composition” or `Composition` (fixed width) refers to the key Crossplane API
|
||||||
|
type that configures how Crossplane should compose resources into a higher level
|
||||||
|
“composite resource”. A Composition tells Crossplane “when someone creates
|
||||||
|
composite resource X, you should respond by creating resources Y and Z”.
|
||||||
|
|
||||||
|
The latter use of Composition represents a distinct Crossplane API type so
|
||||||
|
Pascal case and fixed width fonts are appropriate. We also tend to capitalise
|
||||||
|
the former use, representing the feature in general, but fixed width fonts are
|
||||||
|
not appropriate in that context.
|
||||||
|
|
||||||
|
> Folks accustomed to Terraform might think of a Composition as a Terraform
|
||||||
|
> module; the HCL code that describes how to take input variables and use them
|
||||||
|
> to create resources in some cloud API. Folks accustomed to Helm might think of
|
||||||
|
> a Composition as a Helm chart’s templates; the moustache templated YAML files
|
||||||
|
> that describe how to take Helm chart values and render Kubernetes resources.
|
||||||
|
|
||||||
|
### Composite Resource
|
||||||
|
|
||||||
|
A “Composite Resource” or “XR” is an API type defined using Crossplane. A
|
||||||
|
composite resource’s API type is arbitrary - dictated by the concept the author
|
||||||
|
wishes to expose as an API, for example an “AcmeCoDB”. A common convention is
|
||||||
|
for types to start with the word “Composite” - e.g. “CompositeAcmeCoDB”.
|
||||||
|
|
||||||
|
We talk about Crossplane being a tool teams can use to define their own
|
||||||
|
opinionated platform APIs. Those APIs are made up of composite resources; when
|
||||||
|
you are interacting with an API that your platform team has defined, you’re
|
||||||
|
interacting with composite resources.
|
||||||
|
|
||||||
|
A composite resource can be thought of as the interface to a Composition. It
|
||||||
|
provides the inputs a Composition uses to compose resources into a higher level
|
||||||
|
concept. In fact, the composite resource _is_ the high level concept.
|
||||||
|
|
||||||
|
The term “Composite Resource” refers to a class of types, so avoid using Pascal
|
||||||
|
case - “Composite Resource” not CompositeResource. Use pascal case when
|
||||||
|
referring to a distinct type of composite resource - e.g. a CompositeAcmeCoDB.
|
||||||
|
|
||||||
|
> Folks accustomed to Terraform might think of a composite resource as a
|
||||||
|
> `tfvars` file that supplies values for the variables a Terraform module uses
|
||||||
|
> to create resources in some cloud API. Folks accustomed to Helm might think of
|
||||||
|
> a composite resource as the `values.yaml` file that supplies inputs to a Helm
|
||||||
|
> chart’s templates.
|
||||||
|
|
||||||
|
### Composite Resource Claim
|
||||||
|
|
||||||
|
A “Composite Resource Claim”, “XRC”, or just “a claim” is also an API type
|
||||||
|
defined using Crossplane. Each type of claim corresponds to a type of composite
|
||||||
|
resource, and the pair have nearly identical schemas. Like composite resources,
|
||||||
|
the type of a claim is arbitrary.
|
||||||
|
|
||||||
|
We talk about Crossplane being a tool platform teams can use to offer
|
||||||
|
opinionated platform APIs to the application teams they support. The platform
|
||||||
|
team offers those APIs using claims. It helps to think of the claim as an
|
||||||
|
application team’s interface to a composite resource. You could also think of
|
||||||
|
claims as the public (app team) facing part of the opinionated platform API,
|
||||||
|
while composite resources are the private (platform team) facing part.
|
||||||
|
|
||||||
|
A common convention is for a claim to be of the same type as its corresponding
|
||||||
|
composite resource, but without the "Composite" prefix. So an "AcmeCoDB" would
|
||||||
|
be a type of claim, and a "CompositeAcmeCoDB" would be the corresponding type of
|
||||||
|
composite resource. This allows claim consumers to be relatively ignorant of
|
||||||
|
Crossplane and composition, and to instead simply think about managing “an
|
||||||
|
AcmeCo DB” while the platform team worries about the implementation details.
|
||||||
|
|
||||||
|
The term “Composite Resource Claim” refers to a class of types, so avoid using
|
||||||
|
Pascal case - “Composite Resource Claim” not CompositeResourceClaim. Use Pascal
|
||||||
|
case when referring to a distinct type of composite resource claim - e.g. an
|
||||||
|
AcmeCoDB.
|
||||||
|
|
||||||
|
> Claims map to the same concepts as described above under the composite
|
||||||
|
> resource heading; i.e. `tfvars` files and Helm `values.yaml` files. Imagine
|
||||||
|
> that some `tfvars` files and some `values.yaml` files were only accessible to
|
||||||
|
> the platform team while others were offered to application teams; that’s the
|
||||||
|
> difference between a composite resource and a claim.
|
||||||
|
|
||||||
|
### Composite Resource Definition
|
||||||
|
|
||||||
|
A “Composite Resource Definition” or “XRD” is the API type used to define new
|
||||||
|
types of composite resources and claims. Types of composite resources and types
|
||||||
|
of claims exist because they were defined into existence by an XRD. The XRD
|
||||||
|
configures Crossplane with support for the composite resources and claims that
|
||||||
|
make up a platform API.
|
||||||
|
|
||||||
|
XRDs are often conflated with composite resources (XRs) - try to avoid this.
|
||||||
|
When someone uses the platform API to create infrastructure they’re not creating
|
||||||
|
XRDs but rather creating composite resources (XRs). It may help to think of a
|
||||||
|
composite resource as a database entry, while an XRD is a database schema. For
|
||||||
|
those familiar with Kubernetes, the relationship is very similar to that between
|
||||||
|
a Custom Resource Definition (CRD) and a Custom Resource (CR).
|
||||||
|
|
||||||
|
A `CompositeResourceDefinition` is a distinct Crossplane API type, so Pascal
|
||||||
|
case and fixed width fonts are appropriate.
|
||||||
|
|
||||||
|
> There isn’t a direct analog to XRDs in the Helm ecosystem, but they’re a
|
||||||
|
> little bit like the variable blocks in a Terraform module that define which
|
||||||
|
> variables exist, whether those variables are strings or integers, whether
|
||||||
|
> they’re required or optional, etc.
|
||||||
|
|
||||||
|
### Managed Resource
|
||||||
|
|
||||||
|
Managed resources are granular, high fidelity Crossplane representations of a
|
||||||
|
resource in an external system - i.e. resources that are managed by Crossplane.
|
||||||
|
Managed resources are what Crossplane enables platform teams to compose into
|
||||||
|
higher level composite resources, forming an opinionated platform API. They're
|
||||||
|
the building blocks of Crossplane.
|
||||||
|
|
||||||
|
You’ll often hear three related terms used in the Crossplane ecosystem; composed
|
||||||
|
resource, managed resource, and external resource. While there are some subtle
|
||||||
|
contextual differences, these all broadly refer to the same thing. Take an
|
||||||
|
RDSInstance for example; it is a managed resource. A distinct resource within
|
||||||
|
the Crossplane API that represents an AWS RDS instance. When we make a
|
||||||
|
distinction between the managed resource and an external resource we’re simply
|
||||||
|
making the distinction between Crossplane’s representation of the thing (the
|
||||||
|
`RDSInstance` in the Kubernetes API), and the actual thing in whatever external
|
||||||
|
system Crossplane is orchestrating (the RDS instance in AWS's API). When we
|
||||||
|
mention composed resources, we mean a managed resource of which a composite
|
||||||
|
resource is composed.
|
||||||
|
|
||||||
|
Managed resources are a class of resource, so avoid using Pascal case - “managed
|
||||||
|
resource” not “ManagedResource”.
|
||||||
|
|
||||||
|
> Managed resources are similar to Terraform resource blocks, or a distinct
|
||||||
|
> Kubernetes resource within a Helm chart.
|
||||||
|
|
||||||
|
### Package
|
||||||
|
|
||||||
|
Packages extend Crossplane, either with support for new kinds of composite
|
||||||
|
resources and claims, or support for new kinds of managed resources. There are
|
||||||
|
two types of Crossplane package; configurations and providers.
|
||||||
|
|
||||||
|
A package is not a distinct type in the Crossplane API, but rather a class of
|
||||||
|
types. Therefore Pascal case is not appropriate.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
A configuration extends Crossplane by installing conceptually related groups of
|
||||||
|
XRDs and Compositions, as well as dependencies like providers or further
|
||||||
|
configurations. Put otherwise, it configures the opinionated platform API
|
||||||
|
that Crossplane exposes.
|
||||||
|
|
||||||
|
A `Configuration` is a distinct type in the Crossplane API, therefore Pascal
|
||||||
|
case and fixed width fonts are appropriate.
|
||||||
|
|
||||||
|
### Provider
|
||||||
|
|
||||||
|
A provider extends Crossplane by installing controllers for new kinds of managed
|
||||||
|
resources. Providers typically group conceptually related managed resources; for
|
||||||
|
example the AWS provider installs support for AWS managed resources like
|
||||||
|
RDSInstance and S3Bucket.
|
||||||
|
|
||||||
|
A `Provider` is a distinct type in the Crossplane API, therefore Pascal case and
|
||||||
|
fixed width fonts are appropriate. Note that each Provider package has its own
|
||||||
|
configuration type, called a `ProviderConfig`. Don’t confuse the two; the former
|
||||||
|
installs the provider while the latter specifies configuration that is relevant
|
||||||
|
to all of its managed resources.
|
||||||
|
|
||||||
|
> Providers are directly analogous to Terraform providers.
|
||||||
|
|
||||||
|
### Crossplane Resource Model
|
||||||
|
|
||||||
|
The Crossplane Resource Model or XRM is neither a distinct Crossplane API type,
|
||||||
|
or a class of types. Rather it represents the fact that Crossplane has a
|
||||||
|
consistent, opinionated API. The strict definition of the XRM is currently
|
||||||
|
somewhat vague, but it could broadly be interpreted as a catchall term referring
|
||||||
|
to all of the concepts mentioned on this page.
|
||||||
Loading…
Reference in New Issue