From 3235c9fd3e87756eba715863f8b3445675adafeb Mon Sep 17 00:00:00 2001 From: Nic Cope Date: Thu, 7 Aug 2025 14:04:58 -0700 Subject: [PATCH] Update master to refer to v2, not preview. Signed-off-by: Nic Cope --- content/master/cli/_index.md | 2 +- .../composite-resource-definitions.md | 271 ++++++++++-------- .../composition/composition-revisions.md | 58 ++-- .../get-started-with-composition.md | 2 +- .../get-started-with-managed-resources.md | 14 +- content/master/get-started/install.md | 13 +- content/master/guides/upgrade-crossplane.md | 10 +- .../managed-resources/managed-resources.md | 9 +- content/master/whats-crossplane/_index.md | 6 +- content/master/whats-new/_index.md | 9 +- 10 files changed, 216 insertions(+), 178 deletions(-) diff --git a/content/master/cli/_index.md b/content/master/cli/_index.md index 7a7dd26ec..824e2be06 100644 --- a/content/master/cli/_index.md +++ b/content/master/cli/_index.md @@ -27,7 +27,7 @@ To download the latest version for your CPU architecture with the Crossplane install script. ```shell -curl -sL "https://raw.githubusercontent.com/crossplane/crossplane/main/install.sh" | XP_CHANNEL=preview sh +curl -sL "https://raw.githubusercontent.com/crossplane/crossplane/main/install.sh" | sh ``` [The script](https://raw.githubusercontent.com/crossplane/crossplane/main/install.sh) diff --git a/content/master/composition/composite-resource-definitions.md b/content/master/composition/composite-resource-definitions.md index b8231a94a..b76d2a8e8 100644 --- a/content/master/composition/composite-resource-definitions.md +++ b/content/master/composition/composite-resource-definitions.md @@ -4,7 +4,7 @@ weight: 20 description: "Composite Resource Definitions or XRDs define custom API schemas" --- -Composite resource definitions (`XRDs`) define the schema for a custom API. +Composite resource definitions (`XRDs`) define the schema for a custom API. Users create composite resources (`XRs`) using the API schema defined by an XRD. @@ -20,15 +20,15 @@ A [composite resource]({{}}) or XR is a custom API. You use two Crossplane types to create a new custom API: -* A Composite Resource Definition (XRD) - This page. Defines the XR's schema. +* A Composite Resource Definition (XRD) - This page. Defines the XR's schema. * A [Composition]({{}}) - Configures how the XR creates other resources. {{}} -Crossplane XRDs are like -[Kubernetes custom resource definitions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/). +Crossplane XRDs are like +[Kubernetes custom resource definitions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/). XRDs require fewer fields and add options related to Crossplane, like connection -secrets. +secrets. @@ -40,24 +40,26 @@ Creating a CompositeResourceDefinition consists of: * [Defining a custom API group](#xrd-groups). * [Defining a custom API name](#xrd-names). * [Defining a custom API schema and version](#xrd-versions). - +* [Setting the scope](#xrd-scope) (namespaced or cluster-scoped). + Optionally, CompositeResourceDefinitions also support: * [Setting composite resource defaults](#set-composite-resource-defaults). - + Composite resource definitions (`XRDs`) create new API endpoints inside a -Kubernetes cluster. +Kubernetes cluster. -Creating a new API requires defining an API -{{}}group{{}}, -{{}}name{{}} and -{{}}version{{}}. +Creating a new API requires defining an API +{{}}group{{}}, +{{}}name{{}} and +{{}}version{{}}. ```yaml {label="xrd1",copy-lines="none"} -apiVersion: apiextensions.crossplane.io/v1 +apiVersion: apiextensions.crossplane.io/v2 kind: CompositeResourceDefinition -metadata: +metadata: name: mydatabases.example.org spec: + scope: Namespaced group: example.org names: kind: XMyDatabase @@ -70,10 +72,10 @@ spec: After applying an XRD, Crossplane creates a new Kubernetes custom resource definition matching the defined API. -For example, the XRD -{{}}mydatabases.example.org{{}} -creates a custom resource definition -{{}}mydatabases.example.org{{}}. +For example, the XRD +{{}}mydatabases.example.org{{}} +creates a custom resource definition +{{}}mydatabases.example.org{{}}. ```shell {label="kubeapi",copy-lines="3"} kubectl api-resources @@ -85,9 +87,9 @@ mydatabases.example.org v1alpha1 true {{}} You can't change the XRD {{}}group{{}} or -{{}}names{{}}. +{{}}names{{}}. You must delete and -recreate the XRD to change the +recreate the XRD to change the {{}}group{{}} or {{}}names{{}}. {{}} @@ -102,9 +104,9 @@ Groups define a collection of related API endpoints. The `group` can be any value, but common convention is to map to a fully qualified domain name. -Many XRDs may use the same `group` to create a logical collection of APIs. +Many XRDs may use the same `group` to create a logical collection of APIs. -For example a `database` group may have a `relational` and `nosql` kinds. +For example a `database` group may have a `relational` and `nosql` kinds. @@ -112,33 +114,33 @@ For example a `database` group may have a `relational` and `nosql` kinds. -The `names` field defines how to refer to this specific XRD. -The required name fields are: +The `names` field defines how to refer to this specific XRD. +The required name fields are: * `kind` - the `kind` value to use when calling this API. The kind is [UpperCamelCased](https://kubernetes.io/docs/contribute/style/style-guide/#use-upper-camel-case-for-api-objects). - Crossplane recommends starting XRD `kinds` with an `X` to show - it's a custom Crossplane API definition. + Crossplane recommends starting XRD `kinds` with an `X` to show + it's a custom Crossplane API definition. * `plural` - the plural name used for the API URL. The plural name must be - lowercase. + lowercase. {{}} -The XRD -{{}}metadata.name{{}} must be +The XRD +{{}}metadata.name{{}} must be {{}}plural{{}} name, `.` (dot character), {{}}group{{}}. For example, {{}}mydatabases.example.org{{}} matches the {{}}plural{{}} name -{{}}mydatabases{{}}, `.` -{{}}group{{}} name, +{{}}mydatabases{{}}, `.` +{{}}group{{}} name, {{}}example.org{{}}. ```yaml {label="xrdName",copy-lines="none"} apiVersion: apiextensions.crossplane.io/v1 kind: CompositeResourceDefinition -metadata: +metadata: name: mydatabases.example.org spec: group: example.org @@ -156,21 +158,21 @@ spec: -The XRD `version` is like the +The XRD `version` is like the [API versioning used by Kubernetes](https://kubernetes.io/docs/reference/using-api/#api-versioning). The version shows how mature or stable the API is and increments when changing, adding or removing fields in the API. -Crossplane doesn't require specific versions or a specific version naming -convention, but following +Crossplane doesn't require specific versions or a specific version naming +convention, but following [Kubernetes API versioning guidelines](https://kubernetes.io/docs/reference/using-api/#api-versioning) -is strongly recommended. +is strongly recommended. * `v1alpha1` - A new API that may change at any time. * `v1beta1` - An existing API that's considered stable. Breaking changes are strongly discouraged. -* `v1` - A stable API that doesn't have breaking changes. +* `v1` - A stable API that doesn't have breaking changes. #### Define a schema @@ -178,24 +180,24 @@ is strongly recommended. The `schema` defines the names of the parameters, the data types of the parameters and which parameters are -required or optional. +required or optional. {{}} -All `schemas` follow the Kubernetes custom resource definition -[OpenAPIv3 structural schema](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#specifying-a-structural-schema). +All `schemas` follow the Kubernetes custom resource definition +[OpenAPIv3 structural schema](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#specifying-a-structural-schema). {{< /hint >}} -Each -{{}}version{{}} of the API has a unique -{{}}schema{{}}. +Each +{{}}version{{}} of the API has a unique +{{}}schema{{}}. All XRD {{}}schemas{{}} validate against the {{}}openAPIV3Schema{{}}. The schema -is an OpenAPI -{{}}object{{}} with the -{{}}properties{{}} of a +is an OpenAPI +{{}}object{{}} with the +{{}}properties{{}} of a {{}}spec{{}} {{}}object{{}}. @@ -229,31 +231,31 @@ spec: # Removed for brevity ``` -A composite resource using this API references the -{{}}group/version{{}} and -{{}}kind{{}}. The -{{}}spec{{}} has the -{{}}region{{}} key with a string value. +A composite resource using this API references the +{{}}group/version{{}} and +{{}}kind{{}}. The +{{}}spec{{}} has the +{{}}region{{}} key with a string value. ```yaml {label="xr"} apiVersion: custom-api.example.org/v1alpha1 kind: xDatabase metadata: name: my-composite-resource -spec: +spec: region: "US" ``` {{}} -The custom API defined inside the +The custom API defined inside the {{}}spec.properties{{}} is an OpenAPIv3 -specification. The -[data models page](https://swagger.io/docs/specification/data-models/) of +specification. The +[data models page](https://swagger.io/docs/specification/data-models/) of the Swagger documentation provides a list of examples using data types and input -restrictions. +restrictions. -The Kubernetes documentation lists +The Kubernetes documentation lists [the set of special restrictions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation) on what your OpenAPIv3 custom API can use. {{< /hint >}} @@ -266,13 +268,13 @@ Changing or expanding the XRD schema requires restarting the [Crossplane pod]({{ ##### Required fields By default all fields in a schema are optional. Define a parameter as required -with the -{{< hover label="required" line="25">}}required{{}} attribute. +with the +{{< hover label="required" line="25">}}required{{}} attribute. -In this example the XRD requires -{{< hover label="required" line="19">}}region{{}} and +In this example the XRD requires +{{< hover label="required" line="19">}}region{{}} and {{< hover label="required" line="21">}}size{{}} but -{{< hover label="required" line="23">}}name{{}} is optional. +{{< hover label="required" line="23">}}name{{}} is optional. ```yaml {label="required",copy-lines="none"} apiVersion: apiextensions.crossplane.io/v1 kind: CompositeResourceDefinition @@ -293,13 +295,13 @@ spec: type: object properties: region: - type: string + type: string size: - type: string + type: string name: - type: string - required: - - region + type: string + required: + - region - size # Removed for brevity ``` @@ -312,15 +314,15 @@ This XRD defines two objects: 1. the top-level {{}}spec{{}} object 2. a second {{}}location{{}} object -The {{}}spec{{}} object -{{}}requires{{}} the -{{}}size{{}} and -{{}}location{{}} but +The {{}}spec{{}} object +{{}}requires{{}} the +{{}}size{{}} and +{{}}location{{}} but {{}}name{{}} is optional. -Inside the required {{}}location{{}} +Inside the required {{}}location{{}} object, -{{}}country{{}} is +{{}}country{{}} is {{}}required{{}} and {{}}zone{{}} is optional. @@ -335,25 +337,25 @@ object, type: object properties: size: - type: string + type: string name: - type: string + type: string location: type: object properties: - country: - type: string + country: + type: string zone: type: string required: - country - required: + required: - size - location ``` The Swagger "[Describing Parameters](https://swagger.io/docs/specification/describing-parameters/)" -documentation has more examples. +documentation has more examples. ##### Crossplane reserved fields @@ -368,7 +370,7 @@ Crossplane ignores any fields matching the reserved fields. To use a schema it must be {{}}served: true{{}} -and +and {{}}referenceable: true{{}}. ```yaml {label="served"} @@ -393,26 +395,26 @@ spec: type: object properties: region: - type: string + type: string ``` -Composite resources can use any schema version set as -{{}}served: true{{}}. +Composite resources can use any schema version set as +{{}}served: true{{}}. Kubernetes rejects any composite resource using a schema version set as `served: false`. {{< hint "tip" >}} Setting a schema version as `served:false` causes errors for users using an older schema. This can be an effective way to identify and upgrade users before -deleting the older schema version. +deleting the older schema version. {{< /hint >}} The {{}}referenceable: true{{}} field indicates which version of the schema Compositions use. Only one -version can be `referenceable`. +version can be `referenceable`. {{< hint "note" >}} -Changing which version is `referenceable:true` requires [updating the `compositeTypeRef.apiVersion`]({{}}) +Changing which version is `referenceable:true` requires [updating the `compositeTypeRef.apiVersion`]({{}}) of any Compositions referencing that XRD. {{< /hint >}} @@ -431,27 +433,27 @@ a "breaking change." -Crossplane XRDs use Kubernetes custom resource definitions for versioning. -Read the Kubernetes documentation on +Crossplane XRDs use Kubernetes custom resource definitions for versioning. +Read the Kubernetes documentation on [versions in CustomResourceDefinitions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/) -for more background on versions and breaking changes. +for more background on versions and breaking changes. Crossplane recommends implementing breaking schema changes as brand new XRDs. {{< /hint >}} -For XRDs, to create a new version of an API add a new +For XRDs, to create a new version of an API add a new {{}}name{{}} in the {{}}versions{{}} -list. +list. -For example, this XRD version -{{}}v1alpha1{{}} only has the field +For example, this XRD version +{{}}v1alpha1{{}} only has the field {{}}region{{}}. -A second version, -{{}}v1{{}} expands the API to have both -{{}}region{{}} and +A second version, +{{}}v1{{}} expands the API to have both +{{}}region{{}} and {{}}size{{}}. ```yaml {label="ver",copy-lines="none"} @@ -474,7 +476,7 @@ spec: type: object properties: region: - type: string + type: string - name: v1 schema: openAPIV3Schema: @@ -484,9 +486,9 @@ spec: type: object properties: region: - type: string + type: string size: - type: string + type: string ``` {{}} @@ -494,6 +496,41 @@ spec: Changing or expanding the XRD schema requires restarting the [Crossplane pod]({{}}) to take effect. {{< /hint >}} + + +### XRD scope + + + +The {{}}scope{{}} field determines +whether composite resources created from this XRD exist in a namespace or +at cluster scope. + +```yaml {label="xrdscope",copy-lines="none"} +apiVersion: apiextensions.crossplane.io/v2 +kind: CompositeResourceDefinition +metadata: + name: mydatabases.example.org +spec: + scope: Namespaced + # Removed for brevity +``` + +The scope field supports three values: + +* `Namespaced` - **(Default in v2)** - Composite resources exist in a + namespace and can only compose resources in the same namespace. +* `Cluster` - Composite resources are cluster-scoped and can compose resources + in any namespace or at cluster scope. +* `LegacyCluster` - Cluster-scoped with support for claims (v1 compatibility + mode). + +{{}} +Most XRDs should use `Namespaced` scope. This provides better security +isolation and follows standard Kubernetes patterns. Use `Cluster` scope only +for platform level resources like RBAC or cluster configuration. +{{< /hint >}} + ### Set composite resource defaults XRDs can set default parameters for composite resources. @@ -502,13 +539,13 @@ XRDs can set default parameters for composite resources. It's possible for multiple [Compositions]({{}}) to reference the same XRD. If more than one Composition references the same XRD, -the composite resource must select which Composition to use. +the composite resource must select which Composition to use. An XRD can define the default Composition to use with the -`defaultCompositionRef` value. +`defaultCompositionRef` value. Set a -{{}}defaultCompositionRef{{}} +{{}}defaultCompositionRef{{}} to set the default Composition. ```yaml {label="defaultComp",copy-lines="none"} @@ -517,7 +554,7 @@ kind: CompositeResourceDefinition metadata: name: xdatabases.custom-api.example.org spec: - defaultCompositionRef: + defaultCompositionRef: name: myComposition group: custom-api.example.org names: @@ -531,10 +568,10 @@ spec: Changes to a Composition generate a new Composition revision. By default all -composite resources use the updated Composition revision. +composite resources use the updated Composition revision. Set the XRD `defaultCompositionUpdatePolicy` to `Manual` to prevent composite -resources from automatically using the new revision. +resources from automatically using the new revision. The default value is `defaultCompositionUpdatePolicy: Automatic`. @@ -563,9 +600,9 @@ To require all composite resources to use a specific Composition use the `enforcedCompositionRef` setting in the XRD. For example, to require all composite resources using this XRD to use the -Composition -{{}}myComposition{{}} -set +Composition +{{}}myComposition{{}} +set {{}}enforcedCompositionRef.name: myComposition{{}}. ```yaml {label="defaultComp",copy-lines="none"} @@ -574,7 +611,7 @@ kind: CompositeResourceDefinition metadata: name: xdatabases.custom-api.example.org spec: - enforcedCompositionRef: + enforcedCompositionRef: name: myComposition group: custom-api.example.org names: @@ -589,11 +626,11 @@ spec: -Verify an XRD with `kubectl get compositeresourcedefinition` or the short form, +Verify an XRD with `kubectl get compositeresourcedefinition` or the short form, {{}}kubectl get xrd{{}}. ```yaml {label="getxrd",copy-lines="1"} -kubectl get xrd +kubectl get xrd NAME ESTABLISHED OFFERED AGE xdatabases.custom-api.example.org True True 22m ``` @@ -606,9 +643,9 @@ resource definition for this XRD. ### XRD conditions -Crossplane uses a standard set of `Conditions` for XRDs. -View the conditions of a XRD under their `Status` with -`kubectl describe xrd`. +Crossplane uses a standard set of `Conditions` for XRDs. +View the conditions of a XRD under their `Status` with +`kubectl describe xrd`. ```yaml {copy-lines="none"} kubectl describe xrd @@ -628,8 +665,8 @@ Status: #### WatchingCompositeResource `Reason: WatchingCompositeResource` indicates Crossplane defined the new -Kubernetes custom resource definitions related to the composite resource and is -watching for the creation of new composite resources. +Kubernetes custom resource definitions related to the composite resource and is +watching for the creation of new composite resources. ```yaml Type: Established @@ -641,7 +678,7 @@ Reason: WatchingCompositeResource #### TerminatingCompositeResource `Reason: TerminatingCompositeResource` indicates Crossplane is deleting the -custom resource definitions related to the composite resource and is +custom resource definitions related to the composite resource and is terminating the composite resource controller. ```yaml diff --git a/content/master/composition/composition-revisions.md b/content/master/composition/composition-revisions.md index 5d30d747b..9fe2897f3 100644 --- a/content/master/composition/composition-revisions.md +++ b/content/master/composition/composition-revisions.md @@ -16,10 +16,10 @@ database configuration of an Azure MySQL Server and some firewall rules. The `Composition` contains the 'base' configuration for the MySQL server and the firewall rules that the `PlatformDB` configuration extends. -A `Composition` associates with multiple XRs that use it. You might -define a `Composition` named `big-platform-db` that's used by ten different -`PlatformDB` XRs. Often, in the interest of self-service, a different team manages the `Composition` -than the actual `PlatformDB` XRs. For example +A `Composition` associates with multiple XRs that use it. You might +define a `Composition` named `big-platform-db` that's used by ten different +`PlatformDB` XRs. Often, in the interest of self-service, a different team manages the `Composition` +than the actual `PlatformDB` XRs. For example a platform team member may write and maintain the `Composition`, while individual app teams create `PlatformDB` XRs that use said `Composition`. @@ -88,6 +88,7 @@ manually update it when you wish it to use another `CompositionRevision`. apiVersion: example.org/v1alpha1 kind: PlatformDB metadata: + namespace: default name: example spec: storageGB: 20 @@ -108,6 +109,7 @@ use a different `CompositionRevision`. apiVersion: example.org/v1alpha1 kind: PlatformDB metadata: + namespace: default name: example spec: storageGB: 20 @@ -125,9 +127,9 @@ spec: This tutorial discusses how CompositionRevisions work and how they manage Composite Resource (XR) updates. This starts with a `Composition` and `CompositeResourceDefinition` (XRD) that defines a `MyVPC` resource and continues with creating multiple XRs to observe different upgrade paths. Crossplane -assigns different CompositionRevisions to composite resources each time you update the composition. +assigns different CompositionRevisions to composite resources each time you update the composition. -### Preparation +### Preparation #### Deploy composition and XRD examples Apply the example Composition. @@ -177,18 +179,18 @@ spec: plural: myvpcs versions: - name: v1alpha1 - served: true - referenceable: true + served: true + referenceable: true schema: openAPIV3Schema: - type: object + type: object properties: spec: - type: object + type: object properties: id: - type: string - description: ID of this VPC that other objects will use to refer to it. + type: string + description: ID of this VPC that other objects will use to refer to it. required: - id ``` @@ -228,7 +230,7 @@ spec: Expected Output: ```shell myvpc.aws.example.upbound.io/vpc-auto created -``` +``` #### Manual update policy Create a Composite Resource with `compositionUpdatePolicy: Manual` and `compositionRevisionRef`. @@ -249,7 +251,7 @@ spec: Expected Output: ```shell myvpc.aws.example.upbound.io/vpc-man created -``` +``` #### Using a selector Create an XR with a `compositionRevisionSelector` of `channel: dev`: @@ -269,7 +271,7 @@ spec: Expected Output: ```shell myvpc.aws.example.upbound.io/vpc-dev created -``` +``` Create an XR with a `compositionRevisionSelector` of `channel: staging`: ```yaml @@ -289,9 +291,9 @@ spec: Expected Output: ```shell myvpc.aws.example.upbound.io/vpc-staging created -``` +``` -Verify the Composite Resource with the label `channel: staging` doesn't have a `REVISION`. +Verify the Composite Resource with the label `channel: staging` doesn't have a `REVISION`. All other XRs have a `REVISION` matching the created Composition Revision. ```shell kubectl get composite -o="custom-columns=NAME:.metadata.name,SYNCED:.status.conditions[0].status,REVISION:.spec.crossplane.compositionRevisionRef.name,POLICY:.spec.crossplane.compositionUpdatePolicy,MATCHLABEL:.spec.crossplane.compositionRevisionSelector.matchLabels" @@ -303,7 +305,7 @@ vpc-auto True myvpcs.aws.example.upbound.io-ad265bc Automatic vpc-staging False Automatic map[channel:staging] -``` +``` {{< hint "note" >}} The `vpc-staging` XR label doesn't match any existing Composition Revisions. @@ -311,7 +313,7 @@ The `vpc-staging` XR label doesn't match any existing Composition Revisions. ### Create new composition revisions Crossplane creates a new CompositionRevision when you create or update a Composition. Label and annotation changes -also trigger a new CompositionRevision. +also trigger a new CompositionRevision. #### Update the composition label Update the `Composition` label to `channel: staging`: @@ -321,7 +323,7 @@ kubectl label composition myvpcs.aws.example.upbound.io channel=staging --overwr Expected Output: ```shell composition.apiextensions.crossplane.io/myvpcs.aws.example.upbound.io labeled -``` +``` Verify that Crossplane creates a new Composition revision: ```shell @@ -332,9 +334,9 @@ Expected Output: NAME REVISION CHANNEL myvpcs.aws.example.upbound.io-727b3c8 2 staging myvpcs.aws.example.upbound.io-ad265bc 1 dev -``` +``` -Verify that Crossplane assigns the Composite Resources `vpc-auto` and `vpc-staging` to Composite `revision:2`. +Verify that Crossplane assigns the Composite Resources `vpc-auto` and `vpc-staging` to Composite `revision:2`. XRs `vpc-man` and `vpc-dev` are still assigned to the original `revision:1`: ```shell @@ -347,10 +349,10 @@ vpc-auto True myvpcs.aws.example.upbound.io-727b3c8 Automatic vpc-staging True myvpcs.aws.example.upbound.io-727b3c8 Automatic map[channel:staging] -``` +``` {{< hint "note" >}} -`vpc-auto` always use the latest Revision. +`vpc-auto` always use the latest Revision. `vpc-staging` now matches the label applied to Revision `revision:2`. {{< /hint >}} @@ -393,7 +395,7 @@ spec: Expected Output: ```shell composition.apiextensions.crossplane.io/myvpcs.aws.example.upbound.io configured -``` +``` Verify that Crossplane creates a new Composition revision: @@ -406,13 +408,13 @@ NAME REVISION CHANNEL myvpcs.aws.example.upbound.io-727b3c8 2 staging myvpcs.aws.example.upbound.io-ad265bc 1 dev myvpcs.aws.example.upbound.io-f81c553 3 dev -``` +``` {{< hint "note" >}} Changing the label and the spec values simultaneously is critical for deploying new changes to the `dev` channel. {{< /hint >}} -Verify Crossplane assigns the Composite Resources `vpc-auto` and `vpc-dev` to Composite `revision:3`. +Verify Crossplane assigns the Composite Resources `vpc-auto` and `vpc-dev` to Composite `revision:3`. Crossplane assigns `vpc-staging` to `revision:2`, and still assigns `vpc-man` to the original `revision:1`: ```shell @@ -425,7 +427,7 @@ vpc-auto True myvpcs.aws.example.upbound.io-f81c553 Automatic vpc-staging True myvpcs.aws.example.upbound.io-727b3c8 Automatic map[channel:staging] -``` +``` {{< hint "note" >}} diff --git a/content/master/get-started/get-started-with-composition.md b/content/master/get-started/get-started-with-composition.md index d36a775fb..e3038a7d7 100644 --- a/content/master/get-started/get-started-with-composition.md +++ b/content/master/get-started/get-started-with-composition.md @@ -89,7 +89,7 @@ that supports REST APIs to work with apps. This guide requires: * A Kubernetes cluster with at least 2 GB of RAM -* The Crossplane v2 preview [installed on the Kubernetes cluster]({{}}) +* Crossplane v2 [installed on the Kubernetes cluster]({{}}) ## Create the custom resource diff --git a/content/master/get-started/get-started-with-managed-resources.md b/content/master/get-started/get-started-with-managed-resources.md index 9c449d531..40c3f9f45 100644 --- a/content/master/get-started/get-started-with-managed-resources.md +++ b/content/master/get-started/get-started-with-managed-resources.md @@ -32,16 +32,16 @@ Kubernetes calls third party API resources _custom resources_. This guide requires: * A Kubernetes cluster with at least 2 GB of RAM -* The Crossplane v2 preview [installed on the Kubernetes cluster]({{}}) +* Crossplane v2 [installed on the Kubernetes cluster]({{}}) * An AWS account with permissions to create an S3 storage bucket * AWS [access keys](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds) {{}} -Only AWS managed resources support the Crossplane v2 preview. +AWS managed resources fully support Crossplane v2. -Maintainers will update the managed resources for other systems including Azure, -GCP, Terraform, Helm, GitHub, etc to support Crossplane v2 soon. +Maintainers are actively working to update managed resources for other systems including Azure, +GCP, Terraform, Helm, GitHub, etc to support Crossplane v2. {{}} @@ -69,7 +69,7 @@ kind: Provider metadata: name: crossplane-contrib-provider-aws-s3 spec: - package: xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v1.24.0-crossplane-v2-preview.0 + package: xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v2.0.0 ``` Save this as `provider.yaml` and apply it: @@ -83,8 +83,8 @@ Check that Crossplane installed the provider: ```shell {copy-lines="1",label="getProvider"} kubectl get providers NAME INSTALLED HEALTHY PACKAGE AGE -crossplane-contrib-provider-family-aws True True xpkg.crossplane.io/crossplane-contrib/provider-family-aws:v1.24.0-crossplane-v2-preview.0 27s -crossplane-contrib-provider-aws-s3 True True xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v1.24.0-crossplane-v2-preview.0 31s +crossplane-contrib-provider-family-aws True True xpkg.crossplane.io/crossplane-contrib/provider-family-aws:v2.0.0 27s +crossplane-contrib-provider-aws-s3 True True xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v2.0.0 31s ``` {{}} diff --git a/content/master/get-started/install.md b/content/master/get-started/install.md index 862106983..7b2de8363 100644 --- a/content/master/get-started/install.md +++ b/content/master/get-started/install.md @@ -28,14 +28,14 @@ Install Crossplane using the _Helm chart_. -### Add the Crossplane Preview Helm repository +### Add the Crossplane Helm repository -Add the Crossplane preview repository with the `helm repo add` command. +Add the Crossplane stable repository with the `helm repo add` command. ```shell -helm repo add crossplane-preview https://charts.crossplane.io/preview +helm repo add crossplane-stable https://charts.crossplane.io/stable ``` Update the @@ -46,11 +46,11 @@ helm repo update -### Install the Crossplane Preview Helm chart +### Install the Crossplane Helm chart -Install the Crossplane Preview Helm chart with `helm install`. +Install the Crossplane Helm chart with `helm install`. {{< hint "tip" >}} View the changes Crossplane makes to your cluster with the @@ -63,8 +63,7 @@ Crossplane creates and installs into the `crossplane-system` namespace. ```shell helm install crossplane \ --namespace crossplane-system \ ---create-namespace crossplane-preview/crossplane \ ---version v2.0.0-preview.1 +--create-namespace crossplane-stable/crossplane ``` View the installed Crossplane pods with `kubectl get pods -n crossplane-system`. diff --git a/content/master/guides/upgrade-crossplane.md b/content/master/guides/upgrade-crossplane.md index 023ba3a8d..c899658d7 100644 --- a/content/master/guides/upgrade-crossplane.md +++ b/content/master/guides/upgrade-crossplane.md @@ -10,14 +10,14 @@ The recommended upgrade method for an existing Crossplane install is to use * [Helm](https://helm.sh/docs/intro/install/) version `v3.2.0` or later -## Add the Crossplane Preview Helm repository +## Add the Crossplane Helm repository Verify Helm has the Crossplane repository. ```shell -helm repo add crossplane-preview https://charts.crossplane.io/preview +helm repo add crossplane-stable https://charts.crossplane.io/stable ``` -## Update the Helm Preview repository +## Update the Helm repository Update the local Crossplane Helm chart with `helm repo update`. @@ -37,7 +37,7 @@ By default, Crossplane installs into the `crossplane-system` namespace. ```shell -helm upgrade crossplane --namespace crossplane-system crossplane-preview/crossplane --devel +helm upgrade crossplane --namespace crossplane-system crossplane-stable/crossplane ``` Helm preserves any arguments or flags originally used when installing @@ -56,5 +56,5 @@ with the upgrade command. For example, to maintain the original image registry use ```shell -helm upgrade crossplane --namespace crossplane-system crossplane-preview/crossplane --set 'args={"--registry=index.docker.io"}' +helm upgrade crossplane --namespace crossplane-system crossplane-stable/crossplane --set 'args={"--registry=index.docker.io"}' ``` diff --git a/content/master/managed-resources/managed-resources.md b/content/master/managed-resources/managed-resources.md index 9357e1819..6b57ce9b2 100644 --- a/content/master/managed-resources/managed-resources.md +++ b/content/master/managed-resources/managed-resources.md @@ -20,11 +20,11 @@ Examples of managed resources include: * Microsoft Azure PostgreSQL `Database` defined in [provider-upjet-azure](https://github.com/crossplane-contrib/provider-upjet-azure). {{}} -Only AWS managed resources support the Crossplane v2 preview. +AWS managed resources fully support Crossplane v2. -Maintainers will update the managed resources for other systems including Azure, -GCP, Terraform, Helm, GitHub, etc to support Crossplane v2 soon. +Maintainers are actively working to update managed resources for other systems including Azure, +GCP, Terraform, Helm, GitHub, etc to support Crossplane v2. {{}} @@ -419,7 +419,7 @@ For example, when creating an AWS RDS database instance with the Crossplane [community AWS provider](https://github.com/crossplane-contrib/provider-aws) generates an endpoint, password, port and username data. The Provider saves these variables in the Kubernetes secret -{{}}rds-secret{{}}, referenced by +{{}}rds-secret{{}}, referenced by the {{}}writeConnectionSecretToRef{{}} field. @@ -428,6 +428,7 @@ field. apiVersion: database.aws.m.crossplane.io/v1beta1 kind: RDSInstance metadata: + namespace: default name: my-rds-instance spec: forProvider: diff --git a/content/master/whats-crossplane/_index.md b/content/master/whats-crossplane/_index.md index 78952bb11..ceb3d4aa5 100644 --- a/content/master/whats-crossplane/_index.md +++ b/content/master/whats-crossplane/_index.md @@ -215,11 +215,11 @@ Follow [Get Started with Managed Resources]({{}} -Only AWS managed resources support the Crossplane v2 preview. +AWS managed resources fully support Crossplane v2. -Maintainers will update the managed resources for other systems including Azure, -GCP, Terraform, Helm, GitHub, etc to support Crossplane v2 soon. +Maintainers are actively working to update managed resources for other systems including Azure, +GCP, Terraform, Helm, GitHub, etc to support Crossplane v2. {{}} diff --git a/content/master/whats-new/_index.md b/content/master/whats-new/_index.md index 8237297fa..388cdfd0e 100644 --- a/content/master/whats-new/_index.md +++ b/content/master/whats-new/_index.md @@ -1,7 +1,7 @@ --- title: What's New in v2? weight: 4 -description: Learn what's new in the Crossplane v2 preview +description: Learn what's new in Crossplane v2 --- **Crossplane v2 makes Crossplane more useful, more intuitive, and less opinionated.** @@ -150,12 +150,11 @@ opinionated about using composition and MRs together. Namespaces enable fine grained access control over who can create what MRs. {{}} -During the Crossplane v2 preview only namespaced AWS managed resources are -available. +Namespaced AWS managed resources are fully available in Crossplane v2. -Maintainers will update the managed resources for other systems including Azure, -GCP, Terraform, Helm, GitHub, etc to support namespaced MRs soon. +Maintainers are actively working to update managed resources for other systems including Azure, +GCP, Terraform, Helm, GitHub, etc to support namespaced MRs. {{}}