# Getting Started with AKS using Terraform More resources: Terraform provider for Azure [here](https://github.com/terraform-providers/terraform-provider-azurerm)
## Azure CLI You can get the Azure CLI on [Docker-Hub](https://hub.docker.com/_/microsoft-azure-cli)
We'll need the Azure CLI to gather information so we can build our Terraform file. ``` # Run Azure CLI docker run -it --rm -v ${PWD}:/work -w /work --entrypoint /bin/sh mcr.microsoft.com/azure-cli:2.6.0 ``` ## Login to Azure ``` #login and follow prompts az login TENTANT_ID= # view and select your subscription account az account list -o table SUBSCRIPTION= az account set --subscription $SUBSCRIPTION ``` ## Create Service Principal Kubernetes needs a service account to manage our Kubernetes cluster
Lets create one!
``` SERVICE_PRINCIPAL_JSON=$(az ad sp create-for-rbac --skip-assignment --name aks-getting-started-sp -o json) # Keep the `appId` and `password` for later use! SERVICE_PRINCIPAL=$(echo $SERVICE_PRINCIPAL_JSON | jq -r '.appId') SERVICE_PRINCIPAL_SECRET=$(echo $SERVICE_PRINCIPAL_JSON | jq -r '.password') #note: reset the credential if you have any sinlge or double quote on password az ad sp credential reset --name "aks-getting-started-sp" # Grant contributor role over the subscription to our service principal az role assignment create --assignee $SERVICE_PRINCIPAL \ --scope "/subscriptions/$SUBSCRIPTION" \ --role Contributor ``` For extra reference you can also take a look at the Microsoft Docs: [here](https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/aks/kubernetes-service-principal.md)
# Terraform CLI ``` # Get Terraform curl -o /tmp/terraform.zip -LO https://releases.hashicorp.com/terraform/0.12.28/terraform_0.12.28_linux_amd64.zip unzip /tmp/terraform.zip chmod +x terraform && mv terraform /usr/local/bin/ cd kubernetes/cloud/azure/terraform/ ``` # Generate SSH key ``` ssh-keygen -t rsa -b 4096 -N "VeryStrongSecret123!" -C "your_email@example.com" -q -f ~/.ssh/id_rsa SSH_KEY=$(cat ~/.ssh/id_rsa.pub) ``` ## Terraform Azure Kubernetes Provider Documentation on all the Kubernetes fields for terraform [here](https://www.terraform.io/docs/providers/azurerm/r/kubernetes_cluster.html) ``` terraform init terraform plan -var serviceprinciple_id=$SERVICE_PRINCIPAL \ -var serviceprinciple_key="$SERVICE_PRINCIPAL_SECRET" \ -var tenant_id=$TENTANT_ID \ -var subscription_id=$SUBSCRIPTION \ -var ssh_key="$SSH_KEY" terraform apply -var serviceprinciple_id=$SERVICE_PRINCIPAL \ -var serviceprinciple_key="$SERVICE_PRINCIPAL_SECRET" \ -var tenant_id=$TENTANT_ID \ -var subscription_id=$SUBSCRIPTION \ -var ssh_key="$SSH_KEY" ``` # Lets see what we deployed ``` # grab our AKS config az aks get-credentials -n aks-getting-started -g aks-getting-started # Get kubectl curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl kubectl get svc ``` # Clean up ``` terraform destroy -var serviceprinciple_id=$SERVICE_PRINCIPAL \ -var serviceprinciple_key="$SERVICE_PRINCIPAL_SECRET" \ -var tenant_id=$TENTANT_ID \ -var subscription_id=$SUBSCRIPTION \ -var ssh_key="$SSH_KEY" ```