+
+
+
+
+
+
+
+
+
+
+Highlights and Intro:
+
+Crossplane is an advanced tool for managing infrastructure in the cloud-native ecosystem.
+Just like terraform encourages using modules for bundling related resources, crossplane offers compositions.
+Platform engineers
can define their compositions and provide the Devs
a simple claim api.
+Devs
claim their resources and the composition takes care of the rest.
+
+
+minikube start
+
+
+helm repo add crossplane-stable \
+ https://charts.crossplane.io/stable
+
+helm repo update
+
+helm upgrade --install \
+ crossplane crossplane-stable/crossplane \
+ --namespace crossplane-system \
+ --create-namespace \
+ --wait
+
+
+
+export SA_NAME="YOUR-SA-NAME"
+
+export SA="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
+
+gcloud iam service-accounts \
+ create $SA_NAME \
+ --project $PROJECT_ID
+
+export ROLE=roles/admin
+
+gcloud projects add-iam-policy-binding \
+ --role $ROLE $PROJECT_ID \
+ --member serviceAccount:$SA
+
+gcloud iam service-accounts keys \
+ create gcp-creds.json \
+ --project $PROJECT_ID \
+ --iam-account $SA
+
+kubectl --namespace crossplane-system \
+ create secret generic gcp-creds \
+ --from-file creds=./gcp-creds.json
+
+
+cat <<EOF | kubectl create -f -
+apiVersion: pkg.crossplane.io/v1
+kind: Provider
+metadata:
+ name: provider-gcp-container
+spec:
+ package: xpkg.upbound.io/upbound/provider-gcp-container:v0.41.1
+EOF
+
+
+PROJECT_ID=$(gcloud config get-value project)
+
+echo "apiVersion: gcp.upbound.io/v1beta1
+kind: ProviderConfig
+metadata:
+ name: default
+spec:
+ projectID: $PROJECT_ID
+ credentials:
+ source: Secret
+ secretRef:
+ namespace: crossplane-system
+ name: gcp-creds
+ key: creds" \
+ | kubectl apply --filename -
+
+
+kubectl apply --filename xrd.yaml
+
+
+kubectl apply --filename composition.yaml
+
+
+kubectl create ns infra
+
+
+kubectl apply --filename a-team-gke/claim.yaml -n infra
+
+
+kubectl describe composition cluster-google
+
+kubectl explain CompositeCluster --recursive
+
+kubectl get compositeclusters
+
+ kubectl describe CompositeCluster a-team-gke
+
+kubectl get clusters,nodepools
+
+
+kubectl --namespace infra \
+ get secret a-team-gke-cluster \
+ --output jsonpath="{.data.kubeconfig}" \
+ | base64 -d \
+ | tee kubeconfig.yaml
+
+export KUBECONFIG=$PWD/kubeconfig.yaml
+
+kubectl get nodes
+
+kubectl get namespaces
+
+
+
+unset KUBECONFIG
+kubectl delete -n infra --filename a-team-gke/claim.yaml
+
+
+
+
+
+