Terraform Challenge-1
This blog consists of a set of challenges that will assist you in mastering provisioning and managing infrastructure using Terraform.
Table of contents
For these challenges, you will start with deploying a simple web app on an existing Kubernetes cluster and then move on to more complicated challenges involving provisioning resources and entire infrastructure stacks in the AWS cloud.
Signup to KodeKloud for performing this challenge. It's free!!!
Architecture Diagram
Challenge
In this challenge, we will deploy several Kubernetes resources using Terraform. If you don't know Kubernetes, this will be somewhat confusing as the resource schema only makes sense if you understand Kubernetes.
Utilize /root/terraform_challenge
a directory to store your Terraform configuration files.
The requirements in detail:
- Terraform version:
1.1.5
installed on controlplane?
Configure terraform and provider
settings within the provider.tf
file with the following specifications:
Configure terraform to use
hashicorp/kubernetes
provider.Specify the provider's local name:
kubernetes
Provider version:
2.11.0
Configure Kubernetes provider with the path to your
kubeconfig
file:/root/.kube/config
Create a terraform resource frontend
for Kubernetes deployment with the following specs:
Deployment Name:
frontend
Deployment Labels =
name: frontend
Replicas:
4
Pod Labels =
name: webapp
Image:
kodekloud/webapp-color:v1
Container name:
simple-webapp
Container port:
8080
Create a terraform resource webapp-service
for Kubernetes service with the following specs:
Service name:
webapp-service
Service Type:
NodePort
Port:
8080
NodePort:30080
Solution:
1. Check Terraform
which terraform
Nothing! Therefore we must install it. Note that unzip is also not installed, and we need that too!
apt update
apt install unzip -y
curl -L -o /tmp/terraform_1.1.5_linux_amd64.zip https://releases.hashicorp.com/terraform/1.1.5/terraform_1.1.5_linux_amd64.zip
unzip -d /usr/local/bin /tmp/terraform_1.1.5_linux_amd64.zip
2. Configure terraform and provider settings within the provider.tf file
You should now refer to the documentation for this provider. Go to the Terraform Registry and paste hashicorp/kubernetes
it into the search bar. This will give you the latest version, so adjust the URL in your browser to 2.11.0
Click on the USE PROVIDER button for the configuration block. Copy this, and use vi
it to create provider.tf. Paste in and adjust as per the question requirements.
provider.tf
terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
version = "2.11.0"
}
}
}
provider "kubernetes" {
config_path = "/root/.kube/config"
}
Now we can initialize the provider
terraform init
3. Create terraform resources frontend & webapp-services for Kubernetes deployment & Kubernetes services
Refer to the provider documentation for kubernetes_deployment & kubernetes_service
main.tf
resource "kubernetes_deployment" "frontend" {
metadata {
name = "frontend"
labels = {
name = "frontend"
}
}
spec {
replicas = 4
selector {
match_labels = {
name = "webapp"
}
}
template {
metadata {
labels = {
name = "webapp"
}
}
spec {
container {
image = "kodekloud/webapp-color:v1"
name = "simple-webapp"
port {
container_port = 8080
}
}
}
}
}
}
resource "kubernetes_service" "webapp-service" {
metadata {
name = "webapp-service"
}
spec {
selector = {
name = "webapp"
}
port {
port = 8080
target_port = 8080
node_port = 30080
}
type = "NodePort"
}
}
4. Deploy
terraform plan
terraform apply
Thank you so much for taking your valuable time to read
I took the initiative to learn in public and share my work with others. I tried my level best in squeezing as much information as possible in the easiest manner.
Hope you learned something new today :)
Signup to KodeKloud for performing this challenge.