Bird
Raised Fist0
AWScloud~5 mins

Deploying workloads on EKS in AWS - Commands & Configuration

Choose your learning style10 modes available
Introduction
Deploying workloads on EKS means running your applications inside a managed Kubernetes cluster on AWS. This helps you run and scale apps easily without managing servers yourself.
When you want to run a web app that can handle many users and scale automatically.
When you need to deploy microservices that communicate with each other inside a secure environment.
When you want to update your app without downtime using rolling updates.
When you want to use Kubernetes tools but avoid managing the control plane.
When you want to run containerized apps with AWS integrations like load balancers and storage.
Config File - deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
  labels:
    app: example-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-container
        image: nginx:1.23
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: example-service
spec:
  type: LoadBalancer
  selector:
    app: example-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

This file creates a Deployment and a Service in EKS.

Deployment: Runs 2 copies (replicas) of an Nginx container labeled 'example-app'. It manages updates and restarts.

Service: Exposes the Deployment to the internet using a LoadBalancer on port 80.

Commands
This command tells Kubernetes to create the Deployment and Service defined in the file. It starts running your app on the EKS cluster.
Terminal
kubectl apply -f deployment.yaml
Expected OutputExpected
deployment.apps/example-deployment created service/example-service created
This command lists the running pods (app copies) to check if your app is running correctly.
Terminal
kubectl get pods
Expected OutputExpected
NAME READY STATUS RESTARTS AGE example-deployment-6d4cfb7b7f-abcde 1/1 Running 0 30s example-deployment-6d4cfb7b7f-fghij 1/1 Running 0 30s
This command shows the external IP address assigned to your app by the LoadBalancer so you can access it from the internet.
Terminal
kubectl get service example-service
Expected OutputExpected
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-service LoadBalancer 10.100.200.50 a1b2c3d4e5f6.us-east-1.elb.amazonaws.com 80:31234/TCP 1m
Key Concept

If you remember nothing else from this pattern, remember: a Deployment manages your app copies and a Service exposes them to the internet.

Common Mistakes
Not labeling pods correctly in the Deployment spec.
The Service uses labels to find pods. If labels don't match, the Service won't route traffic to your app.
Ensure the pod template labels match the Service selector exactly.
Forgetting to wait for pods to be in Running status before accessing the app.
If pods are not ready, your app won't respond to requests.
Use 'kubectl get pods' and wait until pods show STATUS as Running.
Using 'kubectl apply' without the correct kubeconfig context set to your EKS cluster.
Commands will run against the wrong cluster or fail.
Set the kubeconfig context to your EKS cluster before running commands.
Summary
Use 'kubectl apply -f deployment.yaml' to create your app Deployment and Service on EKS.
Check pod status with 'kubectl get pods' to ensure your app is running.
Find your app's external address with 'kubectl get service example-service' to access it.

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

  1. Step 1: Understand EKS functionality

    Amazon EKS is a managed Kubernetes service that lets you run containers without managing the underlying servers.
  2. 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.
  3. Final Answer:

    To run containerized applications using Kubernetes without managing servers -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    kubectl apply -f app-deployment.yaml -> Option D
  4. 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:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: nginx:latest

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

  1. 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.
  2. Step 2: Understand pod creation behavior

    Unless there is a scheduling issue, Kubernetes will run 3 pods as requested.
  3. Final Answer:

    3 -> Option B
  4. 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

  1. Step 1: Analyze the error message

    The error says no matches for kind "Deploy", which means Kubernetes does not recognize this resource kind.
  2. Step 2: Check the YAML kind field

    The correct kind for workload deployment is "Deployment", not "Deploy". This typo causes the error.
  3. Final Answer:

    The YAML file has a typo in the kind field; it should be 'Deployment' not 'Deploy' -> Option C
  4. 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

  1. 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.
  2. Step 2: Understand autoscaling setup

    Set Deployment replicas to minimum 2, and HPA to scale up to max 5 pods based on CPU usage.
  3. Step 3: Evaluate other options

    StatefulSet is for stateful apps, DaemonSet runs pods on all nodes (not scaling pods), fixed replicas do not autoscale.
  4. Final Answer:

    A Deployment with replicas set to 2 and a Horizontal Pod Autoscaler targeting CPU usage with max replicas 5 -> Option A
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard