@@ -4,332 +4,85 @@ weight: 4
4
4
description : Get started with Crossplane.
5
5
---
6
6
7
- Crossplane connects your Kubernetes cluster to external,
8
- non-Kubernetes resources, and allows platform teams to build custom Kubernetes
9
- APIs to consume those resources.
7
+ Crossplane has three major components:
10
8
11
- <!-- vale gitlab.SentenceLength = NO -->
12
- Crossplane creates Kubernetes
13
- [ Custom Resource Definitions] ( https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/ )
14
- (` CRDs ` ) to represent the external resources as native
15
- [ Kubernetes objects] ( https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/ ) .
16
- As native Kubernetes objects, you can use standard commands like ` kubectl create `
17
- and ` kubectl describe ` . The full
18
- [ Kubernetes API] ( https://kubernetes.io/docs/reference/using-api/ ) is available
19
- for every Crossplane resource.
20
- <!-- vale gitlab.SentenceLength = YES -->
9
+ * [ Composition] ( #composition )
10
+ * [ Managed resources] ( #managed-resources )
11
+ * [ Package manager] ( #package-manager )
21
12
22
- Crossplane also acts as a
23
- [ Kubernetes Controller] ( https://kubernetes.io/docs/concepts/architecture/controller/ )
24
- to watch the state of the external resources and provide state enforcement. If
25
- something modifies or deletes a resource outside of Kubernetes, Crossplane reverses
26
- the change or recreates the deleted resource.
13
+ You can use all the components to build your control plane, or pick only the
14
+ ones you need.
27
15
28
- {{<img src =" /media/crossplane-intro-diagram.png " alt =" Diagram showing a user communicating to Kubernetes. Crossplane connected to Kubernetes and Crossplane communicating with AWS, Azure and GCP " align =" center " >}}
29
- With Crossplane installed in a Kubernetes cluster, users only communicate with
30
- Kubernetes. Crossplane manages the communication to external resources like AWS,
31
- Azure or Google Cloud.
16
+ # Composition
32
17
33
- Crossplane also allows the creation of custom Kubernetes APIs. Platform teams can
34
- combine external resources and simplify or customize the APIs presented to the
35
- platform consumers.
18
+ Composition lets you build custom APIs to control your cloud-native software.
36
19
37
- ## Crossplane components overview
38
- This table provides a summary of Crossplane components and their roles.
20
+ Crossplane extends Kubernetes. You build your custom APIs by using Crossplane to
21
+ extend Kubernetes with new custom resources.
39
22
40
- {{< table "table table-hover table-sm">}}
41
- | Component | Abbreviation | Scope | Summary |
42
- | --- | --- | --- | ---- |
43
- | [ Provider] ({{<ref "#providers">}}) | | cluster | Creates new Kubernetes Custom Resource Definitions for an external service. |
44
- | [ ProviderConfig] ({{<ref "#provider-configurations">}}) | ` PC ` | cluster | Applies settings for a _ Provider_ . |
45
- | [ Managed Resource] ({{<ref "#managed-resources">}}) | ` MR ` | cluster | A Provider resource created and managed by Crossplane inside the Kubernetes cluster. |
46
- | [ Composition] ({{<ref "#compositions">}}) | | cluster | A template for creating multiple _ managed resources_ at once. |
47
- | [ Composite Resources] ({{<ref "#composite-resources" >}}) | ` XR ` | cluster | Uses a _ Composition_ template to create multiple _ managed resources_ as a single Kubernetes object. |
48
- | [ CompositeResourceDefinitions] ({{<ref "#composite-resource-definitions" >}}) | ` XRD ` | cluster | Defines the API schema for _ Composite Resources_ |
49
- {{< /table >}}
23
+ To extend Kubernetes without using Crossplane you have to write a Kubernetes
24
+ controller. The controller is the software that reacts when a user calls the
25
+ custom resource API.
50
26
51
- ## The Crossplane Pod
52
- When installed in a Kubernetes cluster Crossplane creates an initial set of
53
- Custom Resource Definitions (` CRDs ` ) of the core Crossplane components.
27
+ With Crossplane you don't have to write a controller. Instead you configure a
28
+ pipeline of functions. The functions tell Crossplane what to do when a user
29
+ calls the custom resource API. You can configure the functions using common
30
+ languages, including YAML, [ KCL] ( https://www.kcl-lang.io ) , and
31
+ [ Python] ( https://python.org ) .
54
32
55
- {{< expand "View the initial Crossplane CRDs" >}}
56
- After installing Crossplane use ` kubectl get crds ` to view the Crossplane
57
- installed CRDs.
33
+ You can use composition together with [ managed resources] ( #managed-resources ) to
34
+ build new custom resource APIs powered by managed resources.
58
35
59
- ``` shell
60
- ❯ kubectl get crd
61
- NAME
62
- compositeresourcedefinitions.apiextensions.crossplane.io
63
- compositionrevisions.apiextensions.crossplane.io
64
- compositions.apiextensions.crossplane.io
65
- configurationrevisions.pkg.crossplane.io
66
- configurations.pkg.crossplane.io
67
- deploymentruntimeconfigs.pkg.crossplane.io
68
- environmentconfigs.apiextensions.crossplane.io
69
- functionrevisions.pkg.crossplane.io
70
- functions.pkg.crossplane.io
71
- locks.pkg.crossplane.io
72
- providerrevisions.pkg.crossplane.io
73
- providers.pkg.crossplane.io
74
- storeconfigs.secrets.crossplane.io
75
- usages.apiextensions.crossplane.io
76
- ```
77
- {{< /expand >}}
36
+ Follow [ Get Started with Composition] ({{<ref "./get-started-with-composition">}})
37
+ to see how composition works.
78
38
79
- The following sections describe the functions of some of these CRDs.
39
+ {{<hint "tip">}}
40
+ Not familiar with Kubernetes custom resources and controllers?
80
41
81
- <!-- vale Google.Headings = NO -->
82
- <!-- allow "Providers" -->
83
- ## Providers
84
- <!-- vale Google.Headings = YES -->
85
- A Crossplane _ Provider_ creates a second set of CRDs that define how Crossplane
86
- connects to a non-Kubernetes service. Each external service relies on its own
87
- Provider. For example,
88
- [ AWS] ( https://github.com/crossplane-contrib/provider-upjet-aws ) ,
89
- [ Azure] ( https://github.com/crossplane-contrib/provider-upjet-azure )
90
- and [ GCP] ( https://github.com/crossplane-contrib/provider-upjet-gcp )
91
- are different providers for each cloud service.
42
+ Read the Kubernetes documentation on
43
+ [ custom resources] ( https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ )
44
+ and [ controllers] ( https://kubernetes.io/docs/concepts/architecture/controller/ ) .
92
45
93
- {{< hint "tip" >}}
94
- Most Providers are for cloud services but Crossplane can use a Provider to
95
- connect to any service with an API .
96
- {{< /hint >}}
46
+ Kubebuilder is a popular project for building Kubernetes controllers. Read the
47
+ [ Kubebuilder documentation ] ( https://book.kubebuilder.io ) to see what's
48
+ involved in writing a controller .
49
+ {{</hint >}}
97
50
98
- For example, an AWS Provider defines Kubernetes CRDs for AWS resources like EC2
99
- compute instances or S3 storage buckets.
51
+ # Managed resources
100
52
101
- The Provider defines the Kubernetes API definition for the external resource.
102
- For example,
103
- [ provider-upjet-aws] ( https://github.com/crossplane-contrib/provider-upjet-aws )
104
- defines a
105
- [ ` bucket ` ] ( https://github.com/crossplane-contrib/provider-upjet-aws/blob/release-1.20/package/crds/s3.aws.upbound.io_buckets.yaml )
106
- resource for creating and managing AWS S3 storage buckets.
53
+ Managed resources (MRs) are ready-made Kubernetes custom resources.
107
54
108
- In the ` bucket ` CRD is a
109
- [ ` spec.forProvider.region ` ] ( https://github.com/crossplane-contrib/provider-upjet-aws/blob/release-1.20/package/crds/s3.aws.upbound.io_buckets.yaml#L91 )
110
- value that defines which AWS region to deploy the bucket in .
55
+ Each MR extends Kubernetes with the ability to manage a new kind of resource.
56
+ For example there's an RDS instance MR that extends Kubernetes with the ability
57
+ to manage [ AWS RDS ] ( https://aws.amazon.com/rds/ ) instances .
111
58
112
- Crossplane's [ public package registries ] ( https://www.crossplane.io/registries ) contain a large
113
- collection of Crossplane Providers .
59
+ Crossplane has an extensive library of managed resources you can use to manage
60
+ almost any cloud provider, or cloud-native software .
114
61
115
- More providers are available in the [ Crossplane Contrib repository] ( https://github.com/crossplane-contrib/ ) .
62
+ You can use managed resources together with [ composition] ( #composition ) to build
63
+ new custom resource APIs powered by MRs.
116
64
117
- Providers are cluster scoped and available to all cluster namespaces.
65
+ Follow [ Get Started with Managed Resources] ({{<ref "./get-started-with-managed-resources">}})
66
+ to see how managed resources work.
118
67
119
- View all installed Providers with the command ` kubectl get providers ` .
68
+ {{<hint "note">}}
69
+ Only AWS managed resources support the Crossplane v2 preview.
120
70
121
- ## Provider configurations
122
- Providers have _ ProviderConfigs_ . _ ProviderConfigs_ configure settings
123
- related to the Provider like authentication or global defaults for the
124
- Provider.
71
+ <!-- vale gitlab.FutureTense = NO -->
72
+ Maintainers will update the managed resources for other systems including Azure,
73
+ GCP, Terraform, Helm, GitHub, etc to support Crossplane v2 soon.
74
+ <!-- vale gitlab.FutureTense = YES -->
75
+ {{</hint >}}
125
76
126
- The API endpoints for ProviderConfigs are unique to each Provider.
77
+ # Package manager
127
78
128
- _ ProviderConfigs_ are cluster scoped and available to all cluster namespaces.
79
+ The Crossplane package manager lets you install new managed resources and
80
+ composition functions.
129
81
130
- View all installed ProviderConfigs with the command ` kubectl get providerconfig ` .
82
+ You can also package any part of a control plane's configuration and install it
83
+ using the package manager. This allows you to deploy several control planes with
84
+ identical capabilities - for example one control planes per region or per
85
+ service.
131
86
132
- ## Managed resources
133
- A Provider's CRDs map to individual _ resources_ inside the provider. When
134
- Crossplane creates and monitors a resource it's a _ Managed Resource_ .
135
-
136
- Using a Provider's CRD creates a unique _ Managed Resource_ . For example,
137
- using the Provider AWS's ` bucket ` CRD, Crossplane creates a ` bucket ` _ Managed Resource_
138
- inside the Kubernetes cluster that's connected to an AWS S3 storage bucket.
139
-
140
- The Crossplane controller provides state enforcement for _ Managed Resources_ .
141
- Crossplane enforces the settings and existence of _ Managed Resources_ . This
142
- "Controller Pattern" is like how the Kubernetes
143
- [ kube-controller-manager] ( https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/ )
144
- enforces state for pods.
145
-
146
- _ Managed Resources_ are cluster scoped and available to all cluster namespaces.
147
-
148
- Use ` kubectl get managed ` to view all _ managed resources_ .
149
- {{<hint "warning" >}}
150
- The ` kubectl get managed ` creates a lot of Kubernetes API queries.
151
- Both the ` kubectl ` client and kube-apiserver throttle the API queries.
152
-
153
- Depending on the size of the API server and number of managed resources, this
154
- command may take minutes to return or may timeout.
155
-
156
- For more information, read
157
- [ Kubernetes issue #111880 ] ( https://github.com/kubernetes/kubernetes/issues/111880 )
158
- and
159
- [ Crossplane issue #3459 ] ( https://github.com/crossplane/crossplane/issues/3459 ) .
160
- {{< /hint >}}
161
-
162
- ## Compositions
163
-
164
- A _ Composition_ is a template for a collection of _ managed resource_ . _ Compositions_
165
- allow platform teams to define a set of _ managed resources_ as a
166
- single object.
167
-
168
- For example, a compute _ managed resource_ may require the creation of a storage
169
- resource and a virtual network as well. A single _ Composition_ can define all three
170
- resources in a single _ Composition_ object.
171
-
172
- Using _ Compositions_ simplifies the deployment of infrastructure made up of
173
- multiple _ managed resources_ . _ Compositions_ also enforce standards and settings
174
- across deployments.
175
-
176
- Platform teams can define fixed or default settings for each _ managed resource_ inside a
177
- _ Composition_ or define fields and settings that users may change.
178
-
179
- Using the previous example, the platform team may set a compute resource size
180
- and virtual network settings. But the platform team allows users to define the
181
- storage resource size.
182
-
183
- Creating a _ Composition_ Crossplane doesn't create any managed
184
- resources. The _ Composition_ is only a template for a collection of _ managed
185
- resources_ and their settings. A _ Composite Resource_ creates the specific resources.
186
-
187
- {{< hint "note" >}}
188
- The [ _ Composite Resources_ ] ({{<ref "#composite-resources">}}) section discusses
189
- _ Composite Resources_ .
190
- {{< /hint >}}
191
-
192
- _ Compositions_ are cluster scoped and available to all cluster namespaces.
193
-
194
- Use ` kubectl get compositions ` to view all _ compositions_ .
195
-
196
-
197
- ## Composite Resources
198
-
199
- A _ Composite Resource_ (` XR ` ) is a set of provisioned _ managed resources_ . A
200
- _ Composite Resource_ uses the template defined by a _ Composition_ and applies
201
- any user defined settings.
202
-
203
- Multiple unique _ Composite Resource_ objects can use the same _ Composition_ . For
204
- example, a _ Composition_ template can create a compute, storage and networking
205
- set of _ managed resources_ . Crossplane uses the same _ Composition_ template
206
- every time a user requests this set of resources.
207
-
208
- If a _ Composition_ allows a user to define resource settings, users apply them
209
- in a _ Composite Resource_ .
210
-
211
- {{< hint "tip" >}}
212
- _ Compositions_ are templates for a set of _ managed resources_ .
213
- _ Composite Resources_ fill out the template and create _ managed resources_ .
214
-
215
- Deleting a _ Composite Resource_ deletes all the _ managed resources_ it created.
216
- {{< /hint >}}
217
-
218
- _ Composite Resources_ are cluster scoped and available to all cluster namespaces.
219
-
220
- Use ` kubectl get composite ` to view all _ Composite Resources_ .
221
-
222
- ## Composite Resource Definitions
223
- _ Composite Resource Definitions_ (` XRDs ` ) create custom Kubernetes APIs used by
224
- _ Composite Resources_ .
225
-
226
- Platform teams define the custom APIs.
227
- These APIs can define specific values
228
- like storage space in gigabytes, generic settings like ` small ` or ` large ` ,
229
- deployment options like ` cloud ` or ` onprem ` . Crossplane doesn't limit the API definitions.
230
-
231
- The _ Composite Resource Definition's_ ` kind ` is from Crossplane.
232
- ``` yaml
233
- apiVersion : apiextensions.crossplane.io/v1
234
- kind : CompositeResourceDefinition
235
- ` ` `
236
-
237
- The ` spec` of a _Composite Resource Definition_ creates the `apiVersion`,
238
- ` kind` and `spec` of a _Composite Resource_.
239
-
240
- {{< hint "tip" >}}
241
- The _Composite Resource Definition_ defines the parameters for a _Composite
242
- Resource_.
243
- {{< /hint >}}
244
-
245
- A _Composite Resource Definition_ has four main `spec` parameters :
246
- * A {{<hover label="specGroup" line="3" >}}group{{< /hover >}}
247
- to define the
248
- {{< hover label="xr2" line="2" >}}apiVersion{{</hover >}}
249
- in a _Composite Resource_ .
250
- * The {{< hover label="specGroup" line="7" >}}versions.name{{</hover >}}
251
- that defines the version used in a _Composite Resource_.
252
- * A {{< hover label="specGroup" line="5" >}}names.kind{{</hover >}}
253
- to define the _Composite Resource_
254
- {{< hover label="xr2" line="3" >}}kind{{</hover>}}.
255
- * A {{< hover label="specGroup" line="8" >}}versions.schema{{</hover>}} section
256
- to define the _Composite Resource_ {{<hover label="xr2" line="6" >}}spec{{</hover >}}.
257
-
258
- ` ` ` yaml {label="specGroup"}
259
- # Composite Resource Definition (XRD)
260
- spec:
261
- group: test.example.org
262
- names:
263
- kind: MyComputeResource
264
- versions:
265
- - name: v1alpha1
266
- schema:
267
- # Removed for brevity
268
- ` ` `
269
-
270
- A _Composite Resource_ based on this _Composite Resource Definition_ looks like this :
271
-
272
- ` ` ` yaml {label="xr2"}
273
- # Composite Resource (XR)
274
- apiVersion: test.example.org/v1alpha1
275
- kind: MyComputeResource
276
- metadata:
277
- name: my-resource
278
- spec:
279
- storage: "large"
280
- ` ` `
281
-
282
- A _Composite Resource Definition_ {{< hover label="specGroup" line="8" >}}schema{{</hover >}} defines the _Composite Resource_
283
- {{<hover label="xr2" line="6" >}}spec{{</hover >}} parameters.
284
-
285
- These parameters are the new, custom APIs, that developers can use.
286
-
287
- For example, creating a compute _managed resource_ requires knowledge of a
288
- cloud provider's compute class names like AWS's `m6in.large` or GCP's
289
- ` e2-standard-2` .
290
-
291
- A _Composite Resource Definition_ can limit the choices to `small` or `large`.
292
- A _Composite Resource_ uses those options and the _Composition_ maps them
293
- to specific cloud provider settings.
294
-
295
- The following _Composite Resource Definition_ defines a {{<hover label="specVersions" line="17" >}}storage{{< /hover >}}
296
- parameter. The storage is a
297
- {{<hover label="specVersions" line="18">}}string{{< /hover >}}
298
- and the OpenAPI
299
- {{<hover label="specVersions" line="19" >}}oneOf{{< /hover >}} requires the
300
- options to be either {{<hover label="specVersions" line="20" >}}small{{< /hover >}}
301
- or {{<hover label="specVersions" line="21" >}}large{{< /hover >}}.
302
-
303
- ` ` ` yaml {label="specVersions"}
304
- # Composite Resource Definition (XRD)
305
- spec:
306
- group: test.example.org
307
- names:
308
- kind: MyComputeResource
309
- versions:
310
- - name: v1alpha1
311
- served: true
312
- referenceable: true
313
- schema:
314
- openAPIV3Schema:
315
- type: object
316
- properties:
317
- spec:
318
- type: object
319
- properties:
320
- storage:
321
- type: string
322
- oneOf:
323
- - pattern: '^small$'
324
- - pattern: '^large$'
325
- required:
326
- - storage
327
- ` ` `
328
-
329
- A _Composite Resource Definition_ can define a wide variety of settings and options.
330
-
331
- Creating a _Composite Resource Definition_ enables the creation of _Composite
332
- Resources_.
333
-
334
- # # Next steps
335
- Build your own Crossplane platform using one of the quickstart guides.
87
+ Read about Crossplane packages in [ Concepts] ({{<ref "../concepts/packages">}})
88
+ to learn about the package manager.
0 commit comments