📖 Scenario: You are working as a cloud engineer for a company that wants to deploy a simple web application on Amazon Elastic Kubernetes Service (EKS). You will create the necessary Kubernetes deployment and service configuration files step-by-step to run the application on EKS.
🎯 Goal: Build a Kubernetes deployment and service manifest to deploy a web application on EKS. You will create the deployment YAML with the container image, add configuration for replicas, and expose the deployment with a service.
📋 What You'll Learn
Create a Kubernetes deployment manifest with a specific container image
Add a replica count configuration to the deployment
Define container port in the deployment
Create a Kubernetes service manifest to expose the deployment
💡 Why This Matters
🌍 Real World
Deploying containerized applications on EKS is a common task for cloud engineers to run scalable and managed workloads.
💼 Career
Understanding how to write Kubernetes manifests and deploy workloads on EKS is essential for cloud and DevOps roles.
Progress0 / 4 steps
1
Create the initial Kubernetes deployment manifest
Create a Kubernetes deployment manifest named deployment.yaml with the following exact content: apiVersion apps/v1, kind Deployment, metadata name webapp, and spec template with a container named webapp-container using the image nginx:1.21. Write the YAML content exactly as specified.
AWS
Hint
Start by writing the YAML keys exactly as shown. Indentation matters in YAML.
2
Add replica count to the deployment
Add a replicas field with the value 3 under the spec section of the deployment manifest in deployment.yaml. This will run three copies of the web application.
AWS
Hint
Place replicas: 3 directly under spec: at the same indentation level as selector: and template:.
3
Add container port to the deployment
Add a ports section under the container in the deployment manifest with a single port number 80. This tells Kubernetes which port the container listens on.
AWS
Hint
Indent ports: under the container, then list - containerPort: 80.
4
Create a service to expose the deployment
Create a Kubernetes service manifest named service.yaml that exposes the deployment webapp on port 80 using type LoadBalancer. The service should select pods with label app: webapp. Write the YAML manifest exactly.
AWS
Hint
Use selector to match pods with label app: webapp. Set service type to LoadBalancer.
Practice
(1/5)
1. What is the main purpose of Amazon EKS when deploying workloads?
easy
A. To run containerized applications using Kubernetes without managing servers
B. To store large amounts of data in the cloud
C. To create virtual machines for running applications
D. To manage user access and permissions
Solution
Step 1: Understand EKS functionality
Amazon EKS is a managed Kubernetes service that lets you run containers without managing the underlying servers.
Step 2: Compare options
Storing data relates to services like S3, creating VMs to EC2, and managing permissions to IAM--none of which is EKS's core purpose.
Final Answer:
To run containerized applications using Kubernetes without managing servers -> Option A
Quick Check:
EKS = Managed Kubernetes for containers [OK]
Hint: EKS = Kubernetes service for containers, not storage or VMs [OK]
Common Mistakes:
Confusing EKS with storage services like S3
Thinking EKS manages virtual machines directly
Mixing EKS with IAM user management
2. Which of the following is the correct command to deploy an application using a YAML file named app-deployment.yaml on EKS?
easy
A. kubectl run app-deployment.yaml
B. eksctl create app app-deployment.yaml
C. aws eks deploy app-deployment.yaml
D. kubectl apply -f app-deployment.yaml
Solution
Step 1: Identify the kubectl command for applying YAML
The correct command to deploy resources defined in a YAML file is kubectl apply -f filename.
Step 2: Evaluate other options
kubectl run app-deployment.yaml is for running individual pods, not applying YAML manifests. eksctl create app app-deployment.yaml misuses eksctl, which is primarily for EKS cluster creation. aws eks deploy app-deployment.yaml is not a valid AWS CLI command.
Final Answer:
kubectl apply -f app-deployment.yaml -> Option D
Quick Check:
Deploy YAML with kubectl apply -f [OK]
Hint: Use kubectl apply -f for YAML deployment files [OK]
Common Mistakes:
Using eksctl for direct YAML deployment
Confusing kubectl run with apply
Trying AWS CLI commands that don't exist
3. Given this YAML snippet for a Deployment on EKS:
What will be the number of running pods after applying this deployment?
medium
A. 1
B. 3
C. 0
D. Depends on the node capacity
Solution
Step 1: Read the replicas field in the Deployment spec
The YAML specifies replicas: 3, which means Kubernetes will create 3 pods for this deployment.
Step 2: Understand pod creation behavior
Unless there is a scheduling issue, Kubernetes will run 3 pods as requested.
Final Answer:
3 -> Option B
Quick Check:
replicas = number of pods running [OK]
Hint: replicas field sets pod count in Deployment spec [OK]
Common Mistakes:
Assuming only 1 pod runs by default
Thinking pods depend on node capacity without error
Confusing selector labels with pod count
4. You tried to deploy a workload on EKS using kubectl apply -f deployment.yaml, but got an error: error: unable to recognize "deployment.yaml": no matches for kind "Deploy". What is the likely cause?
medium
A. The cluster is not running
B. kubectl is not installed
C. The YAML file has a typo in the kind field; it should be 'Deployment' not 'Deploy'
D. The image name in the YAML is incorrect
Solution
Step 1: Analyze the error message
The error says no matches for kind "Deploy", which means Kubernetes does not recognize this resource kind.
Step 2: Check the YAML kind field
The correct kind for workload deployment is "Deployment", not "Deploy". This typo causes the error.
Final Answer:
The YAML file has a typo in the kind field; it should be 'Deployment' not 'Deploy' -> Option C
Quick Check:
Kind field must be exact Kubernetes resource name [OK]
Hint: Check resource kind spelling in YAML for errors [OK]
Common Mistakes:
Ignoring error details about resource kind
Assuming cluster or kubectl issues without checking YAML
Blaming image name for syntax errors
5. You want to deploy a stateless web app on EKS that automatically scales between 2 and 5 pods based on CPU usage. Which combination of Kubernetes resources should you define in your YAML files?
hard
A. A Deployment with replicas set to 2 and a Horizontal Pod Autoscaler targeting CPU usage with max replicas 5
B. A StatefulSet with replicas 5 and a LoadBalancer service
C. A DaemonSet to run pods on every node and a Cluster Autoscaler
D. A Deployment with replicas fixed at 5 and a NodePort service
Solution
Step 1: Identify resource for managing pod replicas with scaling
A Deployment manages stateless pods and can be combined with a Horizontal Pod Autoscaler (HPA) to scale pods based on CPU.
Step 2: Understand autoscaling setup
Set Deployment replicas to minimum 2, and HPA to scale up to max 5 pods based on CPU usage.
Step 3: Evaluate other options
StatefulSet is for stateful apps, DaemonSet runs pods on all nodes (not scaling pods), fixed replicas do not autoscale.
Final Answer:
A Deployment with replicas set to 2 and a Horizontal Pod Autoscaler targeting CPU usage with max replicas 5 -> Option A
Quick Check:
Deployment + HPA = autoscaling pods [OK]
Hint: Use Deployment + HPA for CPU-based pod autoscaling [OK]
Common Mistakes:
Using StatefulSet for stateless apps
Confusing DaemonSet with autoscaling pods
Setting fixed replicas without autoscaler
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.