Fundamentals & Core Concepts
What is Helm, and what problem does it solve in the Kubernetes ecosystem?
How does Helm simplify application deployment compared to managing raw Kubernetes YAML manifests?
Explain the concept of a Helm chart and its main components.
Why is Helm often described as the package manager for Kubernetes?
What are the key benefits of using Helm for deploying and managing applications on Kubernetes?
How does Helm template YAML files, allowing developers to inject variables and create customizable deployments?
What is the difference between a Helm chart and a Helm release?
What are the three core concepts of Helm (Charts, Releases, Repositories)?
How does Helm compare to using plain kubectl apply with raw YAML?
What is the difference between Helm and Kustomize?
What are the features of Helm charts, including simplified deployments, version control, and configuration management?
How do Helm charts relate to Docker and Kubernetes?
Who created Helm for Kubernetes?
How does Helm interact with other Kubernetes tools such as kubectl?
What are common Helm chart conventions?
How does Helm compare to Terraform for deploying to Kubernetes?
How do Helm and Kustomize handle distribution?
Does Helm maintain state in the cluster?
Which Helm features support microservices?
How do Helm and Kustomize differ in configuration management?
How do Helm and Kustomize handle versioning and release tracking?
How do Helm and Kustomize integrate with native kubectl?
Discuss the tradeoffs between using Helm vs Kustomize for Kubernetes configuration management. When would you choose one over the other, or use them together?
How does Helm compare to a Kubernetes Operator for managing applications?
What are the pain points of deploying Helm via Terraform?
Explain the architecture difference between Helm and Kustomize.
How do Helm and Kustomize integrate with GitOps tools like ArgoCD and Flux?
Discuss the complexity and security implications of Helm compared to Kustomize.
Chart Structure & Authoring
Describe the typical directory structure of a Helm chart and the purpose of its main files (Chart.yaml, values.yaml, templates/, charts/, _helpers.tpl, NOTES.txt).
Explain the helm package command.
What is the purpose of the _helpers.tpl file in a chart?
What is the role of the .helmignore file?
What is the difference between the version and appVersion fields in Chart.yaml?
What does helm create do?
What information does Chart.yaml contain?
What is the purpose of the templates/NOTES.txt file?
How does semantic versioning apply to Helm charts?
Can a Helm chart have multiple deployments?
What is the difference between helm search repo and helm search hub?
What does the helm show command (chart/values/readme/all) let you inspect?
What does the deprecated field in Chart.yaml indicate?
What are the README.md and LICENSE files used for in a Helm chart?
What are some best practices for creating and maintaining Helm charts?
What is the difference between apiVersion v1 and v2 in Chart.yaml?
What are Library Charts, and how do they differ from Application Charts?
What is the crds/ directory used for and how does Helm handle CRDs?
How should you handle chart versioning versus appVersion bumps?
What is a library chart and how does it help share template logic?
Explain the significance of Chart.yaml and its key fields like apiVersion, name, version, and appVersion. What is the difference between version and appVersion?
Values & Configuration
What is values.yaml used for, and how does it enable customization of Helm charts?
What is the difference between using -f/--values files and --set on the command line?
How do you pass custom values when installing a Helm chart?
Explain Helm templates and value files.
Explain the different ways to override values in a Helm chart (-f, --set, --set-string, --set-file) and describe the precedence order when multiple methods are used.
What are global values in Helm, and how are they passed to subcharts?
What is the purpose of values.schema.json in a Helm chart, and when would you use it?
What is the difference between --set, --set-string, --set-file, and --set-json?
What are the limitations of --set compared to using a values file?
How do you manage values across multiple environments (dev, staging, production) using Helm?
How do you validate values in a Helm chart (e.g. values.schema.json, required function)?
Where are Helm values stored?
What is the order of precedence between -f values files and --set flags?
How do you escape nested keys, array indexes, and special characters when using --set?
Templating Engine
How do flow control constructs like if/else, with, and range work in Helm templates?
What information is available under the .Release object?
What is the required function and when would you use it?
How do you write comments in Helm templates?
What do the default and required functions do in Helm templates?
What does the default function do in a template?
What is the difference between indent and nindent?
What does the printf function do and how is it useful in templates?
Explain how Helm uses Go templating to generate Kubernetes manifests.
What are the built-in objects available in Helm templates (e.g. .Release, .Chart, .Values, .Capabilities, .Files, .Template)?
How do you define and use variables in a Helm template?
What are named templates (partials) and how are they used (define, template, include)? Why is include generally preferred over template?
What are pipelines in Helm templates and how does the pipe operator work?
What are the recommended labels and naming conventions defined in _helpers.tpl?
How do you control whitespace in Helm templates, and why is it important?
What is the Sprig library and what kinds of functions does it provide?
What does the .Files object let you do in a chart?
Describe the use of pipelines and Sprig functions within Helm templates, with examples of commonly used functions like default, required, nindent, and toYaml.
How does the with block narrow scope and what pitfalls does it introduce?
How does the range action work and what is the $ root-scope escape used for?
How do the toYaml, nindent, and indent functions help when writing templates?
How do you access the root scope with $ when inside a range or with block?
Why is include preferred over template in Helm charts?
How do toYaml and fromYaml work in Helm templates?
What does the .Template built-in object provide (Name and BasePath)?
How does the ternary function work in Helm templates?
What is the difference between the coalesce and default functions?
What do the b64enc and b64dec functions do and where are they commonly used in charts?
How do you access deeply nested or dynamically-keyed values using the index function?
What does the fail function do and when would you use it to abort template rendering?
When would you use the tpl function in Helm?
What is the .Capabilities object and how would you use it to gate manifests by Kubernetes version?
What does the lookup function do in a Helm template and what are its limitations with helm template or dry-run?
How do you build and manipulate lists and dicts in Helm templates using list, dict, get, and set?
How do the merge and mergeOverwrite functions combine dictionaries in templates?
How can you use a sha256sum checksum annotation to automatically roll pods when a ConfigMap or Secret changes?
Chart Dependencies & Subcharts
What is the purpose of helm dependency update?
How do you manage chart dependencies in Helm, and what is the role of the dependencies block in Chart.yaml?
What are subcharts and how do they promote modularity and reusability?
How do you conditionally enable or disable a subchart using condition and tags?
What is an umbrella or parent chart?
What is the bitnami-common or common chart pattern?
What is the Chart.lock file and what is it for?
How and why would you alias a subchart used more than once?
How do parent charts pass values to subcharts, and what are import-values and alias used for?
What is the difference between helm dependency update and helm dependency build?
What do import-values and exports do between subcharts and parent charts?
How do you handle dependencies between Helm charts from different repositories?
Lifecycle Hooks
How do you define a Helm hook in a chart?
What are Helm hooks, and when would you use them in a chart's lifecycle? Provide examples of common hook types like pre-install and post-upgrade.
How do hooks differ from normal chart resources?
What are Helm hooks and what lifecycle events can they be attached to?
Explain the concept of hook weights and delete policies.
What happens when a Helm hook fails during an install or upgrade?
How do hook weights control ordering?
What are hook delete policies and what options are available?
How do pre-rollback and post-rollback hooks behave during a helm rollback?
Release Management & History
What is the difference between helm install and helm upgrade?
What are revisions in Helm and how is release history tracked?
What are the possible statuses of a Helm release?
What is the purpose of Helm release management, and how do you delete a Helm release and its associated resources safely?
How can you list all installed Helm releases in a cluster, and what information is displayed for each release?
Describe the Helm lifecycle from chart creation to deletion.
What does helm get let you retrieve about a release?
What information does helm status display about a release?
What does the helm history command show and how do you use it?
What is Helm's release rollback feature, when would you use it, and how does Helm manage release state during a rollback?
What is the difference between helm install and helm upgrade --install, and when would you use --install?
What happens when you run helm uninstall, and what is the --keep-history flag used for?
How does the --history-max flag affect release history?
How does Helm track releases and their revisions, and where is release state stored in Kubernetes?
How are release names scoped in Helm 3?
How does Helm handle chart versioning, and what happens when you upgrade a release to a new chart version?
How does a helm rollback affect the revision history of a release?
How is Helm release state encoded when stored in Kubernetes Secrets?
Cli Flags & Commands
What does the --create-namespace flag do?
What are the --dry-run and --debug flags used for in Helm CLI commands?
How can you search for charts in Helm?
What does the --timeout flag control during install and upgrade?
What does the helm env command display?
What is the purpose of helm template and how does it differ from helm install or helm upgrade?
What does the --atomic flag do during an install or upgrade?
What do the --wait and --wait-for-jobs flags do?
What does the --dry-run flag do, and how does --dry-run=server differ?
What are the important flags for helm install/upgrade (e.g. --wait, --atomic, --dry-run, --create-namespace)?
When would you use the --wait or --atomic flags during a Helm deployment?
What does the helm-diff plugin do?
What do the --generate-name and --name-template flags do during install?
What does the --no-hooks flag do and when would you use it?
What does the --skip-crds flag do and how does it relate to Helm's CRD handling?
What does the --force flag do on a helm upgrade and what are its risks?
What does the helm registry login command do and when is it needed?
What is the difference between --reuse-values and --reset-values on upgrade?
In what order does Helm create Kubernetes resources during an install, and how does it order deletions?
How does the readiness semantics of --wait determine whether a release is considered successful?
Repositories & Oci Registries
How do you add and update chart repositories with the Helm CLI?
What is Artifact Hub and how does it relate to the old Helm Hub?
What is a Helm chart repository, and how do you interact with it using commands like helm repo add and helm repo update?
What is a Helm chart repository and what is the role of index.yaml?
How can you set up a Helm chart repository, and what tools or methods can you use for hosting it?
How do helm push and helm pull work with oci:// references?
What is the purpose of the index.yaml file in a Helm chart repository, and how is it generated and updated?
What does the helm-git plugin allow you to do?
How does the Helm plugin system work?
Explain the concept of OCI registries for storing Helm charts. What are the advantages of using OCI registries over traditional HTTP chart repositories?
How does Helm ensure the provenance and integrity of charts (helm package --sign, .prov files)?
Why have OCI registries replaced classic chart repositories for many users?
What is the .prov file and how does helm verify use it?
Helm 2 Vs Helm 3
What does helm version show and why does it matter that Helm 3 is client-only?
What are the main differences between Helm 2 and Helm 3?
What was Tiller in Helm 2 and why was it removed in Helm 3?
How does release-name scoping differ between Helm 2 and Helm 3?
How does the client-only architecture of Helm 3 work?
What security and RBAC problems did Tiller introduce?
Why was Tiller required in Helm 2?
What is the default storage driver for release information in Helm 3, and how did it differ in Helm 2?
How did chart dependencies management change from Helm v2 to Helm v3?
Did Helm 2 automatically create namespaces, and how does Helm 3 handle this?
How did CRD handling change between Helm 2 and Helm 3?
How do you migrate from Helm 2 to Helm 3 and what does the 2to3 plugin do?
Explain the removal of Tiller in Helm 3 and the security implications of this change.
How did Helm 3 improve release management and storage compared to Helm 2?
How did Helm 3 improve chart handling for hooks, dependencies, and CRDs?
Testing Linting & Debugging
Explain the concept of helm lint and its importance in chart development.
How does helm test work and how do you write a test for a chart?
How do you debug a failing Helm chart deployment?
Who validates Helm charts before deployment?
Why do Helm charts fail to deploy in Kubernetes?
What is chart-testing (ct) and how is it used in CI?
Where do you test Helm charts in CI/CD pipelines?
How can you validate rendered charts against Kubernetes schemas using tools like kubeval or kubeconform?
Gitops & Ci Cd
How does Helm fit into a GitOps workflow with Argo CD or Flux?
What is helmfile and when would you use it for declarative multi-release management?
How do you automate Helm with CI/CD?
Where do you define deployment strategies in Helm?
How does a Flux HelmRelease and HelmRepository render a Helm chart?
How do you ensure consistency between development, staging, and production environments in GitOps using Helm?
How would you use Helm to deploy an application across multiple Kubernetes clusters?
Secrets & Security
What is helm-secrets and what problem does it solve?
What do notable plugins like helm-diff and helm-secrets do?
How do you handle secrets and sensitive data in Helm charts securely, and what are the common approaches or tools (helm-secrets plugin, External Secrets Operator, Sealed Secrets)?
What security considerations should you take into account when using Helm to deploy applications, and how can you mitigate potential risks?
What are best practices for handling secrets in Helm and why is baking secrets into values a risk?
How do you handle secrets in a GitOps workflow using Helm?
Release State & Resource Management
Where does Helm 3 store release state by default?
How does the three-way strategic merge patch work during a Helm upgrade?
What storage backends can Helm use for release state?
How does Helm decide whether to adopt or reject pre-existing Kubernetes resources during an install?