Skip to content

Instantly share code, notes, and snippets.

@vfarcic
Last active March 17, 2024 19:34
Show Gist options
  • Save vfarcic/269d2e963f2857ca857d2b99f40dead2 to your computer and use it in GitHub Desktop.
Save vfarcic/269d2e963f2857ca857d2b99f40dead2 to your computer and use it in GitHub Desktop.
# Source https://gist.github.com/269d2e963f2857ca857d2b99f40dead2
git clone https://github.com/vfarcic/devops-toolkit-crossplane
cd devops-toolkit-crossplane
# Create a local Kubernetes cluster
kubectl create namespace crossplane-system
kubectl create namespace a-team
#########
# Azure #
#########
az ad sp create-for-rbac \
--sdk-auth \
--role Owner \
| tee azure-creds.json
export AZURE_CLIENT_ID=$(\
cat azure-creds.json \
| grep clientId \
| cut -c 16-51)
export AAD_GRAPH_API=00000003-0000-0000-c000-000000000000
az ad app permission add \
--id "${AZURE_CLIENT_ID}" \
--api ${AAD_GRAPH_API} \
--api-permissions \
e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope \
06da0dbc-49e2-44d2-8312-53f166ab848a=Scope \
7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role
az ad app permission grant \
--id $AZURE_CLIENT_ID \
--api $AAD_GRAPH_API \
--expires never
az ad app permission admin-consent \
--id "${AZURE_CLIENT_ID}"
kubectl --namespace crossplane-system \
create secret generic azure-creds \
--from-file creds=./azure-creds.json
####################
# Setup Crossplane #
####################
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
kubectl apply \
--filename crossplane-config/provider-azure.yaml
kubectl apply \
--filename crossplane-config/provider-config-azure.yaml
# Please re-run the previous command if the output is `unable to recognize ...`
########
# Demo #
########
# Already running Crossplane in a temp cluster
cat crossplane-config/config-k8s.yaml
kubectl apply \
--filename crossplane-config/config-k8s.yaml
cat examples/k8s/azure-aks.yaml
kubectl --namespace a-team apply \
--filename examples/k8s/azure-aks.yaml
kubectl get managed
# Shut down the temporary cluster
export KUBECONFIG=$PWD/kubeconfig.yaml
# Get KubeConfig of the newly created cluster
kubectl create namespace crossplane-system
kubectl create namespace a-team
kubectl --namespace crossplane-system \
create secret generic azure-creds \
--from-file creds=./azure-creds.json
helm upgrade --install \
crossplane crossplane-stable/crossplane \
--namespace crossplane-system \
--create-namespace \
--wait
kubectl apply \
--filename crossplane-config/provider-azure.yaml
kubectl apply \
--filename crossplane-config/provider-config-azure.yaml
kubectl apply \
--filename crossplane-config/config-k8s.yaml
cat examples/k8s/azure-aks.yaml
kubectl --namespace a-team apply \
--filename examples/k8s/azure-aks.yaml
kubectl get managed
# Set `spec.parameters.nodeSize` to `5` in `examples/k8s/azure-aks.yaml`
kubectl --namespace a-team apply \
--filename examples/k8s/azure-aks.yaml
kubectl get managed
kubectl get nodes
kubectl describe kubernetescluster ateamaks
# This works only with resources that can be named explicitly. Otherwise, we'd need to use the `external-name` label.
# Open https://github.com/crossplane/crossplane/blob/master/design/one-pager-managed-resource-api-design.md#external-resource-name
###########
# Destroy #
###########
unset KUBECONFIG
az group delete --name ateamaks
cat examples/k8s/azure-aks.yaml \
| sed -e "s@minNodeCount: .*@minNodeCount: 3@g" \
| tee examples/k8s/azure-aks.yaml
@rachamaduguravi
Copy link

kubectl describe kubernetescluster ateamaks](url)

shows below error

Message: apply failed: creating Managed Kubernetes Cluster "ateamaks" (Resource Group "ateamaks"): containerservice.ManagedClustersClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: Code="AgentPoolK8sVersionNotSupported" Message="Version 1.21.2 is not supported in this region. Please use [az aks get-versions] command to get the supported version list in this region.

az aks get-versions --location eastus --output table

KubernetesVersion Upgrades


1.23.5 None available
1.23.3 1.23.5
1.22.6 1.23.3, 1.23.5
1.22.4 1.22.6, 1.23.3, 1.23.5
1.21.9 1.22.4, 1.22.6
1.21.7 1.21.9, 1.22.4, 1.22.6

please inform in which file or what is needed to change the string from "1.21.2" to above version and attempt?

thanks!

@vfarcic
Copy link
Author

vfarcic commented May 12, 2022

Thanks for letting me know.

I just updated the manifests to use 1.23.5.

The change is in https://github.com/vfarcic/devops-toolkit-crossplane/blob/master/packages/k8s/aks.yaml#L38. Alternatively, you can specify any version through XR definition which, in that demo, is https://github.com/vfarcic/devops-toolkit-crossplane/blob/master/examples/azure-aks.yaml. You can do that by adding spec.parameters.version entry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment