mirror of https://github.com/crossplane/docs.git
6.8 KiB
6.8 KiB
| title | weight |
|---|---|
| Kubernetes Provider Quickstart | 110 |
Connect Crossplane to in-cluster kubernetes to create and manage resources from Kubernetes with the Upbound Kubernetes Provider.
Prerequisites
This quickstart requires:
- a Kubernetes cluster with at least 2 GB of RAM
- permissions to create pods and secrets in the Kubernetes cluster
- Helm version v3.2.0 or later
- CNI
{{}}
Install the Kubernetes provider
Install the Kubernetes provider into the Kubernetes cluster with a Kubernetes configuration file.
cat <<EOF | kubectl apply -f -
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-kubernetes
spec:
package: xpkg.upbound.io/upbound/provider-kubernetes:v0.16.2
runtimeConfigRef:
apiVersion: pkg.crossplane.io/v1beta1
kind: DeploymentRuntimeConfig
name: provider-kubernetes
EOF
cat <<EOF | kubectl apply -f -
apiVersion: pkg.crossplane.io/v1beta1
kind: DeploymentRuntimeConfig
metadata:
name: provider-kubernetes
spec:
serviceAccountTemplate:
metadata:
name: provider-kubernetes
EOF
---
```yaml {label="ClusterRoleBinding",copy-lines="all"}
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: provider-kubernetes-cluster-admin
subjects:
- kind: ServiceAccount
name: provider-kubernetes
namespace: crossplane-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF
---
The Crossplane {{< hover label="provider" line="3" >}}Provider{{</hover>}}
installs the Kubernetes _Custom Resource Definitions_ (CRDs) representing Kubernetes objects.
These CRDs allow you to create resources inside Kubernetes.
Verify the provider installed with `kubectl get providers`.
```shell {copy-lines="1",label="getProvider"}
kubectl get providers
NAME INSTALLED HEALTHY PACKAGE AGE
provider-kubernetes True True xpkg.upbound.io/upbound/provider-kubernetes:v1.16.2 38s
Create a ProviderConfig
A ProviderConfig customizes the settings of the Kubernetes Provider.
cat <<EOF | kubectl apply -f -
apiVersion: kubernetes.crossplane.io/v1alpha1
kind: ProviderConfig
metadata:
name: kubernetes-provider
spec:
credentials:
source: InjectedIdentity
EOF
Create a Composite resource definition
A CompositeResourceDefinition (XRDs) define the schema for a custom API.
Users create composite resources (XRs) and Claims (XCs) using the API schema defined by an XRD.
cat <<EOF | kubectl apply -f -
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: xkubernetesapps.kubernetes.example.org
spec:
group: kubernetes.example.org
names:
kind: XKubernetesApp
plural: xkubernetesapps
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
replicas:
type: integer
default: 2
image:
type: string
default: nginx:latest
port:
type: integer
default: 80
hostname:
type: string
default: example.com
required:
- replicas
- image
- port
- hostname
EOF
Create a Composition
A Composition is a template for creating multiple managed resources as a single object.
A Composition composes individual managed resources together into a larger, reusable, solution.
cat <<EOF | kubectl apply -f -
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: xkubernetesapp-composition
spec:
compositeTypeRef:
apiVersion: kubernetes.example.org/v1alpha1
kind: XKubernetesApp
resources:
- name: deployment
base:
apiVersion: kubernetes.crossplane.io/v1alpha2
kind: Object
spec:
forProvider:
manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: nginx:latest
ports:
- containerPort: 80
providerConfigRef:
name: kubernetes-provider
patches:
- fromFieldPath: "spec.replicas"
toFieldPath: "spec.forProvider.manifest.spec.replicas"
- fromFieldPath: "spec.image"
toFieldPath: "spec.forProvider.manifest.spec.template.spec.containers[0].image"
- name: service
base:
apiVersion: kubernetes.crossplane.io/v1alpha2
kind: Object
spec:
forProvider:
manifest:
apiVersion: v1
kind: Service
metadata:
name: example-service
namespace: default
spec:
selector:
app: example-app
ports:
- protocol: TCP
port: 80
targetPort: 80
providerConfigRef:
name: kubernetes-provider
patches:
- fromFieldPath: "spec.port"
toFieldPath: "spec.forProvider.manifest.spec.ports[0].port"
EOF
Create an Abstracted application
Leverage the composition to create an abstraction
cat <<EOF | kubectl apply -f -
apiVersion: kubernetes.example.org/v1alpha1
kind: XKubernetesApp
metadata:
name: my-kubernetes-app
spec:
replicas: 3
image: nginx
port: 8080
hostname: my-app.example.com
EOF
kubectl get pods
NAME READY STATUS RESTARTS AGE
example-deployment-5f76bbff9b-c5n2r 1/1 Running 0 15s
example-deployment-5f76bbff9b-lch2p 1/1 Running 0 12s
example-deployment-5f76bbff9b-w5n9h 1/1 Running 0 20s
- Explore Kubernetes resources that Crossplane can configure in the Provider CRD reference.
- Join the Crossplane Slack and connect with Crossplane users and contributors.