~/learning-path/overview
Getting Started
From first command to cloud architect

You are the artifact.
This course is the pipeline that ships you to production.

A first-principles path from zero infrastructure experience to designing, securing, automating and operating enterprise cloud-native systems. Every module is a stage; you move through them the way code moves from a commit to a running, observed, scalable service.

Source
Linux · Git
M01–02
Build
Docker · K8s
M03–04
Ship
CI/CD
M05
Provision
IaC · Cloud
M06–07
Observe
Telemetry · Sec
M08–09
Architect
Design · Ops
M10–12
12Modules
200hGuided hours
40+Hands-on labs
11Capstones
10+Certs mapped

01What this is

This is a full DevOps bootcamp fused with a Cloud Architecture specialization — roughly 150–250 hours of guided, practical learning. It does not stop at "here is the command." Every concept is taught from first principles: why it exists, what problem it solves, why enterprises adopt it, when not to use it, and what the trade-offs cost you in money, reliability, and security.

The same systems run at Netflix, Stripe, Uber, Spotify, Airbnb and Shopify; throughout the course you will see how those companies actually solve the problem you are studying, so the patterns stick to something real.

The mental model

Software delivery is a manufacturing line. Code is raw material; containers are standardized shipping units; Kubernetes is the warehouse robot fleet; CI/CD is the conveyor belt; observability is quality control; the cloud is the rented factory. Hold that picture and every tool below has an obvious place.

02Who it's for

Complete beginners

No Linux, cloud or infra background needed. Module 1 starts at "what is a terminal."

Developers moving to DevOps

You can code, but pipelines, clusters and infra are a black box. This makes them concrete.

Engineers eyeing architect roles

The later modules and the parallel Architect track focus on system design, governance and cost.

03How to use it

  1. Move through the pipeline in order. Each stage assumes the one before it. The colored rail on the left shows your journey from Foundations (steel) to Architect (amber).
  2. Do the labs, don't just read them. The terminal cards are meant to be typed out in a real sandbox. Reading a kubectl command teaches nothing; breaking a cluster teaches everything.
  3. Build the projects. Every module ends in something deployable. Push it to a public GitHub repo — that repo becomes your portfolio.
  4. Map to a certification. Each module lists the exam objectives it covers (CKA, CKAD, Terraform Associate, AWS/Azure/GCP). Use the Certification Roadmap to sequence them.
  5. Follow the cadence. The Weekly Study Plan turns 200 hours into a realistic 12–16 week schedule at ~12–15 h/week.

04The five tracks of the pipeline

The twelve modules group into five colored phases. Each phase changes what kind of engineer you are.

Foundations · M01–02 Build & Ship · M03–05 Provision & Observe · M06–08 Secure & Design · M09–10 Operate & Capstone · M11–12
Outcome

By the end you can take a raw application and: containerize it, ship it through an automated pipeline onto a highly-available Kubernetes cluster, provision the whole cloud footprint as code across AWS/Azure/GCP, secure the supply chain, instrument it with metrics/logs/traces, and defend the architecture — cost, reliability and DR included — to an executive.

Method

The learning path & teaching method

Ten phases of progression, one rule: every chapter is built so it can only be understood because you understood the last one. No leaps, no assumed knowledge.

01The progression

The course is engineered as a ramp, not a reference manual. You climb through ten escalating phases:

#PhaseWhat changes in you
1Beginner fundamentalsYou stop fearing the terminal and the cloud.
2Intermediate practical skillsYou can build and run real containerized apps.
3Advanced engineeringYou operate clusters and write production pipelines.
4Enterprise architectureYou design systems, not just deploy them.
5Production best practicesYou make choices that survive 3 a.m. incidents.
6Real-world projectsYou have a portfolio of deployable systems.
7Interview preparationYou can explain trade-offs under pressure.
8Industry certificationsYou hold credentials employers filter on.
9Case studiesYou reason from how real companies solved it.
10Future trendsYou can place new tools in a stable mental model.

02First-principles, always

Most material teaches how: "run this command." That produces engineers who are helpless the moment reality differs from the tutorial. This course refuses that. For every technology you will always get six things:

  • Why it exists — the pain that created it.
  • What problem it solves — stated in plain business terms.
  • Why enterprises adopt it — the scale or risk that justifies the complexity.
  • When not to use it — the cases where it is over-engineering.
  • Alternatives — what else solves the same problem and how they differ.
  • Business impact — what it costs and what it earns.
Why this mattersAn engineer who only knows kubectl apply is a button. An engineer who knows why Kubernetes uses a declarative reconciliation loop can debug it, replace it, and decide when a Lambda would have been cheaper. The second engineer gets paid twice as much. This course builds the second engineer.

03What every module gives you

Concept layer

  • Plain-English explanation before any jargon
  • Real-world analogy
  • Architecture & flow diagrams
  • Internal working & data flow

Practice layer

  • Guided labs with real commands
  • A deployable project
  • Troubleshooting / debugging scenarios
  • Reflection questions

Production layer

  • Common mistakes & anti-patterns
  • Best practices & production recommendations
  • Security, cost, scaling, reliability notes
  • Decision-making frameworks

Career layer

  • Certification objective mapping
  • Interview questions with answers
  • Curated free / open-source resources
  • Real customer implementations

04A note on resources

Everything recommended in this course is free or open-source wherever a free option exists: official documentation, open-source projects, public datasets, free cloud sandboxes and community tooling. You can complete the entire path without paying for a course platform — only optional certification exams cost money.

Two career tracks

Cloud Engineer vs Cloud Architect

The same curriculum serves two destinations. The early modules build the Engineer; the later modules and the architectural lens throughout build the Architect. Knowing which you are aiming for changes how you study.

The Cloud / DevOps Engineer

Builds and runs the system. Lives in the terminal and the pipeline. Measured on shipping working software reliably.

  • Writes Dockerfiles & optimizes images
  • Builds CI/CD pipelines
  • Deploys & operates Kubernetes
  • Writes Terraform modules
  • Debugs infrastructure incidents
  • Implements monitoring & alerts
Hands-onImplementationModules 1–9

The Cloud Architect

Decides what to build and why. Lives in diagrams, trade-off tables and executive rooms. Measured on systems that scale, survive and stay affordable.

  • Designs scalable, resilient systems
  • Selects technologies & vendors
  • Owns security & DR architecture
  • Drives cost optimization & governance
  • Plans multi-region & HA strategy
  • Communicates with executives
StrategyDesignModules 10–12
The honest truth

You cannot architect what you have never operated. Every strong architect was first an engineer who felt the pain of bad decisions at 3 a.m. Do the engineering modules properly even if "architect" is your goal — the trade-off intuition you need is forged there, not in slides.

01How the same task looks at each level

SituationEngineer asksArchitect asks
New service to deployWhich base image and how many replicas?Should this be a service at all, or an event consumer / serverless function?
Traffic is growingHow do I add an HPA and node autoscaling?What is the cost curve at 10×, and where does this architecture break?
A region went downHow do I fail traffic over to the standby?What RTO/RPO did we promise, and does the spend match the risk?
Security reviewHow do I scan images and rotate secrets?What is our supply-chain threat model and compliance boundary?
Module 01 · Foundations

Linux Foundations

Every container, every server, every Kubernetes node is Linux. If Linux is a mystery, everything above it is magic — and you cannot debug magic. This module makes the operating system concrete.

LevelBeginner
Est. time18–22 h
PrereqNone

01Learning objectives

By the end of this module you will be able to:

  • Navigate the filesystem, manage files, and read any path on sight
  • Understand the user / group / other permission model and fix "permission denied"
  • Inspect and control processes, signals, and resource usage
  • Read and configure basic Linux networking (interfaces, ports, DNS, firewall)
  • Install and manage software with apt/yum/dnf
  • Write Bash scripts that automate real server tasks with variables, loops, conditionals and functions
Why Linux runs the cloud

Linux is free, open-source, endlessly scriptable, and stripped down it boots in milliseconds with almost no overhead. That is exactly what you want when you are launching ten thousand identical machines. Over 90% of cloud workloads and effectively all container images are Linux. Windows can be skipped at the start; Linux cannot.

02Core concepts

Concept 01

Everything is a file

Linux's founding idea: a hard disk, a network socket, a running process, even your keyboard — the kernel exposes nearly all of them as files you can read from and write to. This is why the same handful of tools (cat, grep, >) work on everything.

AnalogyThink of the OS as a giant building where every room, pipe and switch has the same kind of door handle. Learn one handle and you can open the whole building.
Concept 02

The filesystem hierarchy

There are no drive letters. Everything hangs off a single root /. The important branches: /etc (configuration), /var (logs & changing data), /home (user files), /usr (installed programs), /tmp (scratch), /proc & /sys (live kernel state as files), /bin & /sbin (essential commands).

Concept 03

Permissions: user, group, other

Every file has an owner, a group, and three permission triplets — read (4), write (2), execute (1). chmod 750 deploy.sh means: owner can do everything (7=4+2+1), group can read & execute (5), everyone else gets nothing (0). This single idea is behind most "it works on my machine but not on the server" failures.

flowchart TB
  U["You — the User / Shell (bash, zsh)"]:::u
  S["Shell interprets your command
expands variables, globs, pipes"]:::s K["Kernel — schedules CPU, manages memory,
talks to devices, enforces permissions"]:::k H["Hardware — CPU · RAM · Disk · Network"]:::h U -->|"types: ls -l /var"| S S -->|"syscall: openat, read"| K K -->|"electrical signals"| H H -->|"bytes"| K --> S -->|"prints result"| U classDef u fill:#EAF0FF,stroke:#2B57F0,color:#1B3CC0,stroke-width:1.5px; classDef s fill:#EFE8FC,stroke:#7444D9,color:#3d2c63,stroke-width:1.5px; classDef k fill:#FBEFD7,stroke:#D9870C,color:#7a4a06,stroke-width:1.5px; classDef h fill:#E1F4EB,stroke:#0E9C66,color:#0a5c3c,stroke-width:1.5px;
Fig 1.1 — How a single command travels from your fingers to the metal and back

03Hands-on labs

LAB 1.1Filesystem & permissions tour~30 min

Spin up a free sandbox (killercoda.com or any Ubuntu VM) and run:

bash — ubuntu
# where am I, what's here, who am I
$ pwd && ls -la && whoami
# make a project, inspect permission bits
$ mkdir -p app/logs && touch app/run.sh
$ ls -l app          # note the -rw-r--r-- string
# make the script executable for the owner only
$ chmod 744 app/run.sh && ls -l app/run.sh
# follow live kernel state — every process is a folder
$ ls /proc | head && cat /proc/cpuinfo | grep -m1 "model name"

Reflect: why does /proc/cpuinfo have a size of 0 but still print content?

LAB 1.2Processes, pipes & networking~30 min
bash — ubuntu
# top processes by memory, the Unix way: compose small tools
$ ps aux --sort=-%mem | head -5
# what's listening on which port?
$ sudo ss -tlnp
# can I reach the world? resolve DNS + check route
$ dig +short github.com && ip route
# send a signal: start, find, gracefully stop a process
$ sleep 300 & ; jobs -l
$ kill -TERM %1
PROJECTServer bootstrap automation script~3–4 h

Write bootstrap.sh that prepares a fresh Ubuntu server: updates packages, creates a non-root deploy user, installs a web server, opens the firewall, and logs every step. This is the seed of all infrastructure automation.

#!/usr/bin/env bash
# bootstrap.sh — idempotent server setup. Run: sudo ./bootstrap.sh
set -euo pipefail              # fail fast, fail loud
LOG="/var/log/bootstrap.log"
log(){ echo "[$(date -Is)] $*" | tee -a "$LOG"; }

log "Updating package index"
apt-get update -y && apt-get upgrade -y

if ! id deploy &>/dev/null; then
  log "Creating deploy user"
  useradd -m -s /bin/bash deploy
fi

for pkg in nginx ufw curl; do
  log "Installing $pkg"; apt-get install -y "$pkg"
done

log "Configuring firewall"
ufw allow OpenSSH && ufw allow 'Nginx Full' && ufw --force enable
log "Done. Nginx status: $(systemctl is-active nginx)"

Extend it: make it accept the package list as arguments; add a --dry-run flag; re-run it twice and confirm it changes nothing the second time (idempotency).

04Common mistakes & best practices

Anti-patterns

Running everything as root (one typo wipes the box) · chmod 777 to "fix" permissions (it's a security hole, not a fix) · parsing ls output in scripts (it breaks on spaces — use globs/find) · not quoting variables ("$var" not $var).

Production habits

Always start scripts with set -euo pipefail. Prefer least-privilege users. Make scripts idempotent. Log with timestamps. Use shellcheck on every script before committing.

05Certification mapping

LFCS — partialCompTIA Linux+Foundation for CKA/CKADRHCSA — intro

06Interview preparation

Q1What's the difference between a hard link and a symbolic link?

A hard link is a second name pointing at the same inode (same physical data); delete the original and the data survives. A symbolic link is a tiny file containing a path to another file; delete the target and the symlink dangles. Hard links can't cross filesystems or link directories; symlinks can do both.

Q2A process is stuck. Walk me through diagnosing it.

Find it with ps/top; check state (R/S/D/Z) — D means uninterruptible I/O wait, often disk/NFS. Inspect open files with lsof -p PID, syscalls with strace -p PID, and resource limits. Try kill -TERM (graceful) before kill -KILL (forced). A Zombie means the parent never reaped it — fix the parent.

Q3Explain what happens between typing a command and seeing output.

The shell parses the line, expands variables/globs, resolves the binary via $PATH, then fork()s and exec()s it. The kernel schedules the new process, which makes system calls (e.g. read) the kernel services by talking to hardware. Output is written to the file descriptor for stdout, which the terminal renders.

07Free resources

The Linux Command Line (William Shotts)linuxcommand.org · free book
FREE
OverTheWire: Banditoverthewire.org · gamified shell practice
FREE
Killercoda interactive Linux scenarioskillercoda.com · in-browser terminal
FREE
ShellCheckshellcheck.net · lint your bash automatically
OSS
Module 02 · Foundations

Git & GitHub

Git is the time machine and the collaboration layer for everything you will build. In modern DevOps the Git repository is the single source of truth — pipelines, infrastructure and deployments all trigger from it. Master Git and you've mastered the trigger for the entire pipeline.

LevelBeginner
Est. time12–16 h
PrereqModule 1

01Learning objectives

  • Explain Git's three states (working dir → staging → committed) and the object model
  • Branch, merge, rebase, and resolve merge conflicts without panic
  • Choose between Git Flow and trunk-based development for a given team
  • Run a professional Pull Request & code-review workflow
  • Use tags, releases, and .gitignore correctly
  • Recover from mistakes with reflog, revert, and reset
Why Git won

Before Git, teams emailed zip files and overwrote each other's work. Git is distributed — every clone is a full backup with complete history — and it makes branching nearly free, so a hundred developers can work in parallel and reconcile their work safely. GitOps takes this further: the Git repo becomes the literal definition of what's running in production.

02Core concepts

Concept 01

The three areas

A file moves through three places: the working directory (your edits), the staging area / index (changes marked for the next snapshot), and the repository (committed history). git add stages; git commit snapshots. Understanding this removes 80% of Git confusion.

Concept 02

Commits are snapshots, not diffs

Each commit is a full snapshot of your tree plus a pointer to its parent, identified by a SHA hash. A branch is just a movable pointer to a commit. That's why branching is instant — Git only writes a tiny pointer file.

AnalogyCommits are save points in a video game. A branch is a bookmark to a save point. Switching branches reloads that save; merging combines two playthroughs.
Concept 03

Merge vs rebase

Merge ties two histories together with a merge commit — it preserves exactly what happened. Rebase replays your commits on top of another branch — it rewrites history for a clean, linear log. Rule of thumb: rebase your local work to tidy it; never rebase commits others have already pulled.

gitGraph
   commit id: "init"
   commit id: "feat-a"
   branch feature-login
   checkout feature-login
   commit id: "form"
   commit id: "validation"
   checkout main
   commit id: "hotfix"
   merge feature-login id: "PR #42 merged"
   commit id: "release v1.0" tag: "v1.0"
    
Fig 2.1 — A feature branch created, developed in parallel, reviewed via PR, and merged back to main

03Branching strategies — a decision framework

StrategyBest forTrade-off
Trunk-basedHigh-velocity teams with strong CI & feature flags (Google, most startups)Demands excellent automated tests & discipline; tiny short-lived branches.
Git FlowVersioned/released software with formal release cyclesMany long-lived branches; heavier, slower, more merge pain.
GitHub FlowContinuously deployed web appsSimple (branch → PR → deploy) but assumes deploy-on-merge.
Industry reality

Most elite-performing teams in the DORA research use trunk-based development with short-lived branches and feature flags, because long-lived branches are where integration pain compounds. Reach for Git Flow only when you genuinely ship versioned releases.

04Hands-on labs

LAB 2.1Branch, conflict, resolve~40 min
git
$ git init demo && cd demo
$ echo "v1" > app.txt && git add . && git commit -m "init"
# two branches edit the SAME line -> a conflict
$ git switch -c feature && echo "feature change" > app.txt && git commit -am "feat"
$ git switch main && echo "main change" > app.txt && git commit -am "main"
$ git merge feature        # CONFLICT — open app.txt, pick the right content
$ git add app.txt && git commit   # conflict resolved
# the safety net: see EVERY move you've made
$ git reflog
PROJECTMulti-developer collaboration simulation~3 h

On GitHub: create a repo, protect main (require PR + 1 review + passing checks), then simulate two contributors. Each opens a feature branch, raises a PR, requests review, addresses comments, and merges. Add a CODEOWNERS file and a PR template. You now have the exact workflow used at every serious engineering org.

  • Enable branch protection rules on main
  • Open 2 PRs that touch overlapping files; resolve the conflict in the PR
  • Add a GitHub Actions check so PRs can't merge while tests fail (foreshadows Module 5)
  • Tag a release: git tag -a v1.0 -m "first release" && git push --tags

05Common mistakes & recovery

Anti-patterns

Committing secrets (.env, keys) — they live in history forever; use .gitignore + secret scanning · giant commits ("fixed stuff") · force-pushing shared branches · committing build artifacts · using reset --hard without understanding it.

Recovery cheat

Undo a public commit safely: git revert <sha> (new commit that reverses it). Recover "lost" work: git reflog then git checkout <sha>. Unstage: git restore --staged <file>. There is almost nothing in Git you cannot undo — that's the whole point.

06Certification & interview

GitHub FoundationsGitHub Actions (later)
Q1Difference between git merge and git rebase, and when do you use each?

Merge preserves true history with a merge commit; rebase rewrites your commits onto a new base for a linear history. Use rebase to clean up local commits before sharing; use merge to integrate completed, reviewed branches. Golden rule: never rebase commits that already exist on a remote others use.

Q2How do you remove a secret accidentally committed two weeks ago?

Deleting it in a new commit is not enough — it's still in history. You must rewrite history with git filter-repo (or BFG), force-push, and — critically — rotate the secret, because you must assume it's already compromised. Then add it to .gitignore and enable push protection / secret scanning.

07Free resources

Pro Git (Chacon & Straub)git-scm.com/book · the definitive free book
FREE
Learn Git Branchinglearngitbranching.js.org · visual interactive
FREE
GitHub Skillsskills.github.com · hands-on courses
FREE
Module 03 · Build & Ship

Docker & Containers

"It works on my machine" is the most expensive sentence in software. Containers kill it by packaging your app and its entire environment into one portable, immutable unit that runs identically on a laptop, a CI runner, and a production cluster.

LevelBeginner → Intermediate
Est. time20–26 h
PrereqModules 1–2

01Learning objectives

  • Explain why containers exist and how they differ from virtual machines
  • Describe the Docker architecture: client, daemon, images, containers, registry
  • Understand image layers, the build cache, volumes and networks
  • Write efficient multi-stage Dockerfiles and slash image size
  • Orchestrate multi-container apps with Docker Compose
  • Apply container security: non-root users, image scanning, minimal base images

02Containers vs Virtual Machines — the key idea

A VM virtualizes hardware: each one carries a full guest operating system, so it's heavy (gigabytes) and slow to boot (minutes). A container virtualizes the operating system: containers share the host kernel and isolate only the application's processes and files using Linux namespaces (isolation) and cgroups (resource limits). The result is megabytes, not gigabytes, and millisecond startup.

flowchart TB
  subgraph VM["VIRTUAL MACHINES — heavy"]
    direction TB
    H1["Host OS + Hypervisor"]:::base
    G1["Guest OS"]:::vm --> A1["App A"]:::app
    G2["Guest OS"]:::vm --> A2["App B"]:::app
    H1 --> G1 & G2
  end
  subgraph CT["CONTAINERS — lightweight"]
    direction TB
    H2["Host OS + Container Runtime"]:::base
    H2 --> C1["bins/libs → App A"]:::app
    H2 --> C2["bins/libs → App B"]:::app
    H2 --> C3["bins/libs → App C"]:::app
  end
  classDef base fill:#0F1A2B,stroke:#2B57F0,color:#cdd9f0;
  classDef vm fill:#FBEFD7,stroke:#D9870C,color:#7a4a06;
  classDef app fill:#EAF0FF,stroke:#2B57F0,color:#1B3CC0;
    
Fig 3.1 — One shared kernel lets containers pack far denser than VMs. This is why a server runs ~10× more containers than VMs.

03Core concepts

Concept 01

Image vs container

An image is a read-only template (a class). A container is a running instance of that image (an object). Images are built once and run anywhere; you can spawn a hundred identical containers from one image.

Concept 02

Layers & the build cache

An image is a stack of read-only layers, one per Dockerfile instruction. Layers are cached and shared between images. The practical consequence: order your Dockerfile from least- to most-frequently-changing. Copy package.json and install dependencies before copying your source, so a code change doesn't bust the dependency cache.

Concept 03

Volumes & networks

Containers are ephemeral — when one dies its writable layer is gone. Volumes persist data outside the container lifecycle (databases, uploads). Networks let containers talk to each other by name on an isolated virtual network instead of by brittle IP.

04Multi-stage builds — the production technique

Your build tools (compilers, dev dependencies) should never ship to production. Multi-stage builds use one stage to build and a second, tiny stage to run — carrying only the final artifact across. This routinely cuts an image from 1.2 GB to under 50 MB.

# ---- Stage 1: build ----
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci                 # cached unless deps change
COPY . .
RUN npm run build

# ---- Stage 2: runtime (tiny) ----
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
USER nginx                 # never run as root
EXPOSE 8080
HEALTHCHECK CMD wget -qO- localhost:8080 || exit 1

05Hands-on labs

LAB 3.1Build, run, inspect, optimize~45 min
docker
$ docker build -t myapp:1.0 .
$ docker run -d -p 8080:8080 --name web myapp:1.0
# what's actually inside? layers + size
$ docker history myapp:1.0
$ docker images myapp        # compare size before/after multi-stage
# exec into a running container to debug
$ docker exec -it web sh
# view logs + resource usage live
$ docker logs -f web ; docker stats web
PROJECTMulti-container app with Compose~4–5 h

Containerize a real 3-tier app — a React frontend, a backend API (pick Node, Python, Java or Go), and a Postgres database — and wire them together with Docker Compose. This is the canonical "containerize everything" exercise and directly prepares you for Kubernetes.

# docker-compose.yml
services:
  web:
    build: ./frontend
    ports: ["3000:80"]
    depends_on: [api]
  api:
    build: ./backend
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
    depends_on: [db]
  db:
    image: postgres:16-alpine
    volumes: ["pgdata:/var/lib/postgresql/data"]
    environment:
      POSTGRES_PASSWORD: secret
volumes:
  pgdata:

Then run: docker compose up --build. Containerize the same backend in two languages and compare image sizes (Go vs Java is dramatic).

06Mistakes, security & best practices

Anti-patterns

Running as root inside the container · using :latest (non-reproducible builds) · baking secrets into images (they're extractable from layers) · giant base images (use alpine/distroless) · one process becomes a "fat" container running everything — one concern per container.

Production habits

Pin versions. Use multi-stage + minimal/distroless bases. Add a USER and a HEALTHCHECK. Scan every image with trivy or docker scout in CI. Use .dockerignore. Consider rootless Docker for defense in depth.

07Enterprise example

How Spotify & Shopify use it

Spotify packages hundreds of microservices as containers so any team can deploy independently without coordinating environments. Shopify runs one of the largest containerized Rails fleets in the world — containers let them scale predictably for Black Friday traffic spikes by simply launching more identical units.

08Certification & interview

Docker Certified Associate (DCA)Foundation for CKAD
Q1How do you reduce a Docker image's size?

Multi-stage builds (ship only the artifact); a minimal base (alpine/distroless); combine RUN commands and clean package caches in the same layer; use .dockerignore; remove build-time dependencies. Verify with docker history and dive.

Q2Container exits immediately on start. How do you debug it?

Check docker logs <id> for the crash, and the exit code via docker inspect. A container lives only as long as its main process (PID 1) — if the command finishes or errors, it exits. Common causes: wrong CMD, a foreground process that backgrounds itself, or a missing file. Override the entrypoint to get a shell: docker run -it --entrypoint sh <image>.

09Free resources

Docker Official Documentationdocs.docker.com
FREE
Play with Dockerlabs.play-with-docker.com · free in-browser
FREE
Trivy & Diveaquasecurity/trivy · wagoodman/dive — scan & inspect
OSS
Module 04 · Build & Ship

Kubernetes

One container is easy. A thousand containers across fifty machines — self-healing, auto-scaling, rolling out new versions with zero downtime — is the hard problem Kubernetes was built to solve. This is the largest and most career-defining module in the course.

LevelIntermediate → Advanced
Est. time35–45 h
PrereqModule 3

01Learning objectives

  • Explain the control-plane / worker-node architecture and what each component does
  • Work fluently with Pods, ReplicaSets, Deployments, StatefulSets, DaemonSets
  • Expose apps with Services, Ingress, and understand cluster DNS & service discovery
  • Manage configuration & secrets with ConfigMaps and Secrets
  • Handle storage with Persistent Volumes, PVCs and Storage Classes
  • Secure access with RBAC and isolate workloads with Namespaces
  • Package apps with Helm; autoscale and run highly-available, multi-region clusters
The core idea: declarative reconciliation

You don't tell Kubernetes how to do things step by step. You declare the desired state ("I want 5 replicas of this image") and a control loop continuously compares desired vs actual state and fixes any drift. A node dies? It reschedules the Pods. A container crashes? It restarts it. This single loop is the source of Kubernetes' self-healing superpower — and of its complexity.

02Architecture

flowchart TB
  subgraph CP["CONTROL PLANE — the brain"]
    API["kube-apiserver
front door, all traffic"]:::api ETCD[("etcd
cluster state DB")]:::etcd SCH["scheduler
places Pods on nodes"]:::cp CM["controller-manager
runs reconcile loops"]:::cp API <--> ETCD SCH --> API CM --> API end subgraph N1["WORKER NODE 1"] K1["kubelet"]:::node --> P1["Pod"]:::pod KP1["kube-proxy"]:::node end subgraph N2["WORKER NODE 2"] K2["kubelet"]:::node --> P2["Pod"]:::pod KP2["kube-proxy"]:::node end API -->|"desired state"| K1 & K2 DEV(["You: kubectl apply"]):::dev --> API classDef api fill:#2B57F0,stroke:#1B3CC0,color:#fff; classDef etcd fill:#FBEFD7,stroke:#D9870C,color:#7a4a06; classDef cp fill:#EFE8FC,stroke:#7444D9,color:#3d2c63; classDef node fill:#DEF3F1,stroke:#0C9488,color:#0a5048; classDef pod fill:#EAF0FF,stroke:#2B57F0,color:#1B3CC0; classDef dev fill:#0F1A2B,stroke:#2B57F0,color:#cdd9f0;
Fig 4.1 — The control plane decides; nodes execute. Everything goes through the API server, and etcd is the single source of truth.
ComponentJob (plain English)
kube-apiserverThe only front door. Every command and component talks through it. Validates and persists changes.
etcdThe cluster's memory — a key-value database holding the entire desired & actual state. Lose it and you lose the cluster.
schedulerDecides which node a new Pod should run on, based on resources, affinity and constraints.
controller-managerRuns the reconcile loops that make reality match desired state.
kubeletThe agent on each node. Starts containers and reports health back to the API server.
kube-proxyPrograms network rules so Services route traffic to the right Pods.

03The workload objects

Pod

Smallest unit — one or more tightly-coupled containers sharing network & storage. You rarely create these directly.

Deployment

Manages stateless apps: declares replicas, handles rolling updates & rollbacks. Your default workload object.

StatefulSet

For stateful apps (databases) needing stable identity, ordered startup, and per-Pod persistent storage.

DaemonSet

Runs one Pod on every node — perfect for log collectors, monitoring agents, and CNI plugins.

04A first Deployment + Service

# deployment.yaml — declarative desired state
apiVersion: apps/v1
kind: Deployment
metadata: {name: web}
spec:
  replicas: 3
  selector: {matchLabels: {app: web}}
  template:
    metadata: {labels: {app: web}}
    spec:
      containers:
        - name: web
          image: myapp:1.0
          ports: [{containerPort: 8080}]
          resources:                 # ALWAYS set these
            requests: {cpu: 100m, memory: 128Mi}
            limits:   {cpu: 500m, memory: 256Mi}
          readinessProbe:            # don't send traffic until ready
            httpGet: {path: /healthz, port: 8080}

05Hands-on labs

LAB 4.1Deploy, scale, self-heal, roll back~60 min

Use a free local cluster — kind, minikube, or k3d:

kubectl
$ kubectl apply -f deployment.yaml
$ kubectl get pods -o wide          # 3 pods across nodes
# watch self-healing: delete a pod, it comes back
$ kubectl delete pod -l app=web --field-selector ...; kubectl get pods -w
# scale by changing desired state
$ kubectl scale deploy/web --replicas=10
# zero-downtime rollout + rollback
$ kubectl set image deploy/web web=myapp:2.0
$ kubectl rollout status deploy/web
$ kubectl rollout undo deploy/web    # instant revert
PROJECTProduction-ready microservices on Kubernetes~8–10 h

Take your Compose app from Module 3 and run it properly on Kubernetes: Deployments for stateless services, a StatefulSet for Postgres with a PVC, a ConfigMap + Secret for configuration, a Service for internal discovery, and an Ingress for external traffic. Then add a HorizontalPodAutoscaler and package the whole thing as a Helm chart.

  • Namespace-isolate the app; apply RBAC so the deploy account has least privilege
  • Add liveness + readiness probes to every workload
  • Configure an HPA targeting 70% CPU; load-test it and watch Pods scale
  • Convert raw YAML into a parameterized Helm chart with values.yaml
  • (Stretch) Deploy to a managed cluster (EKS/GKE/AKS) and add a second region

06Mistakes, security & best practices

Anti-patterns

No resource requests/limits (one Pod starves the node) · no health probes (traffic hits dead Pods) · Secrets as plain ConfigMaps · cluster-admin for everything · treating Pods as pets (they're cattle — designed to die) · running databases in plain Deployments without persistent storage.

Production habits

Set requests/limits and probes on everything. Use namespaces + RBAC + NetworkPolicies. Externalize config. Use Helm/Kustomize for repeatability. Enable Pod Security Standards. Spread replicas across nodes/zones with topology constraints for HA.

07When NOT to use Kubernetes

Architect's caution

Kubernetes is a heavy hammer. For a simple website, a single API, or an early-stage startup, it is often over-engineering — a managed PaaS (Cloud Run, App Runner, Fly.io) or plain serverless will be cheaper, simpler and faster to ship. Adopt Kubernetes when you have many services, need fine-grained control, or genuinely operate at scale. The complexity tax is real; pay it deliberately.

08Enterprise example

How the giants run it

Kubernetes itself descends from Google's internal Borg. Airbnb, Spotify and Pinterest run thousands of services on it to give teams self-service deployment. The pattern is consistent: a central platform team operates the clusters; product teams ship to them through paved-road tooling — exactly the Engineer/Architect split from the intro.

09Certification & interview

CKA — AdministratorCKAD — DeveloperCKS — SecurityKCNA — entry
Q1A Pod is stuck in Pending. What's wrong?

Pending means the scheduler can't place it. Run kubectl describe pod and read Events. Usual causes: insufficient CPU/memory on any node, a node selector/affinity/taint that nothing satisfies, or an unbound PVC (no matching PV/StorageClass). Fix the constraint or add capacity.

Q2Explain the difference between a Deployment and a StatefulSet.

A Deployment manages interchangeable, stateless Pods with random names and no ordering. A StatefulSet gives each Pod a stable, ordinal identity (db-0, db-1), ordered rolling updates, and its own persistent volume that survives rescheduling. Use Deployments for web/API tiers, StatefulSets for databases, Kafka, and anything that needs stable identity or storage.

Q3How does a request reach a Pod from outside the cluster?

External DNS → cloud load balancer → Ingress controller (e.g. NGINX) which routes by host/path → a Service (stable virtual IP) → kube-proxy load-balances to a healthy Pod selected by labels. Cluster DNS (CoreDNS) resolves Service names internally so services find each other by name, not IP.

10Free resources

Kubernetes Official Docs + Tutorialskubernetes.io/docs
FREE
Killercoda Kubernetes scenarios + CKA/CKAD labskillercoda.com
FREE
kind / minikube / k3dkubernetes.io · free local clusters
OSS
Kubernetes the Hard Way (Kelsey Hightower)github.com/kelseyhightower · build it from scratch
FREE
Module 05 · Build & Ship

CI/CD — Continuous Integration & Delivery

This is the conveyor belt of the whole pipeline. CI/CD turns "a human runs some commands and prays" into "every commit is automatically built, tested, scanned and shipped." It is the difference between deploying quarterly and deploying a hundred times a day.

LevelIntermediate
Est. time22–28 h
PrereqModules 2–3

01Learning objectives

  • Distinguish Continuous Integration, Delivery and Deployment
  • Design a multi-stage pipeline: build → test → scan → package → deploy
  • Manage secrets, artifacts and caching in pipelines
  • Implement safe deployment strategies: rolling, blue-green, canary, feature flags, shadow
  • Build real pipelines in GitHub Actions (and read Jenkins/GitLab CI)
  • Add automated rollbacks and notifications
Why it exists

CI = every commit is merged and tested continuously, so integration bugs surface in minutes, not at a painful end-of-quarter "merge week." CD = the tested artifact is automatically pushed toward production. Smaller, more frequent releases are less risky, not more — a tiny change is easy to reason about and trivial to roll back.

02Anatomy of a pipeline

flowchart LR
  C(["git push"]):::g --> B["Build
compile + image"]:::s B --> T["Test
unit + integration"]:::s T --> Q["Scan
SAST + image CVEs"]:::s Q --> A["Package
push to registry"]:::s A --> ST["Deploy → Staging"]:::d ST --> G{"Gate:
approve?"}:::gate G -->|yes| PR["Deploy → Prod
(canary → full)"]:::p G -->|no| X["Rollback / fix"]:::x classDef g fill:#0F1A2B,stroke:#2B57F0,color:#cdd9f0; classDef s fill:#EAF0FF,stroke:#2B57F0,color:#1B3CC0; classDef d fill:#DEF3F1,stroke:#0C9488,color:#0a5048; classDef p fill:#E1F4EB,stroke:#0E9C66,color:#0a5c3c; classDef gate fill:#FBEFD7,stroke:#D9870C,color:#7a4a06; classDef x fill:#FBEAE8,stroke:#DB433A,color:#8c241d;
Fig 5.1 — A commit flows through automated quality gates; only approved, scanned artifacts reach production.

03Deployment strategies — the decision table

StrategyHow it worksUse when
RollingReplace instances gradually, a few at a timeDefault; stateless apps, backward-compatible changes
Blue-GreenTwo identical envs; flip traffic instantly; keep old as instant rollbackZero-downtime + fast rollback needed; can afford 2× infra briefly
CanarySend 1–5% of traffic to the new version, watch metrics, then rampHigh-risk changes; you have good observability to judge health
Feature flagsShip code dark, toggle features per-user at runtimeDecouple deploy from release; A/B tests; gradual rollout
ShadowMirror real traffic to the new version without serving its responsesValidate performance/correctness with zero user risk

04Hands-on project

PROJECTFull production pipeline in GitHub Actions~6–8 h

Build a complete pipeline that triggers on push: runs tests, builds & scans a Docker image, pushes it to a registry, and deploys to your Kubernetes cluster — with a manual approval gate before production.

# .github/workflows/deploy.yml
on: { push: { branches: [main] } }
jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test           # CI: fail fast on red tests
      - run: docker build -t $REG/app:${{ github.sha }} .
      - run: trivy image --exit-code 1 $REG/app:${{ github.sha }}  # block on CVEs
      - run: docker push $REG/app:${{ github.sha }}
      - run: kubectl set image deploy/web web=$REG/app:${{ github.sha }}

Extend: add an environment: production with required reviewers (manual gate); add a Slack notification on success/failure; add an automatic rollback step if rollout status fails.

05Tools & when to pick them

ToolSweet spot
GitHub ActionsDefault for GitHub repos; huge marketplace; YAML, zero infra to run
GitLab CIAll-in-one DevOps platform; strong if you live in GitLab
JenkinsMaximum flexibility & plugins; self-hosted; legacy-heavy enterprises
Argo CDGitOps for Kubernetes — Git is the source of truth, Argo reconciles the cluster
Anti-patterns

Secrets hardcoded in pipeline YAML (use the platform's secret store + OIDC) · flaky tests that everyone ignores · no rollback path · deploying straight to prod with no staging/canary · slow pipelines nobody waits for (cache dependencies, parallelize).

Best practices

Keep pipelines fast (<10 min) and deterministic. Fail fast. Scan in-pipeline. Use OIDC for cloud auth instead of long-lived keys. Make every deploy reversible. Tag images by commit SHA, never :latest.

06Certification & resources

GitHub Actions CertificationGitLab CI SpecialistArgo / GitOps
GitHub Actions Documentationdocs.github.com/actions
FREE
Jenkins & GitLab CI Handbooksjenkins.io/doc · docs.gitlab.com/ci
FREE
Argo CD Documentationargo-cd.readthedocs.io — GitOps
OSS
Module 06 · Provision & Observe

Infrastructure as Code

Clicking around a cloud console to build infrastructure is slow, unrepeatable, and undocumented. IaC defines your entire cloud — networks, servers, databases, permissions — in version-controlled code you can review, diff, and recreate identically in seconds.

LevelIntermediate
Est. time20–24 h
PrereqModules 2, 7

01Learning objectives

  • Explain declarative IaC and why it beats manual/imperative provisioning
  • Write Terraform: providers, resources, variables, outputs, modules
  • Manage state safely — remote backends, locking, and why state is sacred
  • Structure reusable modules and multiple environments with workspaces
  • Compare Terraform vs CloudFormation vs Pulumi vs OpenTofu
The problem it solves

Manually-built infrastructure suffers configuration drift — environments quietly diverge until "works in staging, breaks in prod." IaC makes infrastructure reproducible, reviewable and disposable: the same code builds dev, staging and prod identically, and a destroyed environment is one apply away from rebirth.

02The Terraform workflow & state

Terraform's loop is write → plan → apply. plan shows you exactly what will change before it happens — the killer feature. The state file is Terraform's map of what it manages in the real world; it is the most sensitive artifact in the system.

# main.tf — a tiny, real example
terraform {
  backend "s3" { bucket = "my-tfstate", key = "prod/net", dynamodb_table = "tf-lock" }
}
resource "aws_instance" "web" {
  ami           = var.ami_id
  instance_type = "t3.micro"
  tags          = { Name = "web-${var.env}" }
}
output "public_ip" { value = aws_instance.web.public_ip }
State: the cardinal sins

Never commit state to Git (it contains secrets) · never edit it by hand · always use a remote backend with locking (or two engineers' simultaneous applies corrupt it) · always run plan and read it before apply.

03Tool comparison

ToolLanguageNotes
TerraformHCL (declarative)Multi-cloud standard; huge provider ecosystem; license now BSL
OpenTofuHCLOpen-source Terraform fork (Linux Foundation); drop-in compatible
CloudFormationYAML/JSONAWS-native, deeply integrated, but AWS-only
PulumiPython/TS/GoReal programming languages; great for complex logic & devs

04Project

PROJECTProvision a complete cloud environment as code~6 h

With Terraform (AWS free tier), build a VPC with public/private subnets, a security group, an EC2 instance (or an EKS cluster), and an S3 bucket — all as reusable modules with a remote state backend. Then create dev and prod with the same module and different variables. Destroy and rebuild to prove reproducibility.

  • Use a remote S3 + DynamoDB backend with locking
  • Parameterize everything via variables.tf; expose outputs.tf
  • Refactor repeated resources into a modules/ folder
  • Run terraform plan in CI on every PR (foreshadows policy-as-code in Module 9)
Best practices

Remote, locked, encrypted state. Small composable modules. Plan-on-PR, apply-on-merge. Pin provider versions. Tag every resource (owner, env, cost-center). Never make manual console changes to IaC-managed resources.

05Certification & resources

HashiCorp Terraform Associate
Terraform Tutorials (HashiCorp Developer)developer.hashicorp.com/terraform/tutorials
FREE
OpenTofuopentofu.org · open-source fork
OSS
Module 07 · Provision & Observe

Cloud Platforms — AWS · Azure · GCP

The cloud is the rented factory everything runs in. You don't need to memorize all three providers — you need the mental model of cloud building blocks (compute, network, storage, identity) so you can map any service in any provider to a concept you already understand.

LevelIntermediate
Est. time24–30 h
PrereqModules 1, 6

01Learning objectives

  • Map the core building blocks (compute, networking, storage, IAM, databases) across providers
  • Understand regions, availability zones, and the shared responsibility model
  • Stand up compute, a VPC/VNet, object storage and managed databases
  • Reason about cloud cost models and the basics of cost control
  • Deploy the same infrastructure to all three clouds and compare
Why cloud

The cloud trades capital expense (buying servers) for operating expense (renting them by the second), with effectively infinite elasticity. You stop guessing capacity and start paying for exactly what you use — and you inherit global infrastructure no startup could build itself. The trade-off is cost-at-scale and lock-in, which is where the architect earns their salary.

02The same concept, three names

ConceptAWSAzureGCP
VMsEC2Virtual MachinesCompute Engine
Serverless functionsLambdaFunctionsCloud Functions
Managed KubernetesEKSAKSGKE
Object storageS3Blob StorageCloud Storage
Virtual networkVPCVNetVPC
Managed SQLRDSSQL DatabaseCloud SQL
IdentityIAMEntra IDCloud IAM
Learn one deeply first

Pick AWS (largest market share, most jobs) or whichever your target employers use, learn it deeply, then the others become a translation exercise. Spreading thin across all three early just produces shallow knowledge of all of them.

03Cost & the shared responsibility model

Two ideas the architect must internalize. Shared responsibility: the provider secures the cloud (hardware, hypervisor); you secure what's in it (your data, IAM, patching). Cost: compute is billed per-second, storage per-GB-month, and — the silent killer — egress (data leaving the cloud) is expensive. Architecture decisions are cost decisions.

04Project

PROJECTDeploy identical infra across AWS, Azure & GCP~8 h

Using Terraform with three providers, deploy the same simple stack (a VM + object storage bucket + firewall rule) to AWS, Azure and GCP. Document the differences in service names, defaults, and — eye-openingly — cost. Use only free-tier resources.

  • Reuse one Terraform module structure, swap providers
  • Note IAM/identity differences between the three
  • Tear everything down with terraform destroy to avoid charges
Best practices

Always set a billing alert before you start. Use least-privilege IAM, never the root account for daily work. Tag resources for cost attribution. Deploy across multiple AZs for resilience. Prefer managed services unless you have a strong reason to self-host.

05Certification & resources

AWS Cloud Practitioner → Solutions ArchitectAzure AZ-900 → AZ-104GCP Associate Cloud Engineer
AWS Skill Builder · Microsoft Learn · Google Cloud Skills Boostfree tiers + guided labs on all three
FREE
AWS Well-Architected Frameworkaws.amazon.com/architecture — free, essential reading
FREE
Module 08 · Provision & Observe

Observability

You cannot operate what you cannot see. When a distributed system misbehaves at 3 a.m., observability is the difference between a five-minute fix and a five-hour outage. This is the quality-control station of the pipeline.

LevelIntermediate
Est. time16–20 h
PrereqModule 4

01Learning objectives

  • Distinguish the three pillars: metrics, logs, traces — and when to use each
  • Understand monitoring vs observability
  • Collect metrics with Prometheus and visualize with Grafana
  • Aggregate logs (Loki / ELK) and trace requests (OpenTelemetry / Jaeger)
  • Set meaningful alerts on symptoms, not noise
Monitoring vs observability

Monitoring answers known questions ("is CPU high?") with predefined dashboards. Observability lets you ask new questions about novel failures you never anticipated, by exploring rich telemetry. In a monolith, monitoring sufficed. In microservices, where a single request crosses dozens of services, you need observability to follow it.

02The three pillars

Metrics

Numbers over time (CPU, latency, error rate). Cheap to store, great for dashboards & alerts. Prometheus.

Logs

Timestamped event records. Rich detail for the "why," but voluminous. Loki / ELK.

Traces

The path of one request across all services, with timing per hop. Finds the slow link. OpenTelemetry / Jaeger.

03Project

PROJECTFull observability stack on Kubernetes~6 h

Instrument your Module 4 microservices app: deploy Prometheus to scrape metrics, Grafana for dashboards, Loki for logs, and OpenTelemetry + Jaeger for traces. Build a dashboard showing the "golden signals" (latency, traffic, errors, saturation) and wire one alert.

  • Use the kube-prometheus-stack Helm chart for a one-command setup
  • Add a RED dashboard (Rate, Errors, Duration) per service in Grafana
  • Trace a request end-to-end through Jaeger and find the slowest span
  • Define an alert: error rate > 1% for 5 min → notification
Best practices & pitfalls

Alert on symptoms users feel (high latency, errors) not causes (high CPU). Avoid alert fatigue — every alert must be actionable. Use structured (JSON) logs. Adopt OpenTelemetry as the vendor-neutral standard so you're never locked in. Don't log secrets or PII.

04Resources

Prometheus + Grafana + OpenTelemetry docsprometheus.io · grafana.com · opentelemetry.io
FREE
kube-prometheus-stack (Helm)github.com/prometheus-community
OSS
Module 09 · Secure & Design

Security — DevSecOps

Security bolted on at the end is security that fails. DevSecOps shifts security left — into every stage of the pipeline you've built — so vulnerabilities are caught at commit time, not by an attacker in production.

LevelAdvanced
Est. time20–26 h
PrereqModules 5, 7

01Learning objectives

  • Apply identity foundations: IAM, RBAC, OAuth, OIDC, SSO — and least privilege
  • Manage secrets properly with Vault and cloud secret managers
  • Embed scanning in CI: SAST, DAST, dependency & container scanning
  • Enforce policy as code (OPA/Gatekeeper, Kyverno)
  • Secure the software supply chain: SBOMs, image signing (Sigstore/cosign), SLSA
Why shift left

A vulnerability fixed at coding time costs almost nothing; the same flaw exploited in production can cost millions and your reputation. "Shift left" means every gate you built in Module 5 also enforces security — scanning, signing, policy — so insecure code simply cannot reach production.

02The DevSecOps toolchain by stage

Pipeline stageSecurity controlExample tools
CodeSAST, secret scanningSemgrep, gitleaks, CodeQL
DependenciesSCA (known-vuln dependencies)Trivy, Snyk, Dependabot
BuildImage scan, SBOM, signingTrivy, Syft, cosign
DeployPolicy as code, admission controlOPA/Gatekeeper, Kyverno
RuntimeSecrets, RBAC, threat detectionVault, Falco, NetworkPolicies

03Core concepts

Concept 01

Least privilege & zero trust

Grant the minimum permissions needed, nothing more — every identity, service and pipeline. Zero trust assumes the network is already hostile: authenticate and authorize every request, never trust based on network location alone.

Concept 02

Supply chain security

Modern apps are 80%+ third-party code. An SBOM (Software Bill of Materials) inventories every component so you can answer "are we affected by this new CVE?" in seconds. Signing (cosign) proves an image is the one you built and wasn't tampered with — the lesson of SolarWinds and Log4Shell.

04Project

PROJECTSecure your production pipeline end-to-end~6 h

Harden the Module 5 pipeline: add secret scanning & SAST on commit, dependency + container scanning that blocks on critical CVEs, generate and attach an SBOM, sign the image with cosign, and add an OPA/Kyverno policy that refuses to admit unsigned images or Pods running as root.

  • Move all secrets to Vault or a cloud secret manager + OIDC (no static keys)
  • Generate an SBOM with Syft; scan it with Trivy
  • Sign images with cosign; verify at admission
  • Write a Kyverno policy: deny :latest, deny privileged, require resource limits
Best practices

Never store secrets in code or images — inject at runtime, rotate often, prefer short-lived credentials (OIDC). Scan everywhere. Sign artifacts. Enforce policy as code so security is automatic, not a review bottleneck. Patch fast; an SBOM makes it possible.

05Certification & resources

CKS — Kubernetes SecurityHashiCorp Vault AssociateOWASP fundamentals
OWASP · OpenSSF · SLSA frameworkowasp.org · openssf.org · slsa.dev
FREE
Trivy · cosign/Sigstore · Vault tutorialsopen-source supply-chain tooling
OSS
Module 10 · Secure & Design

Cloud Architecture

This is where engineer becomes architect. You stop asking "how do I deploy this?" and start asking "what should we build, and why?" — designing systems that scale to millions, survive regional failures, and stay affordable.

LevelAdvanced → Architect
Est. time22–28 h
PrereqModules 4, 7

01Learning objectives

  • Design microservices & event-driven systems — and know when a monolith is better
  • Apply service mesh (Istio/Linkerd), API gateways, CQRS and event sourcing appropriately
  • Architect for high availability, disaster recovery and multi-region
  • Use caching and async messaging to scale
  • Make and defend trade-offs across cost, reliability, latency and complexity

02Monolith vs microservices — the central trade-off

The most over-corrected decision in tech

Microservices buy independent scaling and deployment — at the cost of enormous operational and distributed-systems complexity. Most systems should start as a well-structured monolith and extract services only where a real bottleneck or team-boundary justifies it. Premature microservices have sunk more startups than monoliths ever did. Amazon and Netflix went micro because they had thousands of engineers and planet-scale traffic — that is not your situation on day one.

03An event-driven reference architecture

flowchart LR
  U(["Clients"]):::u --> GW["API Gateway
auth · rate-limit · route"]:::gw GW --> S1["Order svc"]:::svc GW --> S2["User svc"]:::svc S1 -->|publish event| Q[("Message broker
Kafka / SQS")]:::q Q --> S3["Inventory svc"]:::svc Q --> S4["Email svc"]:::svc S1 --> CA[("Cache
Redis")]:::ca S1 --> DB[("DB")]:::db classDef u fill:#0F1A2B,stroke:#2B57F0,color:#cdd9f0; classDef gw fill:#FBEFD7,stroke:#D9870C,color:#7a4a06; classDef svc fill:#EAF0FF,stroke:#2B57F0,color:#1B3CC0; classDef q fill:#EFE8FC,stroke:#7444D9,color:#3d2c63; classDef ca fill:#FBEAE8,stroke:#DB433A,color:#8c241d; classDef db fill:#DEF3F1,stroke:#0C9488,color:#0a5048;
Fig 10.1 — Async events decouple services: the order service doesn't wait on inventory or email, so a slow consumer can't take checkout down.

04HA & disaster recovery — the language of risk

Architects speak in RTO (how fast you recover) and RPO (how much data you can lose). These dictate — and are dictated by — spend.

DR strategyRTO / RPOCost
Backup & restoreHours / hours$ — cheapest
Pilot light~10s of min$$
Warm standbyMinutes$$$
Active-active multi-region~Zero$$$$ — most expensive

05Capstone-style project

PROJECTDesign a Netflix-scale architecture~8 h

Produce an architecture document + diagram for a global video-streaming platform: ingestion, transcoding, a CDN strategy, recommendation service, multi-region active-active, autoscaling, caching layers, and a failure-mode analysis. Justify every choice in cost/reliability/latency terms, and explicitly state what you'd build differently with 10 engineers vs 1,000.

  • Diagram the request path for "user presses play"
  • Choose data stores per workload (the right tool, not one DB for everything)
  • Define SLOs and the DR strategy with explicit RTO/RPO
  • Write the one-page executive summary — the real architect deliverable
Architect principles

Design for failure (everything fails eventually). Prefer loose coupling & async. Cache aggressively but invalidate carefully. Don't distribute until you must. Every architecture is a set of trade-offs — your job is to make them explicitly and defend them, not to chase the newest pattern.

06Resources

microservices.io (Chris Richardson) + Google SRE Booksmicroservices.io · sre.google/books — free online
FREE
AWS / Azure / GCP Well-Architected Frameworks + Istio docsvendor architecture guidance, free
FREE
Module 11 · Operate & Capstone

Enterprise Operations & SRE

Building a system is one thing; running it reliably and affordably for years is another. This module covers the disciplines that keep enterprise platforms alive: SRE, FinOps, governance, compliance and incident response.

LevelAdvanced → Architect
Est. time18–22 h
PrereqModules 8, 10

01Learning objectives

  • Apply SRE: SLIs, SLOs, SLAs and error budgets
  • Run effective incident response & blameless postmortems
  • Control cloud spend with FinOps practices
  • Establish governance & compliance guardrails (SOC 2, ISO 27001, GDPR basics)
  • Design backup & DR operations that are actually tested

02The vocabulary of reliability

TermPlain meaning
SLIA measured signal of health, e.g. "% of requests under 200ms"
SLOYour internal target for an SLI, e.g. "99.9% of requests under 200ms"
SLAThe contractual promise to customers (with penalties), looser than your SLO
Error budgetThe allowed unreliability (100% − SLO). Spend it on shipping features; if exhausted, freeze and stabilize
The error-budget insight

100% reliability is the wrong target — it's infinitely expensive and slows innovation to zero. The error budget reframes reliability as a resource: it ends the eternal dev-vs-ops war by giving both sides the same number to optimize against. This idea, from Google's SRE practice, is the backbone of modern operations.

03FinOps — engineering meets the bill

Cloud spend is a shared, engineering-driven responsibility. FinOps brings visibility (tag & attribute every dollar), optimization (right-size, autoscale, use spot/savings plans, kill idle resources), and accountability (teams see and own their costs).

04Project

PROJECTOperate a simulated enterprise platform~6 h

Take your full stack (cluster + pipeline + observability) and run it like an SRE for a week of simulated operations: define SLOs and error budgets, build an on-call alert that pages on SLO burn, run a chaos experiment (kill a node), and write a blameless postmortem. Add a cost dashboard and identify three savings.

  • Define 2–3 SLOs with error budgets and a burn-rate alert
  • Inject a failure (e.g. with a chaos tool); measure recovery; document RTO/RPO
  • Write a postmortem: timeline, root cause, action items — no blame
  • Produce a cost-attribution view and a right-sizing recommendation
Operating principles

Make on-call humane (actionable alerts only). Postmortems are blameless — humans err, systems should be resilient. Test your backups by restoring them; an untested backup is a hope, not a plan. Treat cost as a first-class engineering metric. Automate toil away.

05Resources

Google SRE Book & SRE Workbooksre.google/books — free, the canonical texts
FREE
FinOps Foundation Frameworkfinops.org — practices & principles
FREE
Module 12 · Operate & Capstone

Capstone Projects

Everything converges here. These end-to-end builds are designed to become the centerpiece of your portfolio and your interview stories — each one exercises the entire pipeline from source to operated production.

LevelCapstone
Est. time40–60 h
PrereqAll modules
How to use these

Pick one or two and take them all the way — a single deeply-finished project impresses far more than five half-built ones. Push everything to public GitHub repos with excellent READMEs and architecture diagrams. These repos are your résumé.

01The capstone tracks

Every capstone must include: containerization, a CI/CD pipeline, IaC-provisioned cloud infra, Kubernetes deployment, observability, security scanning, and a written architecture doc.

🎬 Netflix-style streaming infra

Microservices, CDN strategy, transcoding pipeline, multi-region active-active, autoscaling.

🛒 E-commerce platform

Event-driven orders/inventory/payments, Black-Friday autoscaling, blue-green deploys.

🏦 Banking platform

High compliance, zero-trust security, audited pipelines, strict DR with tested RTO/RPO.

🏥 Healthcare platform

PII/PHI handling, encryption everywhere, policy-as-code guardrails, access auditing.

☁️ Multi-cloud SaaS

Provisioned across two clouds with Terraform, GitOps with Argo CD, per-tenant isolation.

📊 Real-time analytics

Streaming ingestion (Kafka), stream processing, time-series storage, live dashboards.

🤖 AI application deployment

Model serving on Kubernetes with GPU scheduling, autoscaling, canary model rollouts.

🚀 Zero-downtime GitOps platform

Full GitOps with Argo CD, progressive delivery, automated rollback, drift detection.

02Definition of "done"

  • One command (or one git push) takes it from code to running in the cloud
  • Infrastructure is 100% codified — destroy and rebuild works
  • The pipeline blocks insecure or failing changes automatically
  • Dashboards show the golden signals; at least one meaningful alert fires correctly
  • A clear README + architecture diagram explains every decision and trade-off
  • You can whiteboard the whole system and defend it in an interview
You've reached the end of the pipeline

If you can build, ship, secure, observe and operate one of these — and explain why every piece is there — you are no longer learning DevOps and cloud architecture. You're doing it. Now go ship the artifact: you.

Career

Certification Roadmap

Certifications are a forcing function for breadth and a filter many employers screen on. Sequence them with the modules — don't chase a cert before you've done the hands-on work behind it. Exam codes, pricing and availability change; always confirm on the official provider site.

01Suggested sequence

OrderCertificationAfter module(s)Why
1AWS Cloud Practitioner (or AZ-900 / GCP CDL)7Cheap, broad cloud vocabulary; good confidence win
2HashiCorp Terraform Associate6High ROI; IaC is in demand everywhere
3CKAD (Certified Kubernetes App Developer)4–5Hands-on Kubernetes from a developer's angle
4CKA (Certified Kubernetes Administrator)4, 8The flagship K8s cert; strong signal for ops roles
5AWS Solutions Architect Associate (or AZ-104 / GCP ACE)7, 10The cloud cert most recruiters look for
6CKS (Certified Kubernetes Security)9Advanced; requires a valid CKA first
7AWS/Azure/GCP DevOps Professional5, 11Capstone-level; ties the whole pipeline together

02By domain

Foundations

LFCSCompTIA Linux+GitHub Foundations

Containers & Kubernetes

KCNACKADCKACKS

IaC & CI/CD

Terraform AssociateGitHub Actions

Cloud platforms

AWS SAA / DevOps ProAzure AZ-104 / AZ-400GCP ACE / DevOps Engineer
Honest advice

A portfolio of real, deployed projects (your capstones) beats a wall of certificates. Use certs to structure your learning and pass HR filters — not as a substitute for being able to actually build and operate systems. One or two well-chosen certs + strong GitHub repos is the winning combination.

Cadence

Weekly Study Plan

200 hours feels infinite until you schedule it. At a sustainable ~13 hours/week (≈2 hrs/weekday + a weekend block), the full path takes about 16 weeks. Adjust to your pace — the order matters more than the speed.

01The 16-week schedule

WeekFocusDeliverable
1–2Module 1 · LinuxServer bootstrap script in a repo
3Module 2 · Git & GitHubMulti-dev PR workflow on a protected repo
4–5Module 3 · Docker3-tier app running under Docker Compose
6–8Module 4 · KubernetesMicroservices on K8s + Helm chart · sit CKAD
9Module 5 · CI/CDFull GitHub Actions pipeline with gates
10Module 6 · IaCCloud env as Terraform modules · sit Terraform Associate
11Module 7 · CloudSame stack on AWS/Azure/GCP · sit a Cloud Practitioner cert
12Module 8 · ObservabilityPrometheus/Grafana/Jaeger stack + alerts
13Module 9 · SecurityHardened, signed, policy-gated pipeline
14Module 10 · ArchitectureNetflix-scale design doc + diagram
15Module 11 · Enterprise OpsSLOs, chaos test, postmortem, cost review
16+Module 12 · CapstoneOne end-to-end project, portfolio-ready

02A sustainable weekly rhythm

Weekdays · ~2 hrs each

  • 30 min — read the concept, watch one video
  • 60–75 min — do the lab hands-on
  • 15 min — note what broke & how you fixed it

Weekend · ~3 hr block

  • Build/extend the module project
  • Push to GitHub with a clean README
  • Review the week's interview questions aloud
Make it stick

Consistency beats intensity — 2 focused hours daily outperforms a 14-hour weekend cram. Always end a session by writing down one thing you learned. Teach a concept to someone (or rubber-duck it) — if you can't explain it simply, you haven't learned it yet.

Toolbox

Resource Library

Every resource here is free or open-source. This is the consolidated list — bookmark it. You can complete the entire path on these alone.

01Free sandboxes & labs

Killercodakillercoda.com · in-browser Linux/K8s/Docker scenarios
FREE
Play with Docker / Play with Kuberneteslabs.play-with-docker.com · labs.play-with-k8s.com
FREE
OverTheWire (Bandit)overthewire.org · gamified Linux/security
FREE
Cloud free tiersAWS Free Tier · Azure free account · GCP $300 credit
FREE

02Documentation (always the primary source)

Docker · Kubernetes · Terraform · Helmdocs.docker.com · kubernetes.io · developer.hashicorp.com · helm.sh
FREE
GitHub Actions · Jenkins · GitLab CI · Argo CDdocs.github.com/actions · jenkins.io · docs.gitlab.com · argoproj.github.io
FREE
Prometheus · Grafana · Istio · OpenTelemetryprometheus.io · grafana.com · istio.io · opentelemetry.io
FREE

03Free books & deep references

The Linux Command Line · Pro Gitlinuxcommand.org · git-scm.com/book
FREE
Google SRE Book & Workbooksre.google/books · reliability done right
FREE
microservices.io · Well-Architected Frameworksarchitecture patterns & vendor guidance
FREE

04Open-source tooling to know

kind / minikube / k3dHelm / KustomizeTrivy / Syftcosign / SigstoreOPA / KyvernoArgo CDOpenTofuPrometheus / GrafanaOpenTelemetry / JaegerFalcoShellCheckVault

05One reference repo to start from

in28minutes/devops-master-classgithub.com · a broad hands-on DevOps reference
FREE

Built as a complete, navigable learning path — Modules 1, 3 and 4 carry the deepest treatment; the remaining modules give you the full roadmap, core concepts, a hands-on project, and curated resources, ready to expand to that same depth whenever you want to go further on a specific topic.