We use cookies for site analytics. Accept to help us understand how the site is used. See our Privacy Policy for details.
Chart anatomy, the values precedence order that explains every "why did my override not apply", install vs upgrade --install, template vs dry-run vs diff, and rollback.
Helm is the default answer to "how do you package and deploy a Kubernetes application", so it turns up in CKAD-adjacent questions, platform-engineering interviews and any conversation about environment promotion. The idea is small: a chart is a directory of Go-templated Kubernetes manifests plus a values.yaml of defaults, and installing it renders those templates and applies the result as a named release. Everything people find confusing follows from two details - the precedence order in which values get merged, and the fact that Helm 3 stores release state as a Secret in the release namespace with no cluster-side Tiller component (the big change from Helm 2, still a common interview question).
| Command | What it does | Common flags | Example |
|---|---|---|---|
| helm repo add | Register a chart repository. | <name> <url>, --username/--password | helm repo add bitnami https://charts.bitnami.com/bitnami |
| helm repo update | Refresh the local index. If a chart version 'does not exist', run this first. | [repo-name] to limit to one | helm repo update |
| helm search repo / hub | Search your added repos, or Artifact Hub for charts you have not added. | --versions (all versions), --regexp, -l | helm search repo bitnami/postgresql --versions |
| helm show values / chart / readme | Print a chart's default values (the starting point for any override file), metadata, or docs - without installing. | --version | helm show values bitnami/postgresql > values-base.yaml |
| helm pull | Download a chart locally, optionally unpacked. | --untar, --untardir, --version | helm pull bitnami/postgresql --untar --version 15.5.0 |
| Command | What it does | Common flags | Example |
|---|---|---|---|
| helm install | Create a new release. Fails if the release name is taken. | -n <ns> --create-namespace, -f values.yaml, --set key=value, --version, --wait --timeout 5m, --atomic | helm install pg bitnami/postgresql -n data --create-namespace -f values-prod.yaml |
| helm upgrade --install | Idempotent: upgrade if it exists, install if it does not. This is what belongs in CI, not bare install. | --atomic (roll back automatically on failure), --wait, --timeout, --reuse-values, --reset-values, --force | helm upgrade --install api ./charts/api -n prod -f values-prod.yaml --atomic --timeout 5m |
| helm list | Releases in a namespace. | -A (all namespaces), --all (include failed/uninstalled), -o json, --pending | helm list -A |
| helm history | Every revision of a release, with status and the chart version. | -n, --max | helm history api -n prod |
| helm rollback | Return to a previous revision. With no revision number it goes back one. | <release> [revision], --wait, --cleanup-on-fail | helm rollback api 4 -n prod --wait |
| helm uninstall | Remove a release. --keep-history leaves the revision records so a rollback is still possible. | -n, --keep-history, --wait | helm uninstall api -n prod --keep-history |
| helm status | Current state, notes and the deployed manifest of a release. | --show-resources, --revision | helm status api -n prod --show-resources |
Nearly every "my override was ignored" is a misunderstanding of this order. Later entries win.
| Command | What it does | Common flags | Example |
|---|---|---|---|
| helm template | Render locally to stdout with no cluster contact. What you want in CI to diff or lint the output. | -f, --set, --show-only templates/deployment.yaml, --namespace, --api-versions | helm template api ./charts/api -f values-prod.yaml --show-only templates/deployment.yaml |
| helm install --dry-run --debug | Render WITH cluster contact - so .Capabilities and server-side validation are real. Use this when template output looks right but the install still fails. | --dry-run=server for full server-side validation | helm install api ./charts/api --dry-run --debug -n prod |
| helm lint | Static checks on a chart directory. | --strict, -f values-prod.yaml | helm lint ./charts/api --strict -f values-prod.yaml |
| helm get manifest / values / notes | What is actually deployed for a release, the values it was given, or its notes. get values --all shows the fully merged set including defaults. | --revision <n>, -n | helm get values api -n prod --all |
| helm diff upgrade | Plugin (helm plugin install https://github.com/databus23/helm-diff). Shows what an upgrade would change - the closest thing to terraform plan. | -f, --set, --context 3 | helm diff upgrade api ./charts/api -f values-prod.yaml -n prod |
| helm dependency update / build | Fetch subcharts into charts/ from Chart.yaml. build honours Chart.lock; update refreshes it. | --skip-refresh | helm dependency update ./charts/api |
Time and space complexity for the data structures, sorting algorithms, and search routines that show up in coding interviews. Skim the row, remember the row, defend the row in an interview.
The recurring shapes - sliding window, two pointers, fast/slow, BFS/DFS, backtracking, DP, divide & conquer, binary search variants, union-find, topological sort. Each entry: when to reach for it, the template, complexity, and which classic problems use it.
The recurring forks in system design interviews. CAP, PACELC, sync vs async, push vs pull, SQL vs NoSQL, sharding shapes, consistency models, cache strategies, idempotency, and rate limiting. For each, the options and when to choose each.
Filesystem layout, the commands you actually use (find / grep / awk / sed / xargs), processes and signals, networking, permissions, basic shell scripting, and a vi survival kit.
Query clause order, every JOIN type and when to use it, aggregates vs window functions, what indexes actually buy you, transaction isolation levels, and the NULL / WHERE-vs-HAVING / EXISTS-vs-IN gotchas interviewers fish for.
The everyday commands, every undo scenario mapped to its fix, rebase vs merge with a side to pick, interactive rebase, bisect, the reflog safety net, stash, and the flags worth aliasing.
The docker and kubectl commands you reach for daily, Dockerfile best practices, how layer caching actually works, the core k8s objects in one screen, requests vs limits, liveness vs readiness, and a step-by-step CrashLoopBackOff debug flow.
Method semantics and idempotency, the ~15 status codes that matter, resource naming rules, offset vs cursor pagination, versioning and auth tradeoffs, error body conventions, rate-limit headers, and the smells reviewers flag.
The STAR structure with timing, what interviewers actually grade, eight question archetypes and how to frame each, the anti-patterns that sink answers (rambling, "we" instead of "I", no metrics), and a 30-second answer skeleton.
TCP vs UDP, the TLS and TCP handshakes, HTTP versions, status codes, DNS resolution, the OSI and TCP/IP layer models, and the ports you are expected to know in an interview.
Anchors, character classes, quantifiers, groups, alternation, lookarounds, backreferences, and flags - plus practical patterns and the gotchas that trip people up in interviews.
The USE method, a first-five-minutes triage runbook, and the CPU, memory, disk, network, and tracing commands you reach for when a Linux box is misbehaving.
A fast reference for concurrency primitives, synchronization tradeoffs, the memory model, and the classic bugs that show up in systems interviews and real code.
A reference for the theorems, consistency models, replication and partitioning strategies, delivery guarantees, and resilience patterns that come up in system design interviews.
Topics, partitions, and consumer groups, the three delivery semantics and how Kafka actually achieves each, ordering guarantees, rebalancing, retention vs compaction, and a straight Kafka vs SQS vs RabbitMQ vs Kinesis comparison.
Schema, types, and resolvers, the three operation kinds, the N+1 problem and DataLoader, cursor vs offset pagination, error handling that actually works, security (depth limiting, query cost), and an honest answer to 'when does REST beat GraphQL'.
State and why it must be remote and locked, the init/plan/apply lifecycle, modules and variables, count vs for_each, workspaces, import and drift, a command table, and the gotchas (prevent_destroy, secrets in state) that mark real production experience.
How LLMs work in one paragraph, the knobs (context window, temperature, top-p), system vs user prompts, few-shot and chain-of-thought, RAG and embeddings, the fine-tune-vs-prompt decision, tool calling, eval basics, and the interview questions teams actually ask now.
How B-tree indexes actually work, composite index column order, covering indexes, reading EXPLAIN ANALYZE, why the planner ignores your index, join algorithms, N+1, keyset pagination, and the 'why is this query slow' scenarios interviews are built on.
Profiles and credential resolution, the --query vs --filters distinction that trips people up, and the EC2 / S3 / IAM / VPC / Lambda / CloudWatch commands you actually reach for under time pressure.
Login and subscription juggling, the resource-group model everything hangs off, JMESPath --query, and the VM / storage / AKS / Key Vault / App Service commands worth knowing cold.
Configurations and the project/ADC model, gcloud vs gsutil vs bq, and the Compute Engine / GKE / Cloud Run / IAM / BigQuery commands that carry the ACE and Professional exams.
The gh commands that remove the browser round-trip: PR create/review/merge, issues, run watching and log digging on Actions, releases, and gh api for anything without a command.
The same operation in all three CLIs, side by side - compute, storage, networking, IAM, Kubernetes, serverless and logging - plus the service-name mapping and the model differences the equivalences hide.
Reading is the floor. The signal in interviews comes from working problems out loud and defending your tradeoffs. Spin up an AI mock interview or run a coding challenge to put these to work.