Skip to content

Commit db6f189

Browse files
committed
Adding kubernetes-provider quickstart
Signed-off-by: Cory Sherman <[email protected]>
1 parent be737b4 commit db6f189

File tree

1 file changed

+243
-0
lines changed

1 file changed

+243
-0
lines changed
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
---
2+
title: KubeAdm Quickstart
3+
weight: 110
4+
---
5+
6+
Connect Crossplane to in-cluster kubernetes to create and manage resources from Kubernetes
7+
with the
8+
[Upbound Kubernetes Provider](https://marketplace.upbound.io/providers/upbound/provider-kubernetes/).
9+
10+
## Prerequisites
11+
This quickstart requires:
12+
* a Kubernetes cluster with at least 2 GB of RAM
13+
* permissions to create pods and secrets in the Kubernetes cluster
14+
* [Helm](https://helm.sh/) version v3.2.0 or later
15+
* CNI
16+
17+
{{<include file="/master/getting-started/install-crossplane-include.md" type="page" >}}
18+
19+
## Install the Kubernetes provider
20+
21+
Install the Azure Network resource provider into the Kubernetes cluster with a Kubernetes configuration
22+
file.
23+
24+
```yaml
25+
cat <<EOF | kubectl apply -f -
26+
apiVersion: pkg.crossplane.io/v1
27+
kind: Provider
28+
metadata:
29+
name: provider-azure-network
30+
spec:
31+
package: xpkg.upbound.io/upbound/provider-kubernetes:v0.16.0
32+
runtimeConfigRef:
33+
apiVersion: pkg.crossplane.io/v1beta1
34+
kind: DeploymentRuntimeConfig
35+
name: provider-kubernetes
36+
EOF
37+
```
38+
```yaml
39+
cat <<EOF | kubectl apply -f -
40+
apiVersion: pkg.crossplane.io/v1beta1
41+
kind: DeploymentRuntimeConfig
42+
metadata:
43+
name: provider-kubernetes
44+
spec:
45+
serviceAccountTemplate:
46+
metadata:
47+
name: provider-kubernetes
48+
EOF
49+
---
50+
```yaml {label="ClusterRoleBinding",copy-lines="all"}
51+
cat <<EOF | kubectl apply -f -
52+
apiVersion: rbac.authorization.k8s.io/v1
53+
kind: ClusterRoleBinding
54+
metadata:
55+
name: provider-kubernetes-cluster-admin
56+
subjects:
57+
- kind: ServiceAccount
58+
name: provider-kubernetes
59+
namespace: crossplane-system
60+
roleRef:
61+
kind: ClusterRole
62+
name: cluster-admin
63+
apiGroup: rbac.authorization.k8s.io
64+
EOF
65+
---
66+
The Crossplane {{< hover label="provider" line="3" >}}Provider{{</hover>}}
67+
installs the Kubernetes _Custom Resource Definitions_ (CRDs) representing Kubernetes objects.
68+
These CRDs allow you to create resources inside Kubernetes.
69+
Verify the provider installed with `kubectl get providers`.
70+
71+
72+
```shell {copy-lines="1",label="getProvider"}
73+
kubectl get providers
74+
NAME INSTALLED HEALTHY PACKAGE AGE
75+
provider-kubernetes True True xpkg.upbound.io/upbound/provider-azure-network:v1.16.0 38s
76+
```
77+
78+
79+
80+
## Create a ProviderConfig
81+
A `ProviderConfig` customizes the settings of the Kubernetes Provider.
82+
83+
```yaml
84+
cat <<EOF | kubectl apply -f -
85+
apiVersion: kubernetes.crossplane.io/v1alpha1
86+
kind: ProviderConfig
87+
metadata:
88+
name: kubernetes-provider
89+
spec:
90+
credentials:
91+
source: InjectedIdentity
92+
EOF
93+
```
94+
95+
96+
97+
## Create a Composite resource definition
98+
A `CompositeResourceDefinition` (XRDs) define the schema for a custom API.
99+
Users create composite resources (XRs) and Claims (XCs) using the API schema defined by an XRD.
100+
101+
```yaml
102+
cat <<EOF | kubectl apply -f -
103+
apiVersion: apiextensions.crossplane.io/v1
104+
kind: CompositeResourceDefinition
105+
metadata:
106+
name: xkubernetesapps.kubernetes.example.org
107+
spec:
108+
group: kubernetes.example.org
109+
names:
110+
kind: XKubernetesApp
111+
plural: xkubernetesapps
112+
versions:
113+
- name: v1alpha1
114+
served: true
115+
referenceable: true
116+
schema:
117+
openAPIV3Schema:
118+
type: object
119+
properties:
120+
spec:
121+
type: object
122+
properties:
123+
replicas:
124+
type: integer
125+
default: 2
126+
image:
127+
type: string
128+
default: nginx:latest
129+
port:
130+
type: integer
131+
default: 80
132+
hostname:
133+
type: string
134+
default: example.com
135+
required:
136+
- replicas
137+
- image
138+
- port
139+
- hostname
140+
EOF
141+
```
142+
## Create a Composition
143+
A `Composition` is a template for creating multiple managed resources as a single object.
144+
A Composition composes individual managed resources together into a larger, reusable, solution.
145+
146+
```yaml
147+
cat <<EOF | kubectl apply -f -
148+
apiVersion: apiextensions.crossplane.io/v1
149+
kind: Composition
150+
metadata:
151+
name: xkubernetesapp-composition
152+
spec:
153+
compositeTypeRef:
154+
apiVersion: kubernetes.example.org/v1alpha1
155+
kind: XKubernetesApp
156+
resources:
157+
- name: deployment
158+
base:
159+
apiVersion: kubernetes.crossplane.io/v1alpha2
160+
kind: Object
161+
spec:
162+
forProvider:
163+
manifest:
164+
apiVersion: apps/v1
165+
kind: Deployment
166+
metadata:
167+
name: example-deployment
168+
namespace: default
169+
spec:
170+
replicas: 1
171+
selector:
172+
matchLabels:
173+
app: example-app
174+
template:
175+
metadata:
176+
labels:
177+
app: example-app
178+
spec:
179+
containers:
180+
- name: example-container
181+
image: nginx:latest
182+
ports:
183+
- containerPort: 80
184+
providerConfigRef:
185+
name: kubernetes-provider
186+
patches:
187+
- fromFieldPath: "spec.replicas"
188+
toFieldPath: "spec.forProvider.manifest.spec.replicas"
189+
- fromFieldPath: "spec.image"
190+
toFieldPath: "spec.forProvider.manifest.spec.template.spec.containers[0].image"
191+
- name: service
192+
base:
193+
apiVersion: kubernetes.crossplane.io/v1alpha2
194+
kind: Object
195+
spec:
196+
forProvider:
197+
manifest:
198+
apiVersion: v1
199+
kind: Service
200+
metadata:
201+
name: example-service
202+
namespace: default
203+
spec:
204+
selector:
205+
app: example-app
206+
ports:
207+
- protocol: TCP
208+
port: 80
209+
targetPort: 80
210+
providerConfigRef:
211+
name: kubernetes-provider
212+
patches:
213+
- fromFieldPath: "spec.port"
214+
toFieldPath: "spec.forProvider.manifest.spec.ports[0].port"
215+
EOF
216+
```
217+
## Create an Abstracted application
218+
Leverage the composition to create an abstraction
219+
220+
```yaml
221+
cat <<EOF | kubectl apply -f -
222+
apiVersion: kubernetes.example.org/v1alpha1
223+
kind: XKubernetesApp
224+
metadata:
225+
name: my-kubernetes-app
226+
spec:
227+
replicas: 3
228+
image: nginx
229+
port: 8080
230+
hostname: my-app.example.com
231+
EOF
232+
```
233+
```shell
234+
kubectl get pods
235+
NAME READY STATUS RESTARTS AGE
236+
example-deployment-5f76bbff9b-c5n2r 1/1 Running 0 15s
237+
example-deployment-5f76bbff9b-lch2p 1/1 Running 0 12s
238+
example-deployment-5f76bbff9b-w5n9h 1/1 Running 0 20s
239+
```
240+
* Explore Kubernetes resources that Crossplane can configure in the
241+
[Provider CRD reference](https://marketplace.upbound.io/providers/upbound/kubernetes-provider/).
242+
* Join the [Crossplane Slack](https://slack.crossplane.io/) and connect with
243+
Crossplane users and contributors.

0 commit comments

Comments
 (0)