๐ง Operations & DevEx Architect Assessment: Exception & Failure Mode Matrix
Welcome to the Operations & DevEx Platform Architect Diagnostic Matrix. This assessment is specifically calibrated to evaluate your mastery of exceptions, failure modes, edge cases, and break-glass procedures across production Kubernetes, CI/CD supply chains, GitOps, eBPF, and Internal Developer Portals.
In Staff & Principal SRE interviews, you are tested on how systems break and how you engineer resilience against catastrophic edge cases.
๐ฏ How It Works
- Review the Left Column (Real-World Outage Symptoms, Exceptions, or Directives).
- Attempt to mentally map each block to its corresponding partner in the Right Column (Root Causes, Architectural Failure Modes, or Break-Glass Remediations).
- Expand the Answer & Architectural Rationale accordion to verify your understanding.
๐ข Tier 1: Low Difficulty (Operational Baseline)
Validates basic understanding of container digests, GitHub permissions, Kubernetes secret encoding, and health check types.
๐ Left Blocks: Primitives & Directives
A
Missing `id-token: write` in GitHub Actions
B
Deploying containers with `:latest` tag
C
Standard Kubernetes `kind: Secret`
D
ASG `health_check_type = "EC2"`
E
Missing `catalog-info.yaml` at repo root
๐ฏ Right Blocks: Behaviors & Mechanisms
1
Merely Base64-encoded strings (`base64 -d`), requiring etcd KMS envelope encryption.
2
Evaluates only VM hypervisor health; continues routing traffic to crashed web applications.
3
Runner agent refuses to mint OIDC JWT, failing cloud authentication with HTTP 403.
4
Missing metadata descriptor causing repository to vanish from Backstage catalog.
5
Mutable pointer allowing unauthorized image overwrites; violates immutable digest standard.
๐ก
Reveal Tier 1 Solution Key & Architectural Rationale
Click to Expand
Verified Architectural Pairings:
A โ 3 B โ 5 C โ 1 D โ 2 E โ 4
B โ 5 (Tag Immutability): Tags are mutable pointers in registries. Node A and Node B can pull different code under the same tag. Immutable production deployments strictly require `@sha256:`.
C โ 1 (Kubernetes Secrets): Kubernetes secrets are stored as plaintext Base64 in `etcd` by default. True encryption requires enabling AWS KMS envelope encryption at the control plane and using External Secrets Operator.
D โ 2 (`EC2` vs `ELB` Health Checks): `EC2` checks only evaluate hypervisor ping. If NGINX or Python crashes, the instance stays marked healthy. Production web workloads must use `ELB` Target Group health checks.
E โ 4 (`catalog-info.yaml`): The core entity descriptor parsed by the Backstage software catalog. Without it, the component exists as an unmanaged Git silo.
๐ก Tier 2: Medium Difficulty (Core Systems & Networking)
Evaluates Ingress routing modes, database secret rotation staging, compliance types, and sync sequencing.
๐ Left Blocks: Primitives & Directives
A
Ingress `target-type: ip`
B
AWS Secrets Manager `AWSPREVIOUS`
C
Detective Controls (AWS Config)
D
ArgoCD Sync Waves (`sync-wave: "1"`)
E
Kubernetes Gateway API Personas
๐ฏ Right Blocks: Behaviors & Mechanisms
1
Enforces deterministic phased rollouts (e.g. CRDs must report healthy before pods deploy).
2
Separates infrastructure management (`Gateway`) from developer routing (`HTTPRoute`).
3
Bypasses `iptables` and NodePort hops, routing packets directly to Pod IPs via VPC CNI.
4
Preserves immediate predecessor credentials for zero-downtime rollback if new passwords fail.
5
Continuously evaluates live cloud state for out-of-band console drift and triggers SSM self-healing.
๐ก
Reveal Tier 2 Solution Key & Architectural Rationale
Click to Expand
Verified Architectural Pairings:
A โ 3 B โ 4 C โ 5 D โ 1 E โ 2
B โ 4 (`AWSPREVIOUS`): Ensures that if newly rotated credentials fail under concurrent load, SREs can execute an instant emergency rollback without restoring backups.
C โ 5 (AWS Config): Unlike proactive CI/CD gates, detective controls continuously audit running infrastructure and execute automated remediation runbooks.
D โ 1 (Sync Waves): Without sync waves, ArgoCD applies manifests in parallel, causing microservices to crash before operators or Custom Resource Definitions are established.
E โ 2 (Gateway API): Solves the monolithic Ingress problem by separating Gateway infrastructure (managed by Ops) from HTTPRoute configurations (managed by developers).
๐ด Tier 3: Hard Difficulty (SRE & Infrastructure Exceptions)
Tests ASG capacity deadlocks, CoreDNS query amplification, GitOps fleet deletion traps, and eBPF DNS blackouts.
๐ Left Blocks: Primitives & Directives
A
ASG `min_healthy: 100%` + `max_size == desired`
B
CoreDNS `ndots: 5` Amplification
C
ApplicationSet without `preserveResourcesOnDeletion`
D
Cilium Default-Deny Egress Policy
E
Kyverno `failurePolicy: Fail` Webhook Timeout
๐ฏ Right Blocks: Behaviors & Mechanisms
1
Evaluates missing generator matches and permanently deletes 50 production applications.
2
Blocks UDP port 53 to CoreDNS, preventing all internal and external name resolution.
3
Surge instance cannot launch, deadlocking instance refresh because terminating any node violates 100%.
4
Webhook pod outage causes API server to reject all incoming Pod admissions across the cluster.
5
glibc evaluates 4 internal search paths for external domains, multiplying DNS queries by 500%.
๐ก
Reveal Tier 3 Solution Key & Architectural Rationale
Click to Expand
Verified Architectural Pairings:
A โ 3 B โ 5 C โ 1 D โ 2 E โ 4
A โ 3 (ASG 100% Trap): If capacity is capped at 3, the ASG cannot scale to 4 before terminating an old instance. But terminating one drops capacity to 66%, violating `min_healthy = 100`. The refresh hangs indefinitely.
C โ 1 (`preserveResourcesOnDeletion`): If an engineer renames a folder or label in a generator, ArgoCD considers the old applications unreferenced and deletes the live workloads unless resource preservation is true.
D โ 2 (Cilium DNS Blackout): Blocking all egress without explicitly whitelisting UDP/TCP port 53 to `kube-system` cuts off DNS resolution, causing all application connection pools to crash.
E โ 4 (Admission Webhook Deadlock): If an admission controller pod crashes and `failurePolicy: Fail` is set globally, the API Server rejects all new pods, preventing the admission controller from ever rescheduling.
๐ฃ Tier 4: Complex Difficulty (Staff Architect Edge Cases)
Explores irreversible database migrations during canary aborts, PDB node drain hangs, OIDC wildcards, and WireGuard MTU drops.
๐ Left Blocks: Primitives & Directives
A
Canary Abort with Breaking Database Schema
B
`kubectl drain` on 2-replica pod with `minAvailable: 2`
C
OIDC Trust Condition `repo:my-org/*:*`
D
WireGuard ClusterMesh MTU Fragmentation
E
Backstage Scaffolder Multi-Step Failure
๐ฏ Right Blocks: Behaviors & Mechanisms
1
Allows any repository in the GitHub organization to assume production cloud admin credentials.
2
60-byte tunnel overhead exceeds 1500-byte cloud MTU, silently dropping SSL handshakes.
3
Rollback restores old code that crashes because the canary's destructive SQL migration already executed.
4
Compensating rollback actions execute in reverse order (Saga pattern) to clean partial state.
5
Eviction API returns HTTP 429 Too Many Requests, causing node drain and OS patching to hang forever.
๐ก
Reveal Tier 4 Solution Key & Architectural Rationale
Click to Expand
Verified Architectural Pairings:
A โ 3 B โ 5 C โ 1 D โ 2 E โ 4
A โ 3 (Canary Schema Trap): If a canary runs `DROP COLUMN`, and Argo Rollouts aborts back to stable v1.0, the stable pods crash because their code expects the dropped column. Requires **Expand-and-Contract (Two-Phase)** migrations.
B โ 5 (PDB Eviction Deadlock): Evicting 1 pod drops healthy replicas to 1, violating `minAvailable: 2`. The Eviction API rejects the request, putting `kubectl drain` into an infinite hang. Requires `maxUnavailable: 1` or break-glass `--disable-eviction`.
C โ 1 (OIDC Wildcard Escalation): Bounding trust to `*` allows any developer who creates a scratch repo to push a workflow that assumes production IAM credentials. Must scope to exact repos and branches.
D โ 2 (MTU Fragmentation Blackhole): WireGuard adds 60 bytes. Packets with DF bit set exceeding 1500 bytes are dropped by cloud firewalls with no ICMP notification. Requires tuning Cilium MTU to 1420.
E โ 4 (Scaffolder Saga Rollbacks): When multi-step provisioning fails halfway through (e.g. repo created but ArgoCD registration failed), custom compensating actions must delete the orphaned repository to maintain transactional hygiene.
Tests EBS CSI single-AZ scheduling deadlocks, Chaos Mesh daemon zombie rules, OpenCost unallocated idle cost attribution, Crossplane KCL composition validation vs YAML bloat, and Megaport MCR asymmetric routing flap.
๐ Left Blocks: Primitives & Directives
A
EBS CSI `volumeBindingMode: Immediate` in Multi-AZ Cluster
B
Chaos Mesh `NetworkChaos` duration finishes but packet loss persists
C
OpenCost / Kubecost Reports 45% "Unallocated Idle" Spend
D
Megaport MCR Direct Peering between AWS DX and Azure ExpressRoute
E
Crossplane Patch-and-Transform YAML with Typo in Field Path
๐ฏ Right Blocks: Behaviors & Mechanisms
1
BGP Local Preference mismatch across clouds causes asymmetric routing and stateful TCP firewall resets.
2
StorageClass provisions volume in AZ-a; pod scheduled in AZ-b cannot attach disk (`VolumeZoneConflict`). Fix: `WaitForFirstConsumer`.
3
`chaos-daemon` crashed before tearing down `iptables` / `tc` netem rules; requires manual cgroup netem flush.
4
Cluster headroom over-provisioned or Karpenter `ALLOCATE_IDLE=true` not distributed across namespace tenants.
5
Fails silently at reconciliation time with partial resource orphans; resolved by strongly typed KCL Pipeline Functions.
๐ก
Reveal Tier 5 Solution Key & Architectural Rationale
Click to Expand
Verified Architectural Pairings:
A โ 2 B โ 3 C โ 4 D โ 1 E โ 5
A โ 2 (EBS AZ Deadlock): With `Immediate`, the PV volume is dynamically created in an arbitrary AZ as soon as the PVC is created. If Kubernetes scheduler subsequently places the Pod in a different AZ, the EBS volume cannot attach across AZ boundaries. `WaitForFirstConsumer` delays volume creation until the Pod is placed in an AZ.
B โ 3 (Chaos Mesh Zombie Rules): If a `chaos-daemon` Pod crashes or is evicted by the node OOM killer while a chaos experiment is running, the Linux kernel `tc` (traffic control) queuing discipline or `iptables` rules remain active in the target container cgroup. Triage requires inspecting the node network namespace (`tc qdisc show dev eth0`) or restarting the daemon.
C โ 4 (Unallocated Idle Cost Attribution): In Karpenter/EKS clusters, compute nodes often have spare buffer capacity for burst scaling. If OpenCost is configured without `ALLOCATE_IDLE=true`, this cost remains unallocated in executive FinOps dashboards. Enabling weighted idle allocation distributes buffer costs proportionately across tenant workloads.
D โ 1 (Multi-Cloud BGP Asymmetric Routing): When interconnecting AWS Direct Connect and Azure ExpressRoute via Megaport Cloud Router (MCR), unequal BGP AS-path prepending or BGP MED causes packets from AWS to Azure to traverse MCR, while return traffic routes across public Internet or alternate links, breaking stateful firewall tables.
E โ 5 (Crossplane KCL vs Patch-and-Transform): Complex YAML patch-and-transform compositions lack build-time type checking. A typo in `transforms[].string.fmt` causes runtime reconciliation failure without clear errors. Crossplane Pipeline Composition Functions with KCL compile and validate types upfront, guaranteeing valid resource emission.
๐ Self-Evaluation Scoring Rubric
23 โ 25 / 25 Correct
Distinguished / Fellow Architect
Total mastery of stateful storage deadlocks, chaos engineering traps, BGP interconnects, and FinOps models.
19 โ 22 / 25 Correct
Staff SRE / Principal Architect
Comprehensive mastery of failure modes, edge cases, and break-glass production triage.
15 โ 18 / 25 Correct
Senior Platform Engineer
Strong operational foundation; review Tier 4 & Tier 5 failure modes (canary schema traps, CSI zone locks).
11 โ 14 / 25 Correct
Mid-Level Cloud Engineer
Solid conceptual basics; deepen understanding of kernel DNS amplification and OIDC trust policies.
< 11 / 25 Correct
Developing SRE
Re-read the masterclass lessons in Phase 3 (DevSecOps), Phase 4 (EKS & CSI), and Phase 5 (GitOps).
๐ง Complete Operations, K8s, DevEx & LLMOps One-Line Memory Bank (Lesson-by-Lesson)
Use these rapid-fire one-line questions and answers to lock every single lesson of Phases 3, 3B, 4, 5, 6, 7, and 8 into long-term memory.
๐ก๏ธ Phase 3: DevSecOps & Supply Chain
32 Rapid Q&As
Lesson 1: Image Security & Cosign
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why is deploying container tags like nginx:latest or app:1.2 dangerous in production? |
Image tags are mutable pointers that can be overwritten; production deployments must pin immutable @sha256:<digest> hashes. |
| 2 |
What Trivy flag breaks a CI/CD pipeline only when a CRITICAL vulnerability actually has a published vendor patch? |
trivy image --exit-code 1 --severity CRITICAL --ignore-unfixed <image>. |
| 3 |
What are the two standard formats for a Software Bill of Materials (SBOM)? |
CycloneDX (cyclonedx-json) and SPDX (spdx-json). |
| 4 |
How does Sigstore Cosign Keyless Signing sign images without storing long-lived private keys? |
It exchanges the CI runnerโs short-lived OIDC token with Fulcio (CA) for a 10-minute certificate and records the signature proof in Rekor (transparency log). |
| 5 |
Why does Cosign verification fail in air-gapped Kubernetes clusters if Rekor transparency log verification is left at default? |
Kyverno/Cosign tries to reach the public internet (rekor.sigstore.dev) and times out; air-gapped clusters require offline TUF roots or KMS-backed signing keys. |
| 6 |
What Kyverno rule type verifies Cosign image signatures and mutates tags into immutable @sha256 digests at admission time? |
The verifyImages block inside a ClusterPolicy. |
| 7 |
Where does Cosign store image signatures and SBOM attestations? |
Directly inside the OCI container registry (ECR/GHCR) as attached .sig and .att artifact layers alongside the container image. |
| 8 |
What command attaches a CycloneDX SBOM as a cryptographically signed in-toto attestation to an OCI image? |
cosign attest --predicate sbom.json --type cyclonedx <image@sha256:digest>. |
Lesson 2: GitHub Actions & AWS OIDC
| # |
One-Line Question |
One-Line Answer |
| 1 |
What mandatory permission must be set in a GitHub Actions workflow YAML to request an OIDC JWT token? |
permissions: id-token: write. |
| 2 |
What URL is configured as the OIDC Identity Provider URL in AWS IAM for GitHub Actions? |
https://token.actions.githubusercontent.com with Audience sts.amazonaws.com. |
| 3 |
What AWS STS API action does aws-actions/configure-aws-credentials call under the hood when using OIDC? |
sts:AssumeRoleWithWebIdentity. |
| 4 |
Why is setting the IAM Trust Policy condition to "token.actions.githubusercontent.com:sub": "repo:my-org/*" a critical security vulnerability? |
The wildcard * allows any feature branch or pull request in any repository across the entire GitHub organization to assume your production IAM Role. |
| 5 |
How do you lock an AWS IAM Role Trust Policy so only the main branch of payment-service can assume it? |
Use StringEquals on "token.actions.githubusercontent.com:sub": "repo:my-org/payment-service:ref:refs/heads/main". |
| 6 |
Why must "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" always be verified in the IAM Trust Policy? |
It prevents confused-deputy token replay attacks where a JWT minted for another audience is replayed against AWS STS. |
| 7 |
What is the default validity duration of temporary AWS credentials returned by AssumeRoleWithWebIdentity in CI/CD? |
1 hour (3600 seconds), configurable down to 15 minutes. |
| 8 |
Why must third-party GitHub Actions in enterprise workflows be pinned to a 40-character Git commit SHA (uses: actions/checkout@b4ffde6...) instead of @v4? |
Version tags (@v4) are mutable and can be hijacked if an upstream maintainerโs account is compromised (Supply Chain Tag Poisoning). |
Lesson 3: Secrets Scanning & ESO
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why does deleting a leaked secret in a new Git commit fail to secure the repository? |
The secret remains permanently readable inside the .git/objects history of earlier commits and can be extracted with git log -p. |
| 2 |
What tool scans Git commit history and pre-commit staged changes using regex and Shannon entropy analysis to block leaked keys? |
Gitleaks (gitleaks protect --staged -v). |
| 3 |
Are standard Kubernetes Secret objects encrypted by default in etcd? |
No, they are merely Base64-encoded strings unless KMS envelope encryption at rest is explicitly enabled on the EKS/K8s control plane. |
| 4 |
What Kubernetes operator synchronizes external cloud secrets (AWS Secrets Manager / Vault) into native Kubernetes Secret objects? |
External Secrets Operator (ESO). |
| 5 |
What is the difference between a SecretStore and a ClusterSecretStore in ESO? |
SecretStore is namespace-scoped, while ClusterSecretStore is cluster-wide and can project secrets into multiple namespaces with RBAC conditions. |
| 6 |
Why did setting refreshInterval: 1s across 500 ExternalSecret objects cause an AWS outage and surprise $4,000 bill? |
It generated 500 GetSecretValue API calls per second, hitting AWS Secrets Manager account rate limits (ThrottlingException) and API call billing. |
| 7 |
What is the recommended production refreshInterval for ESO ExternalSecret resources? |
1h (or event-driven refresh), combined with Reloader (reloader.stakater.com/auto: "true") to roll pods only when secret SHA hashes actually change. |
| 8 |
How does ESO authenticate to AWS Secrets Manager without storing static AWS keys in the cluster? |
Via EKS IRSA (IAM Roles for Service Accounts) or EKS Pod Identity attached to the ESO controller ServiceAccount. |
Lesson 4: 2-User Secret Rotation & SLSA
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why does single-user database password rotation cause application downtime? |
Between the millisecond the password changes in RDS and the minute Kubernetes pods reload the secret, active pods fail authentication (FATAL: password authentication failed). |
| 2 |
How does the Alternating 2-User (Dual-Account) Rotation Strategy achieve zero-downtime secret rotation? |
User A remains active serving live traffic while User Bโs password is rotated in the background; once updated, new pods switch to User B while User A stays valid during drain. |
| 3 |
What are the 4 sequential steps executed by an AWS Secrets Manager rotation Lambda function? |
createSecret โ setSecret โ testSecret โ finishSecret. |
| 4 |
What are the two staging labels used by AWS Secrets Manager during rotation? |
AWSCURRENT (active credentials), AWSPENDING (new secret being tested), and AWSPREVIOUS (last known good secret for instant rollback). |
| 5 |
What does SLSA (Supply-chain Levels for Software Artifacts) protect against? |
Tampering of source code, build scripts, dependencies, or artifacts at any stage between a developerโs commit and production deployment. |
| 6 |
What is the defining requirement of SLSA Level 3 provenance? |
Builds must run on hardened, isolated, ephemeral build environments that generate unforgeable cryptographic provenance attestations signed by the control plane. |
| 7 |
What file format does SLSA use to describe build inputs, builder identity, and output artifact digests? |
in-toto Attestation Framework (https://slsa.dev/provenance/v1 JSON predicate). |
| 8 |
How do you verify in Kubernetes that an image was built exclusively by your official GitHub Actions workflow and not on a developerโs laptop? |
Configure Kyverno verifyImages to validate the SLSA provenance attestation issuer (token.actions.githubusercontent.com) and workflow repository URI. |
๐ก๏ธ Phase 3B: Compliance & Patching
29 Rapid Q&As
Lesson 1: Immutable Golden AMIs
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why is mutable infrastructure (running apt upgrade or Ansible via SSH on live production servers) an anti-pattern? |
It causes Configuration Drift (โsnowflake serversโ), slow auto-scaling boot times, and irreproducible outages when package mirrors fail mid-scale. |
| 2 |
What is the core workflow of Immutable Infrastructure using HashiCorp Packer? |
Packer boots a temporary builder VM, applies OS hardening and CIS benchmarks, strips SSH keys, snapshots a Golden AMI, and terminates the builder VM. |
| 3 |
Why must /etc/machine-id be truncated (truncate -s 0 /etc/machine-id) before Packer snapshots a Golden AMI? |
If cloned nodes share the same /etc/machine-id, DHCP servers assign duplicate IPs, systemd journald merges logs, and Kubernetes node registration collides. |
| 4 |
What is CIS (Center for Internet Security) Level 1 vs Level 2 OS hardening? |
Level 1 applies safe production security defaults with zero performance impact; Level 2 applies extreme defense-in-depth (e.g., strict SELinux/FIPS) for regulated workloads. |
| 5 |
Which kernel sysctl parameters must be baked into a Kubernetes worker Golden AMI for CNI networking to function? |
net.bridge.bridge-nf-call-iptables = 1 and net.ipv4.ip_forward = 1. |
| 6 |
What tool runs automated compliance tests (verifying file permissions, disabled kernel modules, and sysctls) inside Packer before creating the AMI? |
OpenSCAP, Chef InSpec, or Goss. |
| 7 |
Why do we disable swap (swapoff -a and remove swap from /etc/fstab) on Kubernetes worker Golden AMIs? |
Kubernetes QoS memory guarantees and deterministic OOM eviction require predictable RAM limits without kernel disk swapping latency. |
| 8 |
How do you distribute a newly baked Golden AMI across 50 AWS accounts in an AWS Organization without copying snapshots? |
Share the AMI via AWS RAM / Organization AMI sharing and grant the Organization principal kms:Decrypt permission on the AMIโs EBS Customer Managed KMS Key. |
Lesson 2: Automated Fleet Patching
| # |
One-Line Question |
One-Line Answer |
| 1 |
How do you patch 500 immutable EC2 instances when a critical Linux kernel CVE is announced? |
Bake a new Golden AMI, update the AWS Launch Template $Latest version via Terraform, and trigger an Auto Scaling Group (ASG) Instance Refresh. |
| 2 |
What does MinHealthyPercentage = 90 and MaxHealthyPercentage = 110 mean in an ASG Instance Refresh? |
ASG surges capacity up to 110% by launching new patched instances before terminating up to 10% of old instances at a time, preserving 100% capacity. |
| 3 |
Why is setting health_check_type = "EC2" on a production Auto Scaling Group a critical reliability trap? |
EC2 health checks only verify hypervisor power state; ELB health checks must be used so ASG waits until the application passes HTTP /healthz before terminating the next batch. |
| 4 |
What mechanism pauses an ASG Instance Refresh automatically if a newly patched AMI starts throwing HTTP 5xx errors? |
ASG CloudWatch Alarm Auto-Rollbackโtriggers an immediate rollback to the previous Launch Template version when the error alarm breaches. |
| 5 |
What happens when an ASG terminates a Kubernetes worker node without an EC2 Lifecycle Hook? |
The instance is killed abruptly, severing active user connections and leaving stateful volumes uncleanly attached. |
| 6 |
How does an ASG Terminate Lifecycle Hook achieve zero-downtime Kubernetes node replacement? |
It pauses instance termination in Terminating:Wait, sends an EventBridge notification to AWS Node Termination Handler / Karpenter, which runs kubectl cordon and kubectl drain before completing the hook. |
| 7 |
How does Karpenter Drift & Expiration (ttlSecondsAfterEmpty / expireAfter) automate node patching without ASGs? |
When the underlying EKS AMI SSM Parameter updates, Karpenter marks existing nodes as Drifted and automatically cordons, drains, and replaces them respecting Disruption Budgets. |
| 8 |
What is the difference between Canary Baking and Blue/Green Cluster Upgrades for fleet patching? |
Canary Baking replaces 5% of nodes and monitors metrics for 1 hour before rolling out to 95%, whereas Blue/Green provisions an entirely separate node group and shifts pods across. |
Lesson 3: Continuous Compliance & PDBs
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the difference between Preventive Controls and Detective Controls in cloud compliance? |
Preventive blocks violations before creation (SCPs, OPA/Kyverno in CI); Detective audits live running state to catch console drift or newly disclosed CVEs (AWS Config, Falco). |
| 2 |
How does AWS Config Auto-Remediation fix an S3 bucket that an admin accidentally made public in the console? |
AWS Config detects s3-bucket-public-read-prohibited is NON_COMPLIANT and invokes an AWS Systems Manager (SSM) Automation Document (AWS-DisableS3BucketPublicReadWrite) within seconds. |
| 3 |
What Kubernetes resource prevents automated node patching (kubectl drain) from terminating all replicas of a microservice simultaneously? |
PodDisruptionBudget (PDB). |
| 4 |
What is the difference between minAvailable and maxUnavailable in a PodDisruptionBudget? |
minAvailable enforces the minimum number/percentage of pods that must remain running; maxUnavailable enforces the maximum number of pods that can be offline at once. |
| 5 |
Why does a Deployment with replicas: 2 and a PDB with minAvailable: 2 (or maxUnavailable: 0) cause kubectl drain to hang forever? |
The Eviction API refuses to evict any pod because dropping from 2 to 1 violates minAvailable: 2, creating an Infinite Node Drain Deadlock. |
| 6 |
Why is setting maxUnavailable: 1 (or 25%) generally safer than minAvailable: 100% for production deployments? |
maxUnavailable: 1 always permits at least one pod at a time to be gracefully evicted during node drains regardless of how low HPA scales the replica count (provided replicas >= 2). |
| 7 |
Does a PodDisruptionBudget prevent pods from going down when a physical EC2 instance suffers an involuntary hardware crash? |
No, PDBs only govern voluntary disruptions initiated via the Kubernetes Eviction API (kubectl drain, Karpenter consolidation, Cluster Autoscaler scale-down). |
| 8 |
How do you break a stuck kubectl drain caused by a misconfigured PDB during an emergency security patch? |
Patch or delete the offending PDB (kubectl patch pdb <name> -p '{"spec":{"maxUnavailable":1}}'), or use kubectl drain --disable-eviction in a break-glass emergency. |
Hands-On Labs: Phase 3 & 3B Exercises
| # |
One-Line Question |
One-Line Answer |
| 1 |
What command validates a Packer HCL templateโs syntax and variable definitions before running a cloud build? |
packer validate . (after packer init .). |
| 2 |
How do you check which PodDisruptionBudgets in a cluster currently have ALLOWED DISRUPTIONS = 0 and will block node drains? |
Run kubectl get pdb -A and look for any PDB where ALLOWED DISRUPTIONS is 0. |
| 3 |
How do you verify a Cosign keyless signature on a container image using the command line? |
cosign verify --certificate-identity <workflow-uri> --certificate-oidc-issuer https://token.actions.githubusercontent.com <image@sha256:digest>. |
| 4 |
How do you force External Secrets Operator to immediately re-sync an ExternalSecret from AWS Secrets Manager without waiting for refreshInterval? |
Annotate the resource with a current timestamp: kubectl annotate es <name> force-sync=$(date +%s) --overwrite. |
| 5 |
How do you monitor the live percentage progress and status of an AWS Auto Scaling Group Instance Refresh? |
Run aws autoscaling describe-instance-refreshes --auto-scaling-group-name <asg-name>. |
โธ๏ธ Phase 4: Kubernetes & Scaling
55 Rapid Q&As
Lesson 1: EKS Architecture & IRSA
| # |
One-Line Question |
One-Line Answer |
| 1 |
Which control plane components are managed by AWS in an Amazon EKS cluster? |
Multi-AZ kube-apiserver, etcd quorum, kube-scheduler, kube-controller-manager, and cloud-controller-manager. |
| 2 |
How does the AWS VPC CNI (aws-node DaemonSet) differ from overlay CNIs like Flannel or Calico VXLAN? |
It allocates real first-class AWS VPC IPv4 addresses from the subnet directly to pods via secondary IPs on Elastic Network Interfaces (ENIs), eliminating VXLAN encapsulation overhead. |
| 3 |
Why does an m5.large EC2 instance stop scheduling new pods at 29 pods even when CPU and RAM are 70% idle? |
Each m5.large supports a maximum of 3 ENIs ร 10 IPs per ENI = 30 IPs (minus 1 for the node primary IP = 29 pods max). |
| 4 |
How does AWS VPC CNI Prefix Delegation (ENABLE_PREFIX_DELEGATION = "true") solve pod density limits on EKS? |
Instead of assigning single /32 secondary IPs to ENIs slots, AWS assigns /28 IPv4 prefixes (16 IPs per slot), increasing an m5.large nodeโs capacity from 29 to 110 pods. |
| 5 |
Why must production EKS worker nodes block access to EC2 Instance Metadata Service v1 (IMDSv1) and enforce IMDSv2 with http_put_response_hop_limit = 1? |
A hop limit of 1 ensures IMDS packets cannot be forwarded across the containerโs veth router hop, preventing SSRF attacks in pods from stealing the Worker Nodeโs IAM Role credentials. |
| 6 |
How does IRSA (IAM Roles for Service Accounts) inject AWS credentials into a specific pod? |
The EKS Pod Identity Webhook mutates the pod to mount a projected OIDC JWT token and injects AWS_ROLE_ARN and AWS_WEB_IDENTITY_TOKEN_FILE environment variables. |
| 7 |
What happens if an EBS PersistentVolumeClaim uses a StorageClass with volumeBindingMode: Immediate in a 3-AZ EKS cluster? |
The EBS volume is provisioned immediately in a random AZ (e.g., AZ-a) before the pod is scheduled; if the pod is later scheduled to AZ-b, it hangs in ContainerCreating forever. |
| 8 |
Why is volumeBindingMode: WaitForFirstConsumer mandatory on all production AWS EBS StorageClasses? |
It delays creating the physical EBS volume until kube-scheduler picks a specific worker node, guaranteeing the volume is created in the exact same Availability Zone as the pod. |
| 9 |
When must you use the Amazon EFS CSI Driver instead of the Amazon EBS CSI Driver? |
When multiple pods across different worker nodes and Availability Zones must mount the exact same volume concurrently using ReadWriteMany (RWX). |
| 10 |
How does EKS Pod Identity (introduced at re:Invent 2023) simplify IRSA at multi-cluster scale? |
It uses an on-node agent (eks-pod-identity-agent on 169.254.170.23) and IAM Role Session Tags without requiring cluster-specific OIDC Provider thumbprints in IAM Trust Policies. |
Lesson 2: Karpenter & Spot Fleets
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why does Karpenter launch replacement worker nodes in 30โ45 seconds while Cluster Autoscaler takes 3โ5 minutes? |
Karpenter bypasses AWS Auto Scaling Groups (ASGs) entirely and calls the EC2 Fleet API directly based on real-time pending pod resource requests and topology constraints. |
| 2 |
What are the two core Custom Resource Definitions (CRDs) used to configure Karpenter v1? |
NodePool (defines pod scheduling constraints, taints, and disruption policies) and EC2NodeClass (defines AWS-specific AMI, subnets, security groups, and EBS block mappings). |
| 3 |
Why must you specify a wide variety of instance families (m5, m6i, c5, c6i, r5) in a Karpenter Spot NodePool? |
Spot diversification across 15+ instance pools allows EC2 Fleet price-capacity-optimized allocation to pick the deepest capacity pool with the lowest interruption rate. |
| 4 |
How does Karpenter allow a single NodePool to prioritize Spot instances while automatically falling back to On-Demand if Spot capacity is exhausted? |
Include both "spot" and "on-demand" in karpenter.sh/capacity-type; Karpenter always attempts cheaper Spot first and automatically falls back to On-Demand if InsufficientInstanceCapacity occurs. |
| 5 |
What AWS infrastructure is required for Karpenter to gracefully drain Spot nodes before AWS reclaims them? |
An Amazon EventBridge rule capturing EC2 Spot Instance Interruption Warnings (2-minute notice) and Rebalance Recommendations, routing them into an Amazon SQS queue polled by Karpenter. |
| 6 |
What annotation on a critical stateful pod prevents Karpenter Consolidation from voluntarily evicting that pod to save money? |
karpenter.sh/do-not-disrupt: "true". |
| 7 |
How do you prevent Karpenter from consolidating nodes during peak daytime business traffic while allowing aggressive cost consolidation overnight? |
Configure Disruption Budgets with Cron Schedules inside spec.disruption.budgets (e.g., nodes: "0" during peak business hours). |
| 8 |
What Kubernetes construct ensures replicas of a deployment are distributed evenly across Availability Zones (maxSkew: 1) so a single Spot AZ reclamation doesnโt take down the service? |
topologySpreadConstraints keyed on topology.kubernetes.io/zone and kubernetes.io/hostname. |
Lesson 3: Helm & Kustomize
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the fundamental architectural difference between Helm and Kustomize? |
Helm is a Go-templating package manager with release lifecycle history ({{ .Values.x }}), while Kustomize is a template-free YAML overlay patching engine built natively into kubectl -k. |
| 2 |
Where does Helm v3 store its release state history inside a Kubernetes cluster? |
As compressed, double-Base64-encoded Kubernetes Secret objects labeled owner=helm inside the target release namespace. |
| 3 |
What causes a Helm release to get stuck in pending-upgrade or pending-install, blocking all future deployments? |
A previous helm upgrade CI runner crashed or timed out before writing the final status back to the Helm release Secret. |
| 4 |
How do you recover a Helm release stuck in pending-upgrade? |
Run helm history <release> and execute helm rollback <release> <last-deployed-revision> (or delete the stuck pending-upgrade Helm secret revision). |
| 5 |
Why should helm upgrade --install --atomic be used safely with caution in automated pipelines? |
--atomic automatically rolls back the release if any pod fails readiness within --timeout, which is safe for stateless apps but can interrupt slow database migrations if timeout is too short. |
| 6 |
What is the difference between a Strategic Merge Patch and a JSON 6902 Patch in Kustomize? |
Strategic Merge looks like a partial Kubernetes YAML manifest that merges by key/name, while JSON 6902 uses explicit surgical operations (op: replace, path: /spec/replicas, value: 5). |
| 7 |
How does Kustomize trigger an automatic rolling restart of a Deployment whenever a ConfigMapโs data changes? |
Kustomize configMapGenerator appends a 10-character content SHA hash suffix to the ConfigMap name (e.g., app-config-8g9f2k) and updates the Deploymentโs volume reference automatically. |
| 8 |
How do enterprise teams combine Helm and Kustomize for third-party charts like Prometheus or Ingress-Nginx? |
Render the upstream Helm chart and apply environment-specific Kustomize overlays on top (using helmCharts in kustomization.yaml or Helm --post-renderer). |
Lesson 4: Ingress & AWS ALB Controller
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the difference between alb.ingress.kubernetes.io/target-type: instance and target-type: ip? |
instance routes ALB traffic to a NodePort on EC2 nodes (adding an extra kube-proxy hop), whereas ip routes directly from the ALB to the Podโs VPC IP address via AWS VPC CNI. |
| 2 |
Why does deleting or creating a standard AWS Ingress per microservice become expensive at 100+ services? |
By default, each Ingress object provisions a dedicated AWS Application Load Balancer (~$18โ$25/month base fee each). |
| 3 |
How do you share a single AWS Application Load Balancer across 50 Ingress objects in different namespaces? |
Add the annotation alb.ingress.kubernetes.io/group.name: shared-prod-alb to all 50 Ingress manifests. |
| 4 |
Why do users experience intermittent HTTP 502 / 504 Bad Gateway errors for 5โ10 seconds during a zero-downtime Kubernetes rolling update behind an AWS ALB? |
kubelet sends SIGTERM to the pod at the exact same millisecond the Endpoints controller notifies the ALB controller; the pod stops accepting connections before the ALB finishes removing its IP from the Target Group! |
| 5 |
What two configurations completely eliminate the AWS ALB 502 Bad Gateway race condition during pod termination? |
Add a container lifecycle.preStop hook (exec: command: ["/bin/sleep", "15"]) and enable Pod Readiness Gates (elbv2.k8s.aws/pod-readiness-gate-inject: enabled) on the namespace. |
| 6 |
What must always satisfy the inequality terminationGracePeriodSeconds > preStop_sleep + app_drain_time? |
The Podโs terminationGracePeriodSeconds (e.g., 60s > 15s preStop + 30s ALB deregistration delay) so kubelet does not SIGKILL the pod while in-flight requests are draining. |
| 7 |
How does the AWS Load Balancer Controller automatically attach an SSL/TLS certificate and a WAFv2 WebACL to an ALB? |
Via Ingress annotations alb.ingress.kubernetes.io/certificate-arn (ACM) and alb.ingress.kubernetes.io/wafv2-acl-arn. |
| 8 |
How do you automatically sync Kubernetes Ingress and Service hostnames into AWS Route 53 Hosted Zones? |
Deploy ExternalDNS with an IRSA role granting route53:ChangeResourceRecordSets. |
Lesson 5: Prometheus & PromQL
| # |
One-Line Question |
One-Line Answer |
| 1 |
What are the 4 core Prometheus metric types? |
Counter (monotonic cumulative count), Gauge (goes up/down), Histogram (server-side bucketed latency), and Summary (client-side quantiles). |
| 2 |
What is the exact difference between PromQL rate(metric[5m]) and irate(metric[5m])? |
rate() calculates the average per-second rate across all samples in the 5m window (smooth, used for alerts); irate() uses only the last 2 samples (spiky, used for high-resolution graphs). |
| 3 |
How do you calculate the 99th percentile (p99) HTTP latency from a Prometheus Histogram in PromQL? |
histogram_quantile(0.99, sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))). |
| 4 |
Why must le (less-than-or-equal bucket label) always be included inside the sum by (le) clause of histogram_quantile()? |
Without le, PromQL collapses all histogram buckets into a single sum, destroying the bucket distribution required to interpolate quantiles. |
| 5 |
What causes a Prometheus High-Cardinality Outage (OOMKill)? |
Adding unbounded labels like user_id, email, request_id, or full URL paths creates millions of unique time series in the TSDB in-memory Head Block. |
| 6 |
How do you immediately drop a rogue high-cardinality label at scrape time before it enters Prometheus TSDB? |
Add a metric_relabel_configs rule with action: labeldrop and regex: "user_id" inside the ServiceMonitor or scrape_config. |
| 7 |
Why canโt a single standalone Prometheus server scale horizontally or store 2 years of enterprise metrics natively? |
Prometheus uses local node block storage without built-in distributed clustering; long-term HA requires Thanos or Grafana Mimir backed by Amazon S3. |
| 8 |
How does Thanos Sidecar + Thanos Querier deduplicate metrics from two identical HA Prometheus replicas? |
Both Prometheus servers attach an external_labels: {replica: "a/b"} label, and thanos-query runs with --query.replica-label=replica to merge and deduplicate series on the fly. |
Lesson 6: CoreDNS ndots & Cluster Upgrades
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why does a Kubernetes pod querying api.stripe.com generate 8 unnecessary DNS queries before resolving the real IP? |
Default /etc/resolv.conf sets ndots:5; since api.stripe.com has only 2 dots (2 < 5), glibc appends all 4 cluster search domains (in both IPv4 A and IPv6 AAAA) before querying the absolute domain. |
| 2 |
What are the 3 fastest ways to eliminate CoreDNS ndots:5 amplification in high-throughput clusters? |
(1) Deploy NodeLocal DNSCache, (2) set dnsConfig.options: [{name: ndots, value: "2"}], or (3) append a trailing dot (api.stripe.com.) in application config to make it an explicit FQDN. |
| 3 |
How does NodeLocal DNSCache prevent Linux kernel conntrack table exhaustion and 5-second UDP DNS timeouts? |
It runs a local caching daemon on every node (169.254.20.10) that serves cached queries locally and upgrades upstream cache-misses to CoreDNS from lossy UDP to multiplexed TCP. |
| 4 |
Can you upgrade an Amazon EKS cluster directly from version 1.28 to 1.31 in one step? |
No, Kubernetes strictly prohibits skipping minor versions; you must upgrade sequentially (1.28 โ 1.29 โ 1.30 โ 1.31). |
| 5 |
What is the official Kubernetes Version Skew Policy between kube-apiserver and worker node kubelet? |
kubelet may be up to 3 minor versions older than kube-apiserver (in EKS, keep nodes within 1โ2 minor versions), and must never be newer than kube-apiserver. |
| 6 |
What CLI tool scans a live cluster and Git manifests to detect removed or deprecated Kubernetes API versions (like autoscaling/v2beta2 or networking.k8s.io/v1beta1) before upgrading? |
Pluto (pluto detect-all-in-cluster) or Kubent (kube-no-trouble). |
| 7 |
In what exact sequence must components be upgraded during a production EKS cluster upgrade? |
(1) Audit deprecated APIs โ (2) Upgrade EKS Control Plane โ (3) Upgrade core add-ons (vpc-cni, coredns, kube-proxy, ebs-csi) โ (4) Roll/replace Worker Nodes. |
| 8 |
Why should you verify PodDisruptionBudgets and topologySpreadConstraints before triggering a worker node group upgrade? |
A single misconfigured PDB with ALLOWED DISRUPTIONS = 0 will cause the managed node group rolling upgrade to stall and fail with NodeEvictionFailure. |
Hands-On Labs: Phase 4 Exercises
| # |
One-Line Question |
One-Line Answer |
| 1 |
What command launches a temporary debugging container attached to the process and network namespace of a running distroless pod? |
kubectl debug -it <pod-name> --image=nicolaka/netshoot --target=<container-name>. |
| 2 |
How do you inspect the exact AWS IAM Role ARN attached to a Kubernetes ServiceAccount for IRSA? |
kubectl get sa <sa-name> -o jsonpath='{.metadata.annotations.eks\.amazonaws\.com/role-arn}'. |
| 3 |
How do you identify the top 10 highest-cardinality metric names inside a Prometheus TSDB? |
Query /api/v1/status/tsdb in the Prometheus UI or run promtool tsdb analyze /prometheus. |
| 4 |
What PromQL query detects pods that are experiencing >25% Linux CFS CPU quota throttling? |
rate(container_cpu_cfs_throttled_periods_total[5m]) / rate(container_cpu_cfs_periods_total[5m]) > 0.25. |
| 5 |
What command shows real-time node provisioning decisions and bin-packing events from Karpenter? |
kubectl logs -n kube-system -l app.kubernetes.io/name=karpenter -f. |
๐ Phase 5: GitOps & Control Planes
45 Rapid Q&As
Lesson 1: ArgoCD App of Apps
| # |
One-Line Question |
One-Line Answer |
| 1 |
What are the 3 core architectural microservices that make up an ArgoCD installation? |
argocd-server (API/UI), argocd-repo-server (clones Git & renders Helm/Kustomize), and argocd-application-controller (StatefulSet comparing live K8s state against Git). |
| 2 |
What is the difference between automated.prune: true and automated.selfHeal: true in an ArgoCD Application? |
prune: true deletes cluster resources when their YAML files are deleted from Git; selfHeal: true overwrites manual kubectl edit changes on the cluster back to match Git. |
| 3 |
What is the ArgoCD App of Apps Pattern? |
Bootstrapping a cluster with a single root Application CRD whose Git directory contains child Application manifests for all other platform add-ons and workloads. |
| 4 |
How do you force ArgoCD to install Custom Resource Definitions (CRDs) before deploying operators, and operators before deploying custom resources? |
Annotate manifests with ArgoCD Sync Waves (argocd.argoproj.io/sync-wave: "-1", "0", "1"), which applies lower numbers first and waits for health checks between waves. |
| 5 |
What ArgoCD Hook runs a database schema migration Job automatically before deploying new application pods? |
argocd.argoproj.io/hook: PreSync combined with argocd.argoproj.io/hook-delete-policy: BeforeHookCreation. |
| 6 |
What causes an ArgoCD Infinite OutOfSync Loop where a Deployment continuously syncs every 3 seconds? |
A cluster controller (like HPA mutating spec.replicas or a MutatingWebhook injecting defaults) modifies fields that conflict with the static values in Git. |
| 7 |
How do you fix an ArgoCD Infinite Sync Loop caused by HPA modifying spec.replicas? |
Remove spec.replicas from the Git YAML manifest or add ignoreDifferences for /spec/replicas with RespectIgnoreDifferences=true in syncOptions. |
| 8 |
Why does deleting an ArgoCD Application with metadata.finalizers: [resources-finalizer.argocd.argoproj.io] perform a cascading delete of all child Kubernetes resources? |
The finalizer instructs the controller to delete every managed Deployment, Service, and PVC before removing the Application object itself; omitting the finalizer performs an Orphan Delete. |
Lesson 2: Argo Rollouts & Canaries
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why is the native Kubernetes Deployment RollingUpdate strategy insufficient for mission-critical FinTech releases? |
Native RollingUpdate only checks basic pod readinessProbe status, cannot split traffic by exact percentages (e.g., 2%), and cannot auto-rollback based on Prometheus error-rate SLIs. |
| 2 |
What CRD replaces kind: Deployment when adopting progressive delivery with Argo Rollouts? |
kind: Rollout (apiVersion: argoproj.io/v1alpha1). |
| 3 |
What is the difference between Blue/Green and Canary deployment strategies in Argo Rollouts? |
Blue/Green provisions 100% duplicate capacity (activeService vs previewService) and flips traffic instantly; Canary shifts traffic incrementally (5% โ 20% โ 50% โ 100%) with automated metric pauses. |
| 4 |
Without a service mesh or ingress controller, why canโt a 4-replica Kubernetes Deployment achieve a 5% canary traffic split? |
Native Service routing distributes traffic per pod (1 / 4 = 25% minimum increment); achieving 5% requires L7 weighted routing via AWS ALB, NGINX, Cilium, or Istio Gateway API. |
| 5 |
What Argo Rollouts CRD queries Prometheus or Datadog during a canary rollout and triggers an automatic rollback if error rates breach 1%? |
AnalysisTemplate (instantiated at runtime as an AnalysisRun). |
| 6 |
In an AnalysisTemplate, what is the difference between failureLimit: 2 and inconclusiveLimit? |
failureLimit: 2 aborts and rolls back the canary after 2 failed metric checks; inconclusiveLimit pauses the rollout when Prometheus returns NaN (e.g., zero traffic during off-hours). |
| 7 |
What causes the Canary Database Schema Trap where an automated canary rollback brings down 100% of production? |
The canary executed a destructive SQL migration (e.g., renaming or dropping a column) that broke backward compatibility with the stable v1 pods. |
| 8 |
How do you guarantee safe canary rollbacks when evolving relational database schemas? |
Strictly enforce the Expand-and-Contract (Parallel Change) Patternโnever drop or rename columns in the same release that deploys new code. |
Lesson 3: Crossplane Control Planes
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the fundamental architectural difference between Terraform and Crossplane? |
Terraform is a CLI/pipeline tool that runs once at CI time, whereas Crossplane runs inside Kubernetes as an active 24/7 reconciliation loop that continuously self-heals cloud drift. |
| 2 |
Define the 4 core building blocks of Crossplane (Provider, MR, XRD, Composition). |
Provider (AWS/GCP API controller), Managed Resource (MR) (1:1 cloud resource like an RDS instance), XRD (custom API schema), and Composition (template combining multiple MRs). |
| 3 |
Why did Crossplane introduce Composition Functions (KCL / Python / Go) to replace traditional Patch-and-Transform YAML? |
Traditional YAML patching became thousands of lines of untestable spaghetti lacking loops or conditionals; KCL Functions allow concise, strongly typed programmatic logic with unit testing. |
| 4 |
How does a developer provision an AWS RDS database and S3 bucket using Crossplane without knowing AWS IAM or VPC subnet IDs? |
The developer commits a 10-line Composite Resource Claim (XRC) YAML specifying storageGB: 50, and the Platform Teamโs Composition translates it into hardened AWS resources. |
| 5 |
What happens if someone manually deletes a Crossplane-managed Security Group in the AWS Console? |
Within ~60 seconds, the Crossplane Provider reconciles live AWS state against the Kubernetes desired state and automatically recreates the deleted Security Group. |
| 6 |
What causes a Crossplane Finalizer Deadlock where a deleted Composite Resource hangs in Terminating forever? |
Either the ProviderConfig credentials were deleted before the cloud resource was destroyed, or AWS rejected deletion due to child dependencies (e.g., non-empty S3 bucket or active ENI). |
| 7 |
What flag on a Crossplane Managed Resource prevents kubectl delete from accidentally destroying a production cloud database? |
spec.deletionPolicy: Orphan (alongside spec.managementPolicies: ["Observe", "Create", "Update"] omitting "Delete"). |
| 8 |
How does Crossplane deliver newly generated RDS database credentials directly to the application pod? |
Using writeConnectionSecretToRef, which writes the endpoint, username, and password into a native Kubernetes Secret inside the applicationโs namespace. |
Lesson 4: ApplicationSets & Matrix Generators
| # |
One-Line Question |
One-Line Answer |
| 1 |
What problem does the ArgoCD ApplicationSet Controller solve at fleet scale? |
It eliminates manually writing hundreds of repetitive Application YAML manifests by dynamically generating them from a single template using Generators. |
| 2 |
Name the 4 most common ArgoCD ApplicationSet Generators. |
List Generator, Cluster Generator (matches cluster labels), Git Generator (directory or file discovery), and Pull Request Generator (ephemeral preview environments). |
| 3 |
What does the Matrix Generator do in an ArgoCD ApplicationSet? |
It computes the Cartesian Product (M ร N) of two generatorsโfor example, combining 10 Clusters (Cluster Generator) ร 15 Add-ons (Git Generator) = 150 Applications from one file. |
| 4 |
What does the Merge Generator do when combined with a Matrix Generator? |
It allows per-cluster or per-environment configuration overrides (e.g., overriding replica counts or versions for prod-india while keeping defaults for dev). |
| 5 |
What catastrophic outage can happen if a developer deletes a directory in Git watched by an ApplicationSet with default settings? |
The ApplicationSet deletes the generated Application CRDs, which triggers a cascading delete of all production workloads across every cluster! |
| 6 |
How do you protect production clusters from accidental mass-deletion by an ApplicationSet? |
Configure spec.syncPolicy.preserveResourcesOnDeletion: true (or set applicationsSync: create-update) on the ApplicationSet. |
| 7 |
How do you prevent an ApplicationSet from upgrading Cilium or CoreDNS across all 50 production clusters at the exact same second? |
Enable ApplicationSet Progressive Syncs (RollingSync), which rolls updates out in staged batches (dev โ staging โ 10% prod โ 100% prod) waiting for Healthy status between steps. |
| 8 |
In the Crossplane + ArgoCD Golden Pattern, what is the exact division of responsibilities? |
ArgoCD syncs YAML from Git into the cluster, while Crossplane reconciles those custom YAML CRDs into actual AWS/GCP cloud infrastructure. |
Lesson 5: Hub-and-Spoke ArgoCD & DR
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why do enterprises prefer a Centralized Hub-and-Spoke ArgoCD Architecture over running a separate ArgoCD instance inside every single workload cluster? |
A single Hub control plane provides unified RBAC/SSO, a single pane of glass for 50+ spoke clusters, and removes duplicate ArgoCD compute overhead from workload clusters. |
| 2 |
Where does the Hub ArgoCD store credentials and endpoints for remote Spoke clusters? |
Inside the argocd namespace as Kubernetes Secret objects carrying the label argocd.argoproj.io/secret-type: cluster. |
| 3 |
How does Hub ArgoCD authenticate to remote Amazon EKS Spoke clusters without storing static long-lived bearer tokens? |
Using aws-iam-authenticator / EKS IRSA Cross-Account Role Assumption configured inside the cluster Secretโs execProviderConfig. |
| 4 |
Why does argocd-application-controller get OOMKilled or lag when managing 50+ spoke clusters and 3,000 Applications? |
A single controller replica cannot hold the Informer cache watches for 50 clusters in memory; you must enable Controller Dynamic Sharding (replicas: 5) across spoke clusters. |
| 5 |
Why must the Hub ArgoCD never access Spoke cluster API servers over the public internet? |
Exposing kube-apiserver publicly creates an attack surface; Hub-to-Spoke traffic must route over private AWS Transit Gateway, VPC Peering, or AWS PrivateLink. |
| 6 |
What happens to running pods on the 50 Spoke clusters if the Central Hub ArgoCD cluster goes completely offline for 2 hours? |
Zero impact to live trafficโSpoke workloads continue running normally; only new Git deployments and drift reconciliation are paused until the Hub recovers. |
| 7 |
How do you recover the entire Hub ArgoCD control plane into a warm standby region (ap-south-2) in under 10 minutes without restoring etcd backups? |
Because ArgoCD is 100% declarative in Git, bootstrap the standby Hub cluster with the root App of Apps manifest and Cluster Secrets; ArgoCD reconciles against live spokes without restarting pods. |
| 8 |
What Redis component in ArgoCD must run in HA mode (argocd-redis-ha) for production Hub clusters? |
The Redis cache storing live Kubernetes resource trees and UI session state across argocd-server and argocd-repo-server replicas. |
Hands-On Labs: Phase 5 Exercises
| # |
One-Line Question |
One-Line Answer |
| 1 |
What CLI command manually promotes a paused Argo Rollout canary to the next step? |
kubectl argo rollouts promote <rollout-name>. |
| 2 |
What CLI command immediately aborts a degraded canary rollout and shifts 100% of traffic back to the stable ReplicaSet? |
kubectl argo rollouts abort <rollout-name>. |
| 3 |
How do you trace all child Managed Resources created by a Crossplane Composite Resource from the command line? |
Run crossplane beta trace <xrd-kind> <name>. |
| 4 |
What condition fields must both equal True on a Crossplane Managed Resource to confirm it is healthy and synced with AWS? |
SYNCED = True and READY = True. |
| 5 |
How do you preview the exact Application manifests an ApplicationSet will generate before applying it to the cluster? |
Run argocd appset generate <appset.yaml>. |
๐ Phase 6: Service Mesh & eBPF
32 Rapid Q&As
Lesson 1: Cilium & eBPF
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why does legacy kube-proxy running in iptables mode degrade severely when a cluster scales past 5,000 Kubernetes Services? |
iptables evaluates rules sequentially in an O(N) linear list and must rewrite the entire multi-megabyte rule table atomically on every endpoint update. |
| 2 |
How does Cilium (kubeProxyReplacement: true) achieve O(1) service load-balancing at any cluster scale? |
It attaches eBPF programs to kernel socket and TC hooks that look up Service-to-Pod backends directly inside O(1) eBPF Hash Maps in kernel memory. |
| 3 |
What ensures an eBPF program loaded into the Linux kernel cannot crash the kernel or enter an infinite loop? |
The In-Kernel eBPF Verifier, which performs static DAG code analysis, bounds-checking, and memory safety verification before JIT compilation. |
| 4 |
How does Cilium Socket-Level Load Balancing (bpf_sockops) accelerate pod-to-Service communication? |
It intercepts the connect() syscall at the socket layer and rewrites the ClusterIP directly to the backend Pod IP before packets even enter the TCP/IP packet stack. |
| 5 |
Why does traditional sidecar service mesh architecture (Istio Envoy per pod) add latency and double memory consumption? |
Every packet traverses the Linux TCP/IP stack 4 times per hop (App โ local Envoy โ Wire โ remote Envoy โ remote App), and every pod runs a dedicated Envoy proxy container. |
| 6 |
How does Cilium provides transparent node-to-node encryption across the cluster without sidecars? |
By enabling Kernel-Mode WireGuard Encryption (encryption.enabled=true, encryption.type=wireguard), which encrypts all pod-to-pod traffic between worker nodes at the network interface layer. |
| 7 |
What observability tool built into Cilium provides real-time eBPF network flow logs, DNS query visibility, and service dependency maps? |
Hubble (hubble observe). |
| 8 |
What happens to existing active pod network connections if the cilium-agent DaemonSet pod restarts or crashes? |
Zero packet lossโcompiled eBPF programs and maps persist inside the Linux kernel datapath independently of the user-space cilium-agent control plane. |
Lesson 2: Zero-Trust L7 Policies
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the default network security posture of a fresh Kubernetes cluster without NetworkPolicies? |
Flat allow-all networkโevery pod in every namespace can freely send packets to every other pod across the entire cluster. |
| 2 |
Why are Pod IP addresses unreliable for enforcing security firewall rules in Kubernetes? |
Pod IPs are ephemeral and churn constantly during autoscaling; Cilium uses cryptographic Security Identities (numeric ID) derived from pod labels instead of IP addresses. |
| 3 |
What layers of the OSI model can a standard Kubernetes NetworkPolicy filter vs a CiliumNetworkPolicy? |
Standard NetworkPolicy is strictly L3/L4 (IPs, Pod Labels, TCP/UDP ports), whereas CiliumNetworkPolicy filters L3, L4, and L7 (HTTP methods/paths, gRPC, Kafka topics, DNS FQDNs). |
| 4 |
How do you configure a Zero-Trust Default Deny-All baseline for a namespace in Kubernetes? |
Apply a NetworkPolicy with an empty podSelector: {} and policyTypes: ["Ingress", "Egress"] with no allow rules. |
| 5 |
What critical traffic is accidentally broken if you apply a Default Deny-All Egress policy without an explicit DNS exception? |
Pods immediately lose the ability to resolve DNS names because UDP/TCP Port 53 traffic to kube-dns / coredns in kube-system is blocked! |
| 6 |
How does a CiliumNetworkPolicy allow a pod to egress only to https://api.stripe.com even when Stripeโs CDN rotates IP addresses every minute? |
Using an L7 DNS proxy rule (toFQDNs: [{matchName: "api.stripe.com"}]); Cilium intercepts the podโs DNS lookup, learns the returned IPs dynamically, and updates the podโs eBPF allow map in real time. |
| 7 |
How does a CiliumNetworkPolicy allow frontend to call GET /api/v1/catalog on backend, while blocking DELETE /api/v1/catalog? |
By specifying an L7 HTTP rule (rules: http: [{method: "GET", path: "/api/v1/catalog"}]), which transparently routes matching flows through an embedded node-level Envoy listener. |
| 8 |
What command shows live packets being dropped by network policies across the cluster with the exact drop reason? |
hubble observe --verdict DROPPED -f. |
Lesson 3: Mesh Resilience & Circuit Breaking
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why do naive unlimited retries during a downstream database slowdown trigger a catastrophic Retry Storm? |
If 3 upstream tiers each configure 3 retries, a single failing request multiplies into 3 ร 3 ร 3 = 27ร traffic amplification, DDoSing the recovering backend. |
| 2 |
What two mathematical techniques must always be paired with retries to prevent synchronized retry waves? |
Exponential Backoff (2^n ร base_delay) combined with Random Jitter + a Retry Budget (capping retries at max 10โ20% of total traffic). |
| 3 |
Which HTTP status codes or methods should never be automatically retried without an explicit Idempotency Key? |
Non-idempotent mutations like POST /charge-payment that timed out after already reaching the upstream server. |
| 4 |
What is Circuit Breaking / Outlier Detection in Envoy and Cilium Service Mesh? |
Automatically ejecting a degraded backend pod IP from the load-balancing pool for baseEjectionTime (e.g., 30s) when it returns consecutive 5xx errors or breaches max pending connections. |
| 5 |
What are the 3 states of a Circuit Breaker? |
Closed (normal traffic flows), Open (fast-fails immediately with 503 Overflow without calling backend), and Half-Open (allows a probe request to test recovery). |
| 6 |
Why must upstream microservices always enforce shorter timeouts as requests travel deeper down a call chain (Timeout Budget Propagation)? |
If API Gateway waits 2s, Service A waits 5s, and Service B waits 10s, Service B continues wasting CPU/DB connections for 8 seconds after the user already disconnected! |
| 7 |
What Envoy response flag in access logs proves that a request was fast-failed by a circuit breaker (max_pending_requests overflow)? |
UO (Upstream Overflow). |
| 8 |
What is Mutual TLS (mTLS) in Cilium Service Mesh, and how does Cilium separate authentication from encryption? |
Cilium uses SPIFFE/SPIRE x509 identities to mutually authenticate workload identities in control plane handshakes while encrypting data-plane packets at line rate via kernel WireGuard/IPsec. |
Lesson 4: Cilium ClusterMesh & Gateway API
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why is the new Kubernetes Gateway API (gateway.networking.k8s.io) replacing the legacy Ingress resource? |
Legacy Ingress relied on vendor-specific annotation sprawl and lacked role separation, native traffic weighting, header routing, or gRPC/TCP support. |
| 2 |
Name the 3 role-oriented CRDs of the Kubernetes Gateway API and who owns each. |
GatewayClass (Infrastructure Provider), Gateway (Platform/SRE Team โ listeners & TLS), and HTTPRoute / GRPCRoute (Application Developers โ paths & weights). |
| 3 |
How does HTTPRoute prevent developers in the marketing namespace from hijacking traffic meant for the payments namespace? |
The platform teamโs Gateway controls allowed namespace bindings (allowedRoutes.namespaces), and cross-namespace backend references require an explicit ReferenceGrant in the target namespace. |
| 4 |
What is Cilium ClusterMesh? |
An eBPF multi-cluster networking technology that links multiple Kubernetes clusters across regions/clouds, enabling pod-to-pod routing and cross-cluster Service discovery without ingress gateways. |
| 5 |
What prerequisite must be met by Pod CIDRs across all clusters participating in a Cilium ClusterMesh? |
Each cluster must have a non-overlapping Pod CIDR and a unique cluster.id (1โ255) so eBPF can route directly to remote pod IPs. |
| 6 |
How do you turn a standard Kubernetes Service into a global multi-cluster service across Cilium ClusterMesh? |
Add the annotation service.cilium.io/global: "true". |
| 7 |
By default, does a global ClusterMesh service balance traffic across all regions equally, or can it prefer local pods first? |
Annotating service.cilium.io/affinity: "local" instructs Cilium to route 100% of traffic to healthy pods inside the local cluster, failing over to the remote region cluster only if all local pods die. |
| 8 |
Why must Cilium MTU be reduced to 1420 when running ClusterMesh with WireGuard encryption over cloud VPC networks? |
Standard VPC MTU is 1500 (or 9001 jumbo); WireGuard adds 60โ80 bytes of encapsulation headers, which will drop large TLS handshake packets if inner MTU is not clamped. |
๐ญ Phase 7: Internal Developer Portals
40 Rapid Q&As
Lesson 1: Backstage Software Catalog
| # |
One-Line Question |
One-Line Answer |
| 1 |
What core cognitive problem does an Internal Developer Portal (IDP) like Spotify Backstage solve? |
It eliminates developer cognitive load and tribal knowledge silos by unifying service ownership, APIs, docs, CI/CD, and golden-path self-service into a single portal. |
| 2 |
What YAML file placed at the root of a Git repository registers a microservice into the Backstage Software Catalog? |
catalog-info.yaml. |
| 3 |
Name the 3 Core Entity Kinds and 2 Grouping Kinds in the Backstage System Model. |
Core: Component (service/website), API (OpenAPI/gRPC), Resource (DB/S3). Grouping: System (collection of components/resources) and Domain (business unit). |
| 4 |
How does Backstage keep its PostgreSQL catalog database updated without requiring manual UI registrations? |
Via Entity Providers (GitHub Org Discovery, GitHub Webhook processor, and Kubernetes/AWS Discovery processors) that continuously ingest and stitch entities into a graph. |
| 5 |
What causes an entity in Backstage to show an Orphan Warning? |
The catalog-info.yaml file was deleted or moved in the source Git repository, leaving a stale cached record in Backstageโs database. |
| 6 |
What is the difference between spec.lifecycle: experimental and spec.lifecycle: production in catalog-info.yaml? |
It classifies the operational maturity of the service, driving automated production readiness scorecards and on-call paging rules. |
| 7 |
How do two Backstage entities express a dependency relationship in the catalog graph? |
Using spec.dependsOn: ["resource:default/orders-postgres-db"] or spec.providesApis / spec.consumesApis. |
| 8 |
What causes the Backstage Catalog Processor to crash or reject an API entity during ingestion? |
A malformed syntax error or unescaped $ref circular loop inside the referenced OpenAPI (swagger.yaml) or AsyncAPI specification file. |
Lesson 2: Golden Path Templates
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is a โGolden Pathโ (Paved Road) in Platform Engineering? |
An opinionated, automated self-service workflow that makes the secure, compliant, observable way of building and deploying software the easiest default path for developers. |
| 2 |
What Backstage component executes multi-step infrastructure and code provisioning workflows (kind: Template)? |
The Backstage Scaffolder (@backstage/plugin-scaffolder-backend). |
| 3 |
What are the 3 main sections of a Backstage Template YAML definition? |
spec.parameters (React JSON Schema UI form inputs), spec.steps (sequential actions: fetch, template, publish PR, register), and spec.output (links to created repo/ArgoCD). |
| 4 |
Why should a Backstage Golden Path template create a Git Pull Request containing Crossplane/Terraform manifests instead of calling AWS APIs directly from Node.js? |
Committing declarative manifests to Git preserves GitOps auditability, policy-as-code PR checks, and automatic drift reconciliation. |
| 5 |
What templating engine does Backstage fetch:template use to inject user form parameters into skeleton source files? |
Nunjucks (${{ parameters.service_name }}). |
| 6 |
What happens if Step 3 (publish:github) succeeds in creating a GitHub repo, but Step 4 (catalog:register) fails in a Scaffolder run? |
Without compensating cleanup or idempotency, retrying the template fails with Repository already exists; production custom actions must implement idempotent checks or Saga rollbacks. |
| 7 |
How do you prevent a developer from typing an invalid Kubernetes service name (e.g., uppercase letters or spaces) into a Backstage Scaffolder form? |
Add a regex pattern: '^[a-z0-9-]+$' validation rule inside the spec.parameters JSON Schema property. |
| 8 |
What custom Scaffolder action allows platform teams to trigger an external GitHub Actions workflow or Jenkins job during scaffolding? |
github:actions:dispatch (or custom HTTP webhook actions). |
Lesson 3: TechDocs & Docs-as-Code
| # |
One-Line Question |
One-Line Answer |
| 1 |
Why do traditional enterprise Confluence wikis fail for operational runbooks? |
Documentation decoupled from source code rots immediately because developers rarely update a separate wiki when refactoring code or APIs. |
| 2 |
How does Backstage TechDocs (Docs-as-Code) solve documentation drift? |
Markdown docs (docs/index.md + mkdocs.yml) live inside the exact same Git repository as the microservice code and are reviewed in the same Pull Request. |
| 3 |
What annotation in catalog-info.yaml tells Backstage where to find an entityโs TechDocs source files? |
backstage.io/techdocs-ref: dir:.. |
| 4 |
Why must you never configure techdocs.builder: 'local' in a production Backstage deployment? |
'local' forces the Backstage Node.js backend pod to spawn heavy Python mkdocs subprocesses on the fly when users view pages, causing CPU starvation and OOMKills. |
| 5 |
What is the recommended production architecture for Backstage TechDocs (techdocs.builder: 'external')? |
CI/CD Pre-BuildingโGitHub Actions runs techdocs-cli generate and techdocs-cli publish to push compiled static HTML/CSS to an Amazon S3 / GCS bucket, which Backstage serves instantly. |
| 6 |
What MkDocs extension renders architecture-as-code diagrams (flowchart, sequenceDiagram) natively inside TechDocs pages? |
Mermaid.js (pymdownx.superfences with custom mermaid fence). |
| 7 |
How do you enforce that a developer cannot change an API endpoint without updating the serviceโs TechDocs or Runbook? |
Configure a GitHub Actions PR gate or CODEOWNERS check that flags changes to /api/* or /terraform/* lacking corresponding updates in /docs/*. |
| 8 |
Where should every microserviceโs operational runbook link so on-call SREs can find it at 3:00 AM? |
Directly inside the Prometheus Alert annotations.runbook_url pointing to the serviceโs Backstage TechDocs URL. |
Lesson 4: Backstage RBAC & Scorecards
| # |
One-Line Question |
One-Line Answer |
| 1 |
How does Backstage authenticate users and automatically map them to their engineering teams (kind: Group)? |
Via OIDC / SAML SSO (Okta, Azure Entra ID, Google Workspace) paired with an automated Org Discovery Processor that syncs users and group memberships. |
| 2 |
In the Backstage Permission Framework, what is the difference between a Basic Permission and a Resource Permission? |
A Basic Permission controls global actions (catalog.entity.create), while a Resource Permission evaluates fine-grained conditions against a specific entity (e.g., isEntityOwner). |
| 3 |
How do you restrict a destructive Scaffolder template (like "Decommission Production Database") so only Staff SREs can see or execute it? |
Tag the template with tags: ["restricted-sre"] and apply a Backstage RBAC Conditional Policy denying scaffolder.template.parameter.read and task.create unless the user is in group:default/sre-leads. |
| 4 |
What is a Production Readiness Scorecard in an Internal Developer Portal? |
An automated grading engine (Bronze / Silver / Gold) that continuously audits every microservice against security, reliability, observability, and documentation standards. |
| 5 |
Name 5 automated checks typically evaluated by a Gold-Tier Production Readiness Scorecard. |
(1) Valid PodDisruptionBudget, (2) SLO + Runbook URL defined, (3) Zero CRITICAL Trivy CVEs, (4) Cosign image signature verified, and (5) PagerDuty rotation attached. |
| 6 |
How do you turn passive Backstage Scorecards into active Deployment Gates during major sales events (like IPL or Diwali)? |
Query the Scorecard API from GitHub Actions or ArgoCD PreSync hooks and block production promotion for any service scoring below Silver/Gold. |
| 7 |
How does Backstage prevent a developer in Team A from viewing sensitive runtime secrets or triggering deployments on Team Bโs Kubernetes pods? |
By applying the isEntityOwner RBAC condition on the Kubernetes and ArgoCD plugins, scoping actions strictly to spec.owner == user.claims.groups. |
| 8 |
What audit trail must be enabled on the Backstage backend to satisfy SOC2 and ISO27001 compliance? |
Structured Audit Logging capturing every Scaffolder task execution, RBAC permission decision (ALLOW/DENY), user identity, and timestamp sent to SIEM. |
Lesson 5: Chaos Engineering (Chaos Mesh)
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the core discipline of Chaos Engineering? |
Designing controlled, hypothesis-driven fault injection experiments to uncover systemic weaknesses before they cause unpredicted production outages. |
| 2 |
What must always be defined before injecting any fault in a Chaos Engineering experiment? |
The Steady-State Hypothesis (measurable business/technical SLIs such as "Checkout p99 < 250ms and HTTP 5xx < 0.1%"). |
| 3 |
Name the 4 most common fault CRDs in Chaos Mesh. |
PodChaos (pod-kill/container-kill), NetworkChaos (latency/loss/partition), StressChaos (CPU/memory burn via stress-ng), and IOChaos / HTTPChaos. |
| 4 |
How does the Chaos Mesh chaos-daemon inject a 150ms network delay into a target pod without modifying the podโs container image? |
The privileged chaos-daemon on the host uses nsenter to enter the target podโs network namespace (netns) and configures a Linux kernel Traffic Control (tc) netem qdisc on its eth0 interface. |
| 5 |
What happens if the chaos-daemon pod crashes or is OOMKilled while a NetworkChaos experiment is actively injecting 50% packet loss? |
The Linux kernel tc qdisc netem rule remains orphaned inside the target podโs network namespace (Zombie Chaos Rule), causing permanent packet loss even after the NetworkChaos CRD is deleted! |
| 6 |
How do you manually clear a Zombie NetworkChaos rule from an affected pod without restarting the pod? |
Enter the podโs network namespace from the worker node and delete the root queuing discipline: nsenter -t <pod-pid> -n tc qdisc del dev eth0 root. |
| 7 |
How do you prevent a Chaos Mesh experiment from accidentally targeting kube-system or critical control plane namespaces? |
Configure Chaos Mesh controller flags FILTER_NAMESPACE / annotation enforcement (chaos-mesh.org/inject: "true" required on target namespaces) and block system namespaces via Kyverno. |
| 8 |
How do you automate an immediate Emergency Stop (Abort) of a Chaos Mesh Workflow if real customer error budgets start burning? |
Pair the Chaos Workflow with a Prometheus Alertmanager webhook (or Argo Rollouts Analysis) that automatically deletes the active Chaos CRD as soon as any production SLO alert fires. |
๐ง Phase 8: LLMOps Infrastructure
29 Rapid Q&As
Lesson 1: Vector DBs & AI Gateways
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is RAG (Retrieval-Augmented Generation), and why is it preferred over fine-tuning for dynamic enterprise data? |
RAG retrieves relevant document chunks from a Vector DB at query time and injects them into the LLM prompt context, preventing hallucinations and enforcing real-time document ACLs without expensive weight retraining. |
| 2 |
Why does a Milvus Vector Database QueryNode get OOMKilled when loading 50 million 1536-dimension float32 vectors (50M ร 1536 ร 4B โ 307GB)? |
In-memory HNSW (Hierarchical Navigable Small World) graph indices require 1.5ร to 2ร the raw vector size in RAM to store multi-layer graph adjacency pointers alongside raw vectors. |
| 3 |
How do you reduce Vector Database memory consumption by 75% to 90% when scaling to billions of vectors? |
Use Vector Quantization (SQ8 Scalar Quantization to 8-bit integers or PQ Product Quantization) or DiskANN (NVMe SSD-backed indexing). |
| 4 |
Why should enterprise microservices never call OpenAI, Anthropic, or AWS Bedrock APIs directly from application code? |
Direct calls leak API keys across dozens of repos, lack unified token cost tracking per team, and cannot automatically fail over when OpenAI returns HTTP 429 or 503. |
| 5 |
What are the 4 core functions of an Enterprise AI Gateway (LiteLLM / Envoy AI Gateway)? |
(1) Multi-provider automatic failover (OpenAI โ Azure OpenAI โ Bedrock), (2) Token-based rate limiting (TPM/RPM), (3) Per-tenant FinOps cost chargeback, and (4) Semantic Caching. |
| 6 |
How does Semantic Caching (using Redis Vector Search) differ from traditional exact-match key-value caching? |
Instead of requiring identical prompt strings, it embeds the userโs query into a vector and returns a cached response if Cosine Similarity exceeds a threshold (e.g., > 0.95), saving 30โ50% of LLM spend. |
| 7 |
Why do traditional HTTP load balancers and rate limiters (requests/sec) fail to protect LLM gateways? |
One LLM request with a 100,000-token context window consumes 1,000ร more GPU compute and quota than a 100-token request; LLM gateways must rate-limit by Tokens Per Minute (TPM). |
| 8 |
What causes a LiteLLM Retry Storm during an upstream OpenAI outage, and how do you prevent it? |
Setting high retry counts across multiple fallback regions; fix by setting num_retries: 2, configuring a cooldown_time: 60s circuit breaker on degraded deployments, and enforcing request timeouts. |
Lesson 2: MLflow & Prompt Evaluation
| # |
One-Line Question |
One-Line Answer |
| 1 |
What are the 4 core components of an enterprise MLflow platform? |
MLflow Tracking (experiments/params/metrics), MLflow Model Registry (versioning & aliases like @champion), MLflow Projects, and Artifact Store (S3) + Backend Store (PostgreSQL). |
| 2 |
Why do traditional unit tests (assert output == "expected") fail when testing LLM applications in CI/CD? |
LLMs are probabilistic and non-deterministicโtwo semantically identical correct answers rarely have identical word-for-word string representations. |
| 3 |
What are the 4 core metrics of the RAGAS (Retrieval-Augmented Generation Assessment) evaluation framework? |
Context Precision (signal-to-noise of retrieved chunks), Context Recall (did retrieval find all facts?), Faithfulness (did LLM hallucinate outside context?), and Answer Relevance. |
| 4 |
Which RAGAS metric specifically detects LLM Hallucinations (claims generated by the model that cannot be inferred from the retrieved context)? |
Faithfulness (scored from 0.0 to 1.0; production CI gates typically require Faithfulness >= 0.90). |
| 5 |
Why did an LLM-as-a-Judge CI evaluation pipeline pass a PR at 10:00 AM and fail the exact same code at 10:15 AM? |
The judge LLM was invoked with temperature > 0 or an unpinned floating model name; LLM-as-a-Judge must always set temperature: 0.0, seed: 42, and pin exact model snapshots. |
| 6 |
How do you version prompts in a GitOps workflow instead of hardcoding prompt strings inside Python application code? |
Store prompts as versioned YAML templates in Git (or MLflow Prompt Registry), evaluate them against a Golden Dataset in CI using DeepEval/RAGAS, and promote via @production aliases. |
| 7 |
What is Data Drift / Embedding Drift in a production RAG system? |
When live user queries diverge semantically from the historical document corpus or when changing embedding models (text-embedding-ada-002 โ text-embedding-3-large) invalidates existing vector distances. |
| 8 |
Why canโt you query vectors generated by text-embedding-ada-002 using a query embedded with text-embedding-3-large? |
Different embedding models map semantics into completely incompatible vector spaces; switching embedding models requires re-indexing the entire document corpus into a new collection (Blue/Green Vector Re-indexing). |
Lesson 3: GPU Slicing, vLLM & Guardrails
| # |
One-Line Question |
One-Line Answer |
| 1 |
What is the structural difference between GPU Time-Slicing and NVIDIA MIG (Multi-Instance GPU) on an A100/H100 GPU? |
Time-Slicing shares one GPU via context-switching with zero memory or fault isolation (one OOM crashes all pods); MIG physically partitions the silicon into up to 7 hardware-isolated GPU instances with dedicated VRAM and compute cores. |
| 2 |
How much GPU VRAM is required just to load the model weights of a 70B parameter LLM in FP16 (16-bit = 2 bytes per parameter)? |
โ 140 GB of VRAM (70B ร 2 bytes), plus an additional 20โ40 GB for the KV (Key-Value) Cache and activationsโrequiring at least 2ร 80GB H100 GPUs or AWQ/GPTQ 4-bit quantization. |
| 3 |
What breakthrough memory technology in vLLM eliminates 60โ80% of GPU VRAM waste during concurrent LLM serving? |
PagedAttentionโit splits the attention KV Cache into non-contiguous virtual memory blocks (like OS virtual memory pages), eliminating contiguous memory fragmentation and enabling Continuous Batching. |
| 4 |
What causes a vLLM CUDA Out-Of-Memory (OOM) crash during traffic bursts even though the model weights loaded cleanly at startup? |
Setting --max-model-len too high (e.g., 128k context) or --gpu-memory-utilization to 0.98, leaving zero VRAM headroom for PyTorch activation spikes during large prefill batches. |
| 5 |
How do you shard a 70B model across 4 GPUs on the same physical node in vLLM? |
Set Tensor Parallelism --tensor-parallel-size 4 (TP=4), which splits matrix multiplications across all 4 GPUs simultaneously over high-speed NVLink. |
| 6 |
Why does autoscaling vLLM pods based on Kubernetes CPU or GPU Memory % fail completely? |
vLLM pre-allocates 90% of GPU VRAM at startup (so memory is permanently constant at 90%), and CPU stays low; you must autoscale vLLM with KEDA on vllm:num_requests_waiting (queue depth) and vllm:gpu_cache_usage_perc. |
| 7 |
Why do LLM GPU pods take 10+ minutes to start during scale-out, and how do you cut cold-start time to under 30 seconds? |
Pulling 140GB of Safetensors weights over the internet or slow EBS throttles network I/O; store model weights on Amazon FSx for Lustre or pre-cached NVMe instance stores with --load-format safetensors. |
| 8 |
What runtime security layer sits in front of an LLM to block Prompt Injection (Jailbreaks) and redact PII (Aadhaar, PAN, Credit Cards) before prompts leave the cluster? |
LLM Guardrails (NVIDIA NeMo Guardrails, Llama Guard 3, and Microsoft Presidio PII redaction filters). |
Hands-On Labs: Phase 8 Exercises
| # |
One-Line Question |
One-Line Answer |
| 1 |
What Prometheus exporter deployed by the NVIDIA GPU Operator exposes hardware metrics like SM utilization (DCGM_FI_DEV_DEC_UTIL), VRAM temperature, and XID hardware errors? |
NVIDIA DCGM Exporter (dcgm-exporter). |
| 2 |
What does an NVIDIA XID Error 79 (โGPU has fallen off the busโ) or 48 (โDouble Bit ECC Errorโ) on a worker node indicate? |
A fatal physical hardware/PCIe/VRAM failure on the GPU; an automated Node Problem Detector remediation must cordon, drain, and terminate the unhealthy GPU node. |
| 3 |
What two core latency SLIs define user experience in streaming LLM inference? |
TTFT (Time To First Token) (prefill latency, target < 500ms) and ITL / TPOT (Inter-Token Latency / Time Per Output Token) (decode throughput, target < 30ms/token). |
| 4 |
How do you enable 4-bit AWQ (Activation-aware Weight Quantization) in vLLM to fit a 70B model onto a single 80GB GPU? |
Pass --quantization awq when launching the vLLM server with an AWQ-quantized model checkpoint (~38GB VRAM for weights). |
| 5 |
What Kubernetes scheduling extension ensures an 8-GPU distributed training job schedules all 8 pods together or none at all to prevent resource deadlocks? |
Gang Scheduling via Kueue or Volcano Scheduler. |