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