Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Deploying workloads to AKS
📖 Scenario: You are working as a cloud engineer for a company that wants to deploy a simple web application on Azure Kubernetes Service (AKS). Your task is to create the necessary Kubernetes deployment and service configuration files step-by-step to deploy the application and expose it to the internet.
🎯 Goal: Build a Kubernetes deployment and service YAML configuration to deploy a web application container on AKS and expose it via a LoadBalancer service.
📋 What You'll Learn
Create a Kubernetes deployment YAML with the exact name webapp-deployment
Use the container image nginx:1.23.3 in the deployment
Set the number of replicas to 3
Create a Kubernetes service YAML named webapp-service of type LoadBalancer
Expose port 80 on the service and target port 80 on the pods
💡 Why This Matters
🌍 Real World
Deploying containerized applications on AKS is a common task for cloud engineers to make applications scalable and accessible.
💼 Career
Understanding how to write Kubernetes deployment and service YAML files is essential for roles like DevOps engineer, cloud engineer, and site reliability engineer.
Progress0 / 4 steps
1
Create the initial deployment YAML
Create a Kubernetes deployment YAML named webapp-deployment with 3 replicas using the container image nginx:1.23.3. Set the container port to 80.
Azure
Hint
Start with apiVersion: apps/v1 and kind: Deployment. Use replicas: 3 and specify the container image and port inside spec.template.spec.containers.
2
Add labels and selectors for the deployment
Add the label app: webapp to both the deployment's metadata.labels and the pod template's metadata.labels. Also add a selector.matchLabels with app: webapp to the deployment spec.
Azure
Hint
Labels help Kubernetes know which pods belong to this deployment. Add app: webapp under metadata.labels and template.metadata.labels. Also add the same label under selector.matchLabels.
3
Create the service YAML to expose the deployment
Create a Kubernetes service YAML named webapp-service of type LoadBalancer. It should select pods with label app: webapp and expose port 80 on the service, targeting port 80 on the pods.
Azure
Hint
Use kind: Service with type: LoadBalancer. The selector must match the deployment's pod label app: webapp. Expose port 80 and target port 80.
4
Add final metadata and comments
Add a comment at the top of the YAML file stating # Kubernetes deployment and service for webapp. Also add a label environment: production under the deployment's metadata.labels.
Azure
Hint
Comments start with #. Add the comment at the very top. Add the label environment: production under metadata.labels in the deployment.
Practice
(1/5)
1. What is the main purpose of using a Deployment in Azure Kubernetes Service (AKS)?
easy
A. To monitor the health of the AKS cluster nodes
B. To manage and maintain a specified number of app copies running
C. To expose the app to the internet
D. To store data persistently for the app
Solution
Step 1: Understand Deployment role in AKS
A Deployment ensures that a specified number of replicas of an app are running and manages updates to those replicas.
Step 2: Differentiate from other components
Persistent storage is handled by volumes, exposure by Services, and monitoring by Azure Monitor, not Deployments.
Final Answer:
To manage and maintain a specified number of app copies running -> Option B
How many pods will AKS try to run for this Deployment?
medium
A. 3
B. 2
C. 1
D. 0
Solution
Step 1: Identify the replicas count in the YAML
The replicas field is set to 3, meaning AKS will run 3 pods.
Step 2: Confirm no other fields override replicas
There is no override or scaling specified, so the number remains 3.
Final Answer:
3 -> Option A
Quick Check:
replicas: 3 means 3 pods [OK]
Hint: Check 'replicas' field for pod count [OK]
Common Mistakes:
Ignoring the replicas field
Confusing selector labels with pod count
Assuming default pod count is 1
4. You applied a Deployment YAML but your pods are stuck in 'Pending' state. Which of these is the most likely cause?
medium
A. The container image name is misspelled
B. The Service type is set to ClusterIP
C. The Deployment YAML is missing the 'replicas' field
D. There are not enough cluster resources to schedule pods
Solution
Step 1: Understand what 'Pending' pod state means
Pods in 'Pending' usually wait for resources like CPU or memory to be available on nodes.
Step 2: Evaluate options for causing Pending state
Misspelled image causes ImagePull errors, missing replicas defaults to 1, and Service type doesn't affect pod scheduling.
Final Answer:
There are not enough cluster resources to schedule pods -> Option D
Quick Check:
Pending pods = resource shortage [OK]
Hint: Pending pods often mean no resources available [OK]
Common Mistakes:
Confusing image pull errors with Pending state
Thinking missing replicas stops pod creation
Assuming Service type affects pod scheduling
5. You want to expose your AKS Deployment to the internet with a stable IP and load balancing. Which Kubernetes Service type should you use in your YAML?
hard
A. LoadBalancer
B. NodePort
C. ClusterIP
D. ExternalName
Solution
Step 1: Identify Service types and their purposes
ClusterIP exposes service inside cluster only, NodePort exposes on node ports, LoadBalancer creates cloud load balancer with stable IP, ExternalName maps to external DNS.
Step 2: Choose Service type for internet exposure with stable IP
LoadBalancer is the correct choice to get a cloud-managed IP and load balancing for external access.
Final Answer:
LoadBalancer -> Option A
Quick Check:
Internet exposure with stable IP = LoadBalancer [OK]
Hint: Use LoadBalancer Service for external stable IP [OK]