> ## Documentation Index
> Fetch the complete documentation index at: https://notes.kodekloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction and Installation

> Beginner guide to Crossplane covering concepts, Helm installation, CRDs, resource provisioning, verification, and next steps.

Hi, I'm Nourhan Mohamed — welcome to this beginner course on Crossplane.

Over the next lessons we'll install Crossplane, connect it to the platforms you want to manage, and compose infrastructure into simple, reusable building blocks that your team can request on demand.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/2edUHMBOcOnHNUbi/images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/crossplane-kubernetes-install-providers-compose-selfservice.jpg?fit=max&auto=format&n=2edUHMBOcOnHNUbi&q=85&s=0764784ae220dd19095ef78a8288a87e" alt="A slide titled &#x22;What you'll learn&#x22; with three numbered items. The items are: &#x22;Install Crossplane on Kubernetes,&#x22; &#x22;Manage platforms with providers,&#x22; and &#x22;Compose self-service infrastructure.&#x22;" width="1920" height="1080" data-path="images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/crossplane-kubernetes-install-providers-compose-selfservice.jpg" />
</Frame>

Let's dive in.

Conceptually, Crossplane makes your Kubernetes cluster into an infrastructure control plane. Instead of hopping between cloud consoles or asking other teams to provision resources, you declare the infrastructure you need in Kubernetes manifests and Crossplane provisions and continuously reconciles those resources.

To picture this, imagine a busy restaurant. As a diner you don't go into the kitchen — you place your order with a waiter, the kitchen checks for required details if anything is missing, then prepares your meal and corrects any mistakes. Crossplane plays the role of the waiter and kitchen: you submit a request (YAML), Crossplane validates and fulfills it, and continuously ensures the result matches your intent.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/2edUHMBOcOnHNUbi/images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/restaurant-order-waiter-kitchen-infographic.jpg?fit=max&auto=format&n=2edUHMBOcOnHNUbi&q=85&s=64314dbad41751231c6430f6cd35ce3f" alt="An illustrated infographic titled &#x22;Think of a busy restaurant&#x22; showing three steps: a customer ordering at a table, a waiter taking the order, and a chef cooking the meal. Each step is labeled &#x22;You order,&#x22; &#x22;Waiter takes it,&#x22; and &#x22;Kitchen makes it.&#x22;" width="1920" height="1080" data-path="images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/restaurant-order-waiter-kitchen-infographic.jpg" />
</Frame>

Modern applications require more than containers: databases, storage buckets, networking, and many cloud services. Managing all of that across separate consoles leads to configuration drift and fragile manual processes.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/2edUHMBOcOnHNUbi/images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/your-app-resources-architecture-diagram.jpg?fit=max&auto=format&n=2edUHMBOcOnHNUbi&q=85&s=553f0401993575c7b8ff3a997d5638aa" alt="A simple architecture diagram showing a central &#x22;Your app&#x22; box with arrows to resource cards labeled Database, Storage bucket, Network, and &#x22;...a dozen more.&#x22;" width="1920" height="1080" data-path="images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/your-app-resources-architecture-diagram.jpg" />
</Frame>

Crossplane solves this by letting you declare managed resources as Kubernetes objects. For example, a generic managed resource looks like this:

```yaml theme={null}
apiVersion: example.org/v1alpha1
kind: ExampleResource
metadata:
  name: my-example
spec:
  forProvider:
    manifest: {}
```

When you apply such YAML, Crossplane:

* validates the request (ensures required fields and credentials are present),
* provisions the real infrastructure,
* and continuously reconciles the external resources to match the declared state.

This three-step flow — apply YAML, validate, and provision — is the core of how Crossplane turns Kubernetes into an infrastructure control plane.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/2edUHMBOcOnHNUbi/images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/apply-yaml-validate-provision-flow.jpg?fit=max&auto=format&n=2edUHMBOcOnHNUbi&q=85&s=aab3f6ef23c4388e8ac97fa6603c34c2" alt="A three-step flow diagram titled &#x22;From request to running infra&#x22; showing: 01 Apply YAML (no console clicking), 02 Validate (check requirements), and 03 Provision (create real infra). Each step is in a rounded box with icons and arrows connecting them." width="1920" height="1080" data-path="images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/apply-yaml-validate-provision-flow.jpg" />
</Frame>

Crossplane extends Kubernetes by installing CustomResourceDefinitions (CRDs). Kubernetes already understands built-in types like Pods and Services; Crossplane adds CRDs for resources such as databases and buckets. Once added, infrastructure appears as first-class Kubernetes resources that can be created, inspected, and stored in Git alongside application code.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/2edUHMBOcOnHNUbi/images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/crossplane-extends-kubernetes-crd-diagram.jpg?fit=max&auto=format&n=2edUHMBOcOnHNUbi&q=85&s=84823feaa51839051644b01ab08b8ed3" alt="A diagram titled &#x22;Crossplane extends Kubernetes&#x22; showing the Kubernetes API with built-in resources (Pod, Service) on the left and Crossplane-added custom resources (Database CRD, Bucket CRD) on the right." width="1920" height="1080" data-path="images/Learn-By-Doing-Crossplane/Getting-Started-With-Crossplane/Introduction-and-Installation/crossplane-extends-kubernetes-crd-diagram.jpg" />
</Frame>

<Callout icon="lightbulb" color="#1CB2FE">
  CustomResourceDefinitions (CRDs) are how Kubernetes learns new resource types. After installing Crossplane, inspect CRDs with `kubectl get crd` and list Crossplane API resources with `kubectl api-resources | grep crossplane.io`. For more, see the [Kubernetes CRD docs](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/).
</Callout>

Installing Crossplane with Helm

Crossplane is commonly installed via Helm. The main steps are:

* Add the Crossplane Helm repository and update your local cache.
* Install the Crossplane chart into the `crossplane-system` namespace (Helm can create it).
* Verify the Crossplane controllers are running and that new API resources are present.

<Callout icon="warning" color="#FF6B6B">
  You will need sufficient cluster privileges (typically `cluster-admin`) to install CRDs and controllers. If you don't have permissions, ask your cluster administrator to install Crossplane or grant the required RBAC.
</Callout>

Commands (copy/paste):

```bash theme={null}
# Add the Crossplane Helm repo and update
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update

# Install Crossplane into the crossplane-system namespace
helm install crossplane --namespace crossplane-system crossplane-stable/crossplane --create-namespace
```

Verify the Crossplane pods are running:

```bash theme={null}
user@cluster:~$ kubectl get pods -n crossplane-system
NAME                                        READY   STATUS    AGE
crossplane-7d8f6c9b4-x2k9p                  1/1     Running   55s
crossplane-rbac-manager-6c8d7f5b9-qd4ml     1/1     Running   55s
```

List Crossplane API resources to confirm CRDs and controller-added resources:

```bash theme={null}
user@cluster:~$ kubectl api-resources | grep crossplane.io
compositions                          comp          true   crossplane.io
compositeresourcedefinitions         xrd           true   crossplane.io
compositionrevisions                  comprev       true   crossplane.io
# ...additional Crossplane resources
```

You should see API groups ending with `crossplane.io`. These are the new resource types Crossplane adds.

Summary table — quick reference

| Task | Purpose | Example command |
| - | - | - |
| Add Helm repo | Make Crossplane charts available | `helm repo add crossplane-stable https://charts.crossplane.io/stable` |
| Install Crossplane | Deploy controllers and CRDs | `helm install crossplane --namespace crossplane-system crossplane-stable/crossplane --create-namespace` |
| Verify pods | Ensure controllers are running | `kubectl get pods -n crossplane-system` |
| List Crossplane APIs | Confirm CRDs are installed | `kubectl api-resources \| grep crossplane.io` |

Next steps

* Connect Crossplane to a cloud provider using a provider package (we'll cover provider installation and credentials in the next lesson).
* Learn how to define managed resources (databases, buckets, networks) and how to compose them into higher-level, self-service APIs for your teams.

References

* Crossplane documentation: [https://crossplane.io](https://crossplane.io)
* Kubernetes documentation: [https://kubernetes.io/docs/](https://kubernetes.io/docs/)

<CardGroup>
  <Card title="Watch Video" icon="video" cta="Learn more" href="https://learn.kodekloud.com/user/courses/learn-by-doing-crossplane/module/0abfe197-7cb9-4d41-8262-fa463b0ef802/lesson/f55ec76c-45d7-418d-9959-3e516d01cf15" />

  <Card title="Practice Lab" icon="flask-conical" cta="Learn more" href="https://learn.kodekloud.com/user/courses/learn-by-doing-crossplane/module/0abfe197-7cb9-4d41-8262-fa463b0ef802/lesson/360c38b7-33d8-4d59-8ac9-a1d063347a62" />
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.