The world's most over-engineered way to learn what happens after git push.
Isn't just
a container.
It's 146 MB of decisions — base image, layer order, user, entrypoint — and an interviewer will ask you to defend every one of them.*
84 tools.
One container.
The real logos of the tools you'll be asked about — source control, CI, registries, IaC, Kubernetes, mesh, observability, security, cost.
Five layers.
Zero guesswork.
Order them by how often they change, cache the slow ones, and never run as root. That's the Dockerfile question, answered.
FROM gcr.io/distroless/java21FROM52 MB · cachedCOPY build/libs/deps/ /app/lib/COPY88 MB · cachedCOPY build/libs/checkout.jar /app/COPY6 MBUSER 65532:65532USER0 BENTRYPOINT ["java","-jar","/app/checkout.jar"]ENTRYPOINT0 BEvery push.
Same road.
Checkout, build, test, scan, push, sync. CI proves it works; GitOps makes the cluster match the repo.
From git commit
to the user's screen.
A developer writes the change
- Branch from main: feature/3ds-payments
- Code + unit tests, run locally
- pre-commit hooks: lint, format, secret scan
- Small commits with clear messages
Interviewers ask“Trunk-based development or GitFlow — and why?”
Deploying while
users keep clicking.
Pods, probes
and 2 AM.
Your container is now one pod of many. Know how the control plane schedules it — then prove you can debug it.
$ kubectl get pods -n payments payments-7d9f 0/1 CrashLoopBackOff 6 $ kubectl describe pod payments-7d9f | grep -A2 Last Last State: Terminated · Reason: OOMKilled · Exit 137 $ kubectl set resources deploy/payments --limits=memory=1Gi deployment.apps/payments resource requirements updated
Six files.
One service.
Requests decide where a pod is scheduled; limits decide when it's killed. Probes decide when it gets traffic.
A stable name and virtual IP in front of pods that come and go. Only ready pods become endpoints.
One door for HTTP: host and path routing to Services, TLS certificates from cert-manager.
Configuration outside the image. Changing it does not restart pods — roll the Deployment to pick it up.
base64 is encoding, not encryption. Encrypt etcd at rest, lock down RBAC, or sync from Vault.
Scales replicas between min and max on CPU, memory or custom metrics. Needs requests to be set.
What breaks
at 2 AM.
Traffic triples at 9 AM. The HorizontalPodAutoscaler reads CPU every 15 seconds and adds pods before users notice. Your cluster stays perfectly calm.*
under pressure
Every graph is a question. Memory climbs to the limit — then the kernel answers with an OOM kill.
Declared,
not clicked.
Every node, subnet and role above is a line of Terraform. Plan it, review it in a pull request, apply it — and keep the state somewhere safe.
module "eks" {
source = "terraform-aws-modules/eks/aws"
cluster_version = "1.33"
eks_managed_node_groups = {
default = { min_size = 3, max_size = 9 }
}
}If it isn't measured, it didn't happen.
If it isn't alerted on, it happened at 2 AM.
Golden signals on every service. Burn-rate alerts instead of noise. One trace from the load balancer to the database.
2:13 AM.
Mitigate first. Communicate always. Root-cause later — and write it down without blame.
64 tools.
One stack.
- GitAsked: rebase vs merge, recovering lost commits with reflog
- GitHubAsked: branch protection, CODEOWNERS, required checks
- GitLabAsked: runners, .gitlab-ci.yml stages, environments
- BitbucketAsked: Pipelines, merge checks, Jira links
- JenkinsAsked: declarative pipelines, agents, securing credentials
- GitHub ActionsAsked: OIDC to the cloud instead of long-lived keys, matrices
- CircleCIAsked: orbs, caching, parallel test splitting
- Argo CDAsked: sync waves, drift, app-of-apps
- Flux CDAsked: Kustomizations, image automation, reconciliation
- MavenAsked: lifecycle phases, dependency scopes
- GradleAsked: build cache, configuration vs execution
- BazelAsked: hermetic builds, remote caching
- DockerAsked: layer caching, multi-stage builds, non-root images
- PodmanAsked: rootless containers, pods, no daemon
- HarborAsked: image scanning, replication, signing
- ErAmazon ECRAsked: lifecycle policies, pull-through cache, auth
- JFrog ArtifactoryAsked: virtual repos, promotion between stages
- Sonatype NexusAsked: proxy repos, cleanup policies
- HelmAsked: values precedence, hooks, rollback
- TerraformAsked: state locking, drift, import, modules
- PulumiAsked: stacks, secrets, testing infra code
- XpCrossplaneAsked: compositions, claims, providers
- CfCloudFormationAsked: change sets, drift detection, stack policies
- AnsibleAsked: idempotency, roles, inventory
- ChefAsked: cookbooks, convergence
- PuppetAsked: manifests, catalog compilation
- SaltStackAsked: states, the event bus, reactors
- KubernetesAsked: scheduling, probes, CrashLoopBackOff, RBAC
- NGINXAsked: upstreams, timeouts, 502 vs 504
- HaHAProxyAsked: health checks, balancing algorithms
- TraefikAsked: dynamic config, middlewares, TLS
- IstioAsked: mTLS, VirtualService, sidecar overhead
- LinkerdAsked: golden metrics, retries, mTLS
- ConsulAsked: service catalog, intentions, health checks
- PrometheusAsked: pull model, PromQL rate(), cardinality
- GrafanaAsked: dashboards that answer a question, alerting
- DatadogAsked: APM, monitors, cost of custom metrics
- New RelicAsked: transactions, Apdex, NRQL
- OpenTelemetryAsked: collector, context propagation, sampling
- JaegerAsked: spans, finding the slow hop
- ZkZipkinAsked: trace IDs, B3 headers
- ElasticsearchAsked: shards, mappings, cluster yellow vs red
- LogstashAsked: grok, pipelines, back-pressure
- KibanaAsked: KQL, saved searches, dashboards
- LkGrafana LokiAsked: labels not full-text, LogQL
- PagerDutyAsked: escalation policies, alert fatigue
- OpsgenieAsked: routing rules, schedules
- SqSquadcastAsked: SLO-based alerting, runbooks
- SlSlackAsked: incident channels, bots, comms roles
- JiraAsked: postmortem actions that actually get done
- SnServiceNowAsked: change requests, CAB, CMDB
- RundeckAsked: self-service ops, safe automation
- HashiCorp VaultAsked: dynamic secrets, leases, auth methods
- Aqua SecurityAsked: runtime protection, admission control
- SnykAsked: dependency fixes, PR gating
- TrivyAsked: image CVEs, failing the build on severity
- CkCheckovAsked: policy as code, suppressions
- SonarQubeAsked: quality gates, coverage on new code
- GmGremlinAsked: blast radius, halting an attack
- CmChaos MeshAsked: PodChaos, NetworkChaos, schedules
- LtLitmusChaosAsked: experiments, probes, resilience score
- KcKubecostAsked: cost per namespace, right-sizing
- CtCloudHealthAsked: tagging, showback, reservations
- InfracostAsked: cost diff on every pull request
DevOps
The original. Pipelines, containers, IaC and the cloud — the loop every team runs, explained until it feels obvious.
Start the DevOps track- CI/CD and GitOps
- Docker, registries, Helm
- Terraform across AWS · GCP · Azure
CrackOps-1
Abstract
We present CrackOps-1, an interview simulator for DevOps, SRE and platform engineers. It faithfully reproduces key interviewer behaviours — follow-up questions, “and what if that fails?”, and asking about etcd at the worst possible moment. Evaluated on a single laptop at 2 AM. Limitations include a heavy dependency on coffee and a real Kubernetes cluster.
Acknowledgements
Every on-call engineer who ever wrote a postmortem without blaming anyone.
Peer review
“It asked me about CrashLoopBackOff and then about my feelings. 10/10.”
— anonymous SRE, r/devops