What's in this module
TOPIC 1 Deployment methods overview
There are two broad approaches to getting your application onto an EKS cluster: manual deployment via kubectl and automated deployment via a CI/CD pipeline. Manual is fine for learning; production teams use automation to eliminate human error and enforce repeatable deployments.
Manual — kubectl
- Apply YAML manifests directly
- Fast for development / testing
- No pipeline overhead
- Error-prone at scale
- No audit trail / rollback automation
Automated — CI/CD pipeline
- Triggered by code commits
- Build → test → push → deploy
- Repeatable, auditable, consistent
- Integrates with ECR + Helm
- Required for production teams
kubectl to apply manifests directly to the cluster.Automated deployment — using a CI/CD pipeline (build → test → push → deploy) that removes human error and enforces consistency.
TOPIC 2 Scaling deployment workflow — 3 steps
The course defines a three-step framework for scaling your deployment workflow beyond manual kubectl. Each step unlocks a new layer of reliability and automation.
2. Choose your package manager / deployment tools (e.g. Helm)
3. Automate your CI/CD pipeline (build → push → deploy on every commit)
TOPIC 3 Amazon ECR — the container registry
Amazon Elastic Container Registry (ECR) is a fully managed registry for Docker images and OCI artifacts. It is highly available, scalable, encrypted at rest, and tightly integrated with IAM — no separate credential management required when running on AWS.
ECR key features
- Fully managed — no servers to operate
- Highly available & scalable
- Encryption at rest (AWS KMS)
- Optional vulnerability scanning
- IAM integration (no extra credentials)
- Image signing support
- Docker & OCI artifact support
ECR registry & repo hierarchy
- Each AWS account → ONE default private registry
- Each AWS account → ONE default public registry
- Multiple repositories within a registry
- Each repository holds multiple image versions (tags)
- URI format:
<account>.dkr.ecr.<region>.amazonaws.com/<repo>
aws ecr get-login-password | docker login.TOPIC 4 ECR image scanning
ECR offers two vulnerability scanning tiers. Basic scanning uses the open-source Clair engine and can run on push or on demand. Enhanced scanning uses Amazon Inspector and covers both OS packages and application language packages, emitting real-time events.
| Feature | Basic scanning | Enhanced scanning |
|---|---|---|
| Engine | Clair (open-source) | Amazon Inspector |
| Trigger | On push OR on demand | Continuous / on push |
| Frequency limit | Max once per 24 hours per image | No 24h limit |
| Coverage | OS packages only | OS + language packages (npm, pip, gem…) |
| EventBridge events | No | Yes — automate remediation |
| Cost | Included | Extra cost (Inspector pricing) |
• Language package scanning (npm, pip, gem — not just OS packages)
• EventBridge events for automated remediation workflows
• No 24-hour frequency limit
Trade-off: extra cost via Amazon Inspector pricing.
TOPIC 5 ECR workflow — 5 steps end-to-end
Getting a container image from your workstation into ECR and then running in an EKS Pod follows a repeatable five-step workflow. Know this sequence — it is the foundation of every CI/CD pipeline that targets EKS.
aws ecr get-login-password to get a short-lived token and pass to docker login.docker push <ecr-uri>:<tag> — layers stream to ECR.aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.comThis exchanges your IAM credentials for a short-lived Docker registry token.
ecr:GetAuthorizationToken and ecr:BatchGetImage permissions. The kubelet uses those permissions to automatically authenticate to ECR — no stored credentials needed.<account-id>.dkr.ecr.<region>.amazonaws.com/<repository-name>:<tag>Example:
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:1.0.0TOPIC 6 Helm — the Kubernetes package manager
Helm is the Kubernetes package manager. It lets you bundle your manifests into a versioned, shareable chart and deploy it with a single command. Helm handles upgrades, rollbacks, and configuration overrides through its templating engine.
• Create standardised, reusable manifest templates
• Eliminate deployment errors (no manual YAML editing per environment)
• Manage app versioning (chart versions + app versions)
• Perform in-place upgrades and rollbacks with a single command
2. Eliminate deployment errors (no manual YAML edits)
3. Manage app versioning across environments
4. In-place upgrades (and
helm rollback for quick recovery)
{{ .Release.Name }}.TOPIC 7 Helm chart anatomy & templating
A Helm chart is a directory with a defined structure. The Chart.yaml file is mandatory. Default configuration lives in values.yaml. The templates/ folder contains Go-templated Kubernetes manifests that are rendered at install/upgrade time.
├── Chart.yamlMANDATORY chart name, version, description
├── values.yamlMANDATORY default configuration values
├── templates/MANDATORY
│ ├── pod.yaml Go-templated K8s manifests
│ ├── service.yaml
│ └── deployment.yaml
└── charts/optional chart dependencies
Templating example — values feed into manifests at render time:
templates/pod.yaml
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
spec:
containers:
- name: {{ .Values.name }}
image: {{ .Values.image }}:{{ .Values.tag }}
values.yaml
image: nginx
tag: 0.2
port: 8080
A. pod.yaml B. values.yaml C. charts/ D. Chart.yaml
Chart.yaml is mandatory. It contains the chart's name, version, and description. values.yaml (B) is also mandatory but holds config values, not chart metadata. charts/ (C) is optional (dependencies).Chart.yaml is the chart's manifest. Key fields:•
name — chart name•
version — chart version (semver)•
description — human-readable description•
apiVersion — Helm API version (v2)•
appVersion — the app version being deployed
{{ .Release.Name }} — the name given at helm install time{{ .Release.Namespace }} — the target namespaceAll user values are under
{{ .Values.* }}. Built-in chart metadata is under {{ .Chart.* }}.charts/ directory?charts/ directory holds chart dependencies — other Helm charts that your chart depends on. These are declared in Chart.yaml under dependencies: and downloaded via helm dependency update. It is optional if you have no sub-charts.1.
--set key=value flag on the command line (quick overrides)2.
-f custom-values.yaml to supply an entire override fileThis lets you use one chart across dev/staging/prod by supplying environment-specific values without changing templates.
TOPIC 8 Helm chart sources
Charts can be stored in and distributed from multiple repositories. The course covers three main sources for AWS deployments. Lab 2 specifically uses Amazon S3 as a Helm repository.
2. Amazon ECR — OCI artifact support; charts alongside images
3. Amazon S3 — private bucket as Helm repo; used in Lab 2
1. Configure an S3 bucket as a Helm chart repository
2. Package and load your chart into S3
3. Deploy your application using
helm install from S34. Review
Chart.yaml and values.yaml
• Single registry for both images and charts
• IAM-controlled access — no separate credentials
• Private by default — not publicly discoverable
• OCI standard — push/pull with standard Docker tooling
TOPIC 9 Knowledge checks (from the course)
Official course knowledge-check questions. Try to answer before flipping.
A. Each account has one default private AND one default public registry
B. Scanning requires Inspector on all repos
C. Repos must be in the same region as the EKS cluster
D. Multiple repositories can exist within a single registry
A: Each AWS account gets exactly one default private registry and one default public registry.
D: Multiple repositories (one per app/service) can exist within a single registry.
B is false (Inspector is optional). C is false (cross-region is supported).
A. pod.yaml B. values.yaml C. charts/ D. Chart.yaml
Chart.yaml is the ONLY mandatory file that contains chart metadata (name, version, description). values.yaml is also mandatory but holds configuration values, not chart metadata. charts/ is optional.
Enhanced: continuous scanning (can run more than once per 24 hours) + emits EventBridge events for automated workflows. Extra cost.
{{ .Release.Name }} — set when you run helm install <release-name> ./chart.This is distinct from
{{ .Chart.Name }} (the chart name from Chart.yaml) and {{ .Values.name }} (a user-defined value in values.yaml).