# Table of Contents - [Helm | Γενικές Συμβάσεις ](#helm-) - [Helm | Αλυσίδες Charts ](#helm-charts-) - [Helm | Docs ](#helm-docs-) - [Helm | Docs ](#helm-docs-) - [Helm | Краткое Руководство ](#helm-) - [Helm | Docs ](#helm-docs-) - [Helm | Установка Helm ](#helm-helm-) - [Helm | Использование Helm ](#helm-helm-) - [Helm | Docs ](#helm-docs-) - [Helm | Änderungen seit Helm 2 ](#helm-nderungen-seit-helm-2-) - [Helm | Chart Entwicklung Tipps und Tricks ](#helm-chart-entwicklung-tipps-und-tricks-) - [Helm | Installieren ](#helm-installieren-) - [Helm | Deinstallieren ](#helm-deinstallieren-) - [Helm | Fehlersuche ](#helm-fehlersuche-) - [Helm | Helm Push ](#helm-helm-push-) - [Helm | Helm Registry ](#helm-helm-registry-) - [Helm | Helm Registry Login ](#helm-helm-registry-login-) - [Helm | Helm Registry Logout ](#helm-helm-registry-logout-) - [Helm | Helm Repo ](#helm-helm-repo-) - [Helm | Helm Repo Add ](#helm-helm-repo-add-) - [Helm | Helm Repo Index ](#helm-helm-repo-index-) - [Helm | Helm Repo List ](#helm-helm-repo-list-) - [Helm | Helm Repo Remove ](#helm-helm-repo-remove-) - [Helm | Helm Repo Update ](#helm-helm-repo-update-) - [Helm | Helm Rollback ](#helm-helm-rollback-) - [Helm | Helm Search ](#helm-helm-search-) - [Helm | Helm Search Hub ](#helm-helm-search-hub-) - [Helm | Helm Search Repo ](#helm-helm-search-repo-) - [Helm | Helm Show ](#helm-helm-show-) - [Helm | Helm Show All ](#helm-helm-show-all-) - [Helm | Helm Show Chart ](#helm-helm-show-chart-) - [Helm | Helm Show Crds ](#helm-helm-show-crds-) - [Helm | Helm Show Readme ](#helm-helm-show-readme-) - [Helm | Helm Show Values ](#helm-helm-show-values-) - [Helm | Helm Status ](#helm-helm-status-) - [Helm | Helm Template ](#helm-helm-template-) - [Helm | Helm Test ](#helm-helm-test-) - [Helm | Helm Uninstall ](#helm-helm-uninstall-) - [Helm | Helm Upgrade ](#helm-helm-upgrade-) - [Helm | Helm Verify ](#helm-helm-verify-) - [Helm | Helm Version ](#helm-helm-version-) - [Helm | Docs ](#helm-docs-) - [Helm | Changes Since Helm 2 ](#helm-changes-since-helm-2-) - [Helm | Chart Development Tips and Tricks ](#helm-chart-development-tips-and-tricks-) - [Helm | Charts ](#helm-charts-) - [Helm | Developer Guide ](#helm-developer-guide-) - [Helm | General Conventions ](#helm-general-conventions-) - [Helm | Docs ](#helm-docs-) - [Helm | Introduction ](#helm-introduction-) - [Helm | Quickstart Guide ](#helm-quickstart-guide-) - [Helm | Chart Hooks ](#helm-chart-hooks-) - [Helm | Getting Started ](#helm-getting-started-) - [Helm | Examples ](#helm-examples-) - [Helm | Docs ](#helm-docs-) - [Helm | Installing Helm ](#helm-installing-helm-) - [Helm | Installing ](#helm-installing-) - [Helm | Release Checklist ](#helm-release-checklist-) - [Helm | Syncing Your Chart Repository ](#helm-syncing-your-chart-repository-) - [Helm | Values ](#helm-values-) - [Helm | Built-in Objects ](#helm-built-in-objects-) - [Helm | Chart Releaser Action to Automate GitHub Page Charts ](#helm-chart-releaser-action-to-automate-github-page-charts-) - [Helm | Chart Tests ](#helm-chart-tests-) - [Helm | Related Projects and Documentation ](#helm-related-projects-and-documentation-) - [Helm | Templates ](#helm-templates-) - [Helm | Docs ](#helm-docs-) - [Helm | Uninstalling ](#helm-uninstalling-) - [Helm | Using Helm ](#helm-using-helm-) - [Helm | Cheat Sheet ](#helm-cheat-sheet-) - [Helm | Docs ](#helm-docs-) - [Helm | Dependencies ](#helm-dependencies-) - [Helm | Library Charts ](#helm-library-charts-) - [Helm | The History of the Project ](#helm-the-history-of-the-project-) - [Helm | Troubleshooting ](#helm-troubleshooting-) - [Helm | Values Files ](#helm-values-files-) - [Helm | Docs ](#helm-docs-) - [Helm | Helm Provenance and Integrity ](#helm-helm-provenance-and-integrity-) - [Helm | Template Functions and Pipelines ](#helm-template-functions-and-pipelines-) - [Helm | Pods and PodTemplates ](#helm-pods-and-podtemplates-) - [Helm | Labels and Annotations ](#helm-labels-and-annotations-) - [Helm | The Chart Repository Guide ](#helm-the-chart-repository-guide-) - [Helm | Docs ](#helm-docs-) - [Helm | Docs ](#helm-docs-) - [Helm | Localizing Helm Documentation ](#helm-localizing-helm-documentation-) - [Helm | Template Function List ](#helm-template-function-list-) - [Helm | Custom Resource Definitions ](#helm-custom-resource-definitions-) - [Helm | Flow Control ](#helm-flow-control-) - [Helm | Use OCI-based registries ](#helm-use-oci-based-registries-) - [Helm | Role-Based Access Control ](#helm-role-based-access-control-) - [Helm | Creating a NOTES.txt File ](#helm-creating-a-notes-txt-file-) - [Helm | Variables ](#helm-variables-) - [Helm | Named Templates ](#helm-named-templates-) - [Helm | Kubernetes Distribution Guide ](#helm-kubernetes-distribution-guide-) - [Helm | The .helmignore file ](#helm-the-helmignore-file-) - [Helm | Accessing Files Inside Templates ](#helm-accessing-files-inside-templates-) - [Helm | Subcharts and Global Values ](#helm-subcharts-and-global-values-) - [Helm | Helm Architecture ](#helm-helm-architecture-) - [Helm | Docs ](#helm-docs-) - [Helm | Docs ](#helm-docs-) - [Helm | Debugging Templates ](#helm-debugging-templates-) - [Helm | Advanced Helm Techniques ](#helm-advanced-helm-techniques-) - [Helm | Migrating Helm v2 to v3 ](#helm-migrating-helm-v2-to-v3-) - [Helm | Next Steps ](#helm-next-steps-) - [Helm | Role-based Access Control ](#helm-role-based-access-control-) - [Helm | ](#helm-) - [Helm | ](#helm-) - [Helm | Appendix: YAML Techniques ](#helm-appendix-yaml-techniques-) - [Helm | Docs ](#helm-docs-) - [Helm | ](#helm-) - [Helm | The Helm Plugins Guide ](#helm-the-helm-plugins-guide-) - [Helm | Appendix: Go Data Types and Templates ](#helm-appendix-go-data-types-and-templates-) - [Helm | Deprecated Kubernetes APIs ](#helm-deprecated-kubernetes-apis-) - [Helm | Helm Completion Powershell ](#helm-helm-completion-powershell-) - [Helm | Helm Dependency Build ](#helm-helm-dependency-build-) - [Helm | Helm Completion ](#helm-helm-completion-) - [Helm | Helm Completion Bash ](#helm-helm-completion-bash-) - [Helm | Helm Get Metadata ](#helm-helm-get-metadata-) - [Helm | Helm ](#helm-helm-) - [Helm | Helm Dependency ](#helm-helm-dependency-) - [Helm | Helm Get ](#helm-helm-get-) - [Helm | Helm Get Hooks ](#helm-helm-get-hooks-) - [Helm | Helm Get Manifest ](#helm-helm-get-manifest-) - [Helm | Helm Create ](#helm-helm-create-) - [Helm | Helm Dependency Update ](#helm-helm-dependency-update-) - [Helm | Helm Env ](#helm-helm-env-) - [Helm | Helm Push ](#helm-helm-push-) - [Helm | Helm Get Notes ](#helm-helm-get-notes-) - [Helm | Helm Lint ](#helm-helm-lint-) - [Helm | Helm List ](#helm-helm-list-) - [Helm | Helm Dependency List ](#helm-helm-dependency-list-) - [Helm | Helm Completion Fish ](#helm-helm-completion-fish-) - [Helm | Helm Get Values ](#helm-helm-get-values-) - [Helm | Helm Package ](#helm-helm-package-) - [Helm | Helm Plugin Install ](#helm-helm-plugin-install-) - [Helm | Helm Get All ](#helm-helm-get-all-) - [Helm | Helm Registry ](#helm-helm-registry-) - [Helm | Helm Completion Zsh ](#helm-helm-completion-zsh-) - [Helm | Helm History ](#helm-helm-history-) - [Helm | Helm Plugin List ](#helm-helm-plugin-list-) - [Helm | Helm Repo ](#helm-helm-repo-) - [Helm | Helm Registry Login ](#helm-helm-registry-login-) - [Helm | Helm Repo List ](#helm-helm-repo-list-) - [Helm | Helm Plugin Uninstall ](#helm-helm-plugin-uninstall-) - [Helm | Helm Plugin ](#helm-helm-plugin-) - [Helm | Helm Repo Remove ](#helm-helm-repo-remove-) - [Helm | Helm Registry Logout ](#helm-helm-registry-logout-) - [Helm | Helm Plugin Update ](#helm-helm-plugin-update-) - [Helm | Helm Pull ](#helm-helm-pull-) - [Helm | Helm Version Support Policy ](#helm-helm-version-support-policy-) - [Helm | Helm Rollback ](#helm-helm-rollback-) - [Helm | Helm Repo Index ](#helm-helm-repo-index-) - [Helm | Helm Repo Add ](#helm-helm-repo-add-) - [Helm | Permissions management for SQL storage backend ](#helm-permissions-management-for-sql-storage-backend-) - [Helm | Helm Install ](#helm-helm-install-) - [Helm | Helm Repo Update ](#helm-helm-repo-update-) - [Helm | Helm Search Repo ](#helm-helm-search-repo-) - [Helm | Helm Search Hub ](#helm-helm-search-hub-) - [Helm | Helm Show Values ](#helm-helm-show-values-) - [Helm | Helm Show Crds ](#helm-helm-show-crds-) - [Helm | Helm Show Chart ](#helm-helm-show-chart-) - [Helm | Helm Search ](#helm-helm-search-) - [Helm | Helm Show ](#helm-helm-show-) - [Helm | Helm Show All ](#helm-helm-show-all-) - [Helm | Helm Verify ](#helm-helm-verify-) - [Helm | Helm Uninstall ](#helm-helm-uninstall-) - [Helm | Helm Status ](#helm-helm-status-) - [Helm | Helm Template ](#helm-helm-template-) - [Helm | Docs ](#helm-docs-) - [Helm | Helm Upgrade ](#helm-helm-upgrade-) - [Helm | Helm Show Readme ](#helm-helm-show-readme-) - [Helm | Release schedule policy ](#helm-release-schedule-policy-) - [Helm | Helm Test ](#helm-helm-test-) - [Helm | Helm Version ](#helm-helm-version-) --- # Helm | Γενικές Συμβάσεις Γενικές Συμβάσεις ================= Αυτό το μέρος του Οδηγού Βέλτιστων Πρακτικών εξηγεί τις γενικές συμβάσεις. Ονόματα των Charts ------------------ Τα ονόματα των Charts πρέπει να είναι γραμμένα με μικρά λατινικά γράμματα και αριθμούς. Οι λέξεις _μπορούν_ να διαχωρίζονται με παύλες (-): Παραδείγματα: drupal nginx-lego aws-cluster-autoscaler Ούτε κεφαλαία γράμματα ούτε κάτω παύλες μπορούν να χρησιμοποιούνται στα ονόματα των charts. Οι τελείες δεν θα έπρεπε να χρησιμοποιούνται στα ονόματα των charts. Αριθμοί Εκδόσεων ---------------- Όπου είναι δυνατό, το Helm χρησιμοποιεί το [SemVer 2](https://semver.org/) για να αναπαραστήσει ττους αριθμούς των εκδόσεων ( versions ). (Σημειώστε ότι τα tags ενός Docker image δεν ακολουθούν απαραίτητα το SemVer, και ως εκ τούτου θεωρούνται μια ατυχής εξαίρεση στον κανόνα.) Όταν οι εκδόσεις τύπου SemVer αποθηκεύονται στα labels του Kubernetes, εμείς ως σύμβαση αλλάζουμε τον χαρακτήρα `+` με τον χαρακτήρα `_` , μιας και τα labels δεν επιτρέπουν το σήμα `+` ως τιμή. Μορφοποίηση του YAML -------------------- Τα αρχεία YAML δεν θα έπρεπε να στοιχίζονται χρησιμοποιώντας _δύο κενά_ (και ποτέ tabs). Χρήση των λέξεων Helm και Chart ------------------------------- Υπάρχουν μερικές συμβάσεις για την χρήση των λέξεων _Helm_ και _helm_. * Το _Helm_ αναφέρεται σε ολόκληρο το εγχείρημα * Το `helm` αναφέρεται στην εντολή την οποία εκτελεί ένας χρήστης * Ο όρος `chart` δεν χρειάζεται να γραφτεί με κεφαλαίο, αφού δεν αποτελεί κανονικό όνομα * Παρ' ολ' αυτά, το `Chart.yaml` χρειάζεται να γραφτεί με κεφαλαίο γιατί τα ονόματα αρχείων κάνουν διάκριση κεφαλαίων και μικρών ( case sensitive ). Όταν δεν είστε σίγουροι/ες, χρησιμοποιήστε το _Helm_ (με κεφαλαίο 'H'). [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Είμαστε ένα graduated project του Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Αλυσίδες Charts Αλυσίδες Charts =============== Αυτός ο τομέας του οδηγού καλύπτει τις βέλτιστες πρακτικές για τις `αλυσίδες charts` οι οποίες δηλώνονται στο `Chart.yaml`. Εκδόσεις -------- Όπου είναι δυνατό, χρησιμοποιήστε ένα φάσμα εκδόσεων (versions) αντί να καρφώνετε σε κάποια συγκεκριμένη έκδοση. Το συνιστώμενο default είναι να χρησιμοποιείτε μια έκδοση η οποία να κάνει το ταίριασμα στο επίπεδο του patch: version: ~1.2.3 Αυτό θα ταιριάξει με την έκδοση `1.2.3` και όλα τα patches αυτού του release. Με άλλα λόγια, το `~1.2.3` είναι εφάμιλο με την έκφραση `>= 1.2.3, < 1.3.0` Για την πλήρη σύνταξη του πως γίνεται το ταίριασμα των εκδόσεων, παρακαλούμε δείτε το [semver documentation](https://github.com/Masterminds/semver#checking-version-constraints) . ### URLs των Repositories Όπου είναι δυνατό, χρησιμοποιήστε `https://` για τα URLs ενός repository, και ακολούθως `http://` URLs. Αν το repository έχει προστεθεί στο αρχείο index για repository ( κατάλογος για repositories ) , το όνομα του repository μπορεί να χρησιμοποιηθεί ως alias του URL. Χρησιμοποιήστε το `alias:` ή `@` ακολουθούμενο από το όνομα του repository. Τα file URLs (`file://...`) θεωρούνται ως "ειδική περίπτωση" για charts τα οποία συντάσσονται από το pipeline ενός φιξαρισμένου deployment. Τα Charts τα οποία χρησιμοποιούν `file://` δεν επιτρέπονται στο επίσημο Helm repository. Συνθήκες και Tags ----------------- Οι συνθήκες ή τα tags θα έπρεπε να προστίθενται σε εξαρτώμενα οι οποίες είναι _προαιρετικές_. Η προτιμώμενη μορφή μίας συνθήκης (condition) είναι η ακόλουθη: condition: somechart.enabled Όπου το `somechart` είναι το όνομα του chart της αλυσίδας. Όταν πολλαπλά υποcharts (αλυσίδες - dependencies) παρέχουν ένα προαιρετικό ή ανταλλάξιμο feature μαζί, αυτά τα charts θα έπρεπε να περιέχουν τα ίδια tags. Για παράδειγμα , αν κα το `nginx` και το `memcached` παρέχουν και τα δύο βελτιστοποιήσεις για την απόδοση για το κύριο app του chart, και είναι απαραίτητο και τα δύο να είναι παρόντα όταν αυτό το feature είναι ενεργοποιημένο, τότε θα πρέπει να έχουν και τα δύο έναν τομέα με tags κάπως έτσι: tags: - webaccelerator Αυτό επιτρέπει στον χρήστη να ανοίγει και να κλείνει αυτό το feature με ένα tag. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Είμαστε ένα graduated project του Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Ο Οδηγός Βέλτιστων Πρακτικών για τα Charts ========================================== Αυτός ο οδηγός καλύπτει αυτά που η Ομάδα του Helm θεωρεί ως βέλτιστες πρακτικές για την δημιουργία charts. Επικεντρώνεται στο πως θα έπρεπε να δομούνται τα charts. Κυρίως επικεντρωνόμαστε στις βέλτιστες πρακτικές για τα charts τα οποία θα μπορούσαν να γίνουν deploy από ευρύτερο κοινό. Ξέρουμε ότι πολλά charts προορίζονται μόνο για εσωτερική χρήση, και οι συγγραφείς τέτοιων charts ότι τα εσωτερικά συμφέροντα παρακάμπτουν τις προτάσεις μας εδώ. ### Quicklinks [#### Γενικές Συμβάσεις\ \ Γενικές Συμβάσεις για τα charts.](https://helm.sh/gr/docs/chart_best_practices/conventions/) [#### Αλυσίδες Charts\ \ Καλύπτει τις βέλτιστες πρακτικές για τις αλυσίδες chart εντός ενός Chart.](https://helm.sh/gr/docs/chart_best_practices/dependencies/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Είμαστε ένα graduated project του Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Καλωσήρθες ========== Καλωσήρθες στην τεκμηρίωση του [Helm](https://helm.sh/) . Το Helm είναι ο package manager του Kubernetes, και μπορείς να διαβάσεις τις λεπτομερείς πληροφορίες για το πλαίσιο στο [CNCF Helm Project Journey report](https://www.cncf.io/cncf-helm-project-journey/) . Πως οργανώνεται η τεκμηρίωση ============================ Το Helm έχει πολύ καλή τεκμηρίωση. Μια γενική ματιά στο πως είναι οργανωμένη θα σε βοηθήσει να ξέρεις που να ψάξεις για συγκεκριμένα πράγματα: * Τα Tutorials σε παίρνουν από το χέρι και σε καθοδηγούν σε μια σειρά από βήματα ώστε να δημιουργήσεις το πρώτο σου Helm chart. Ξεκίνα από εδώ αν είσαι νέος/νέα στο Helm. * Οι Θεματικοί Οδηγοί συζητούν για θέματα κλειδιά και έννοιες σε ένα αρκετά γενικό επίπεδο και παρέχουν χρήσιμες πληροφορίες για το πλαίσιο και επεξηγήσεις. * Οι Οδηγοί της Κοινότητας συζητούν για θέματα που έχουν κέντρο την κοινότητα του Helm. Ξεκίνα από εδώ αν θες να μάθεις περισσότερα για την διαδικασία ανάπτυξης του ίδιου του Helm και πως μπορείς να συνεισφέρεις. * Οι Οδηγοί How-to είναι συνταγές. Σε καθοδηγούν μέσα από τα βήματα που απαιτούνται ώστε να διευθετήσεις προβλήματα κλειδιά και περιπτώσεις χρήσης. Είναι πιο προχωρημένοι από τα tutorials και έχουν ως προϋπόθεση βασικές γνώσεις για το Helm. ### Quicklinks [#### Quickstart Guide\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/docs/intro/quickstart) [#### Chart Guide\ \ Practical steps for building Helm charts—how to structure, sign, and sync your charts.](https://helm.sh/docs/topics/charts) [#### Video: Intro to Helm\ \ Watch Matt Farina and Josh Dolitsky present an introduction to Helm at KubeCon 2019.](https://www.youtube.com/watch?v=Zzwq9FmZdsU) [#### Migrating from v2 to v3\ \ Read our blog post on how to migrate from Helm v2 to Helm v3.](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) [#### Helm Security Audit\ \ Helm has been audited and deemed as recommended for public deployment during a third-party security audit funded by the CNCF.](https://helm.sh/blog/2019-11-04-helm-security-audit-results/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Είμαστε ένα graduated project του Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Краткое Руководство Краткое Руководство =================== Это руководство описывает, как вы можете быстро начать использовать Helm. Необходимые компоненты ---------------------- Для успешного и надежного использования Helm необходимо 1. Kubernetes кластер 2. Принятие решения о том, какие конфигурации безопасности должны применяться к вашей установке, если таковые имеются. 3. Установка и настройка Helm ### Установите Kubernetes или получите доступ к кластеру * У вас должен быть установлен Kubernetes. Для последней версии Helm мы рекомендуем последнюю стабильную версию Kubernetes, которая в большинстве случаев является второй последней минорной версией. * Вы также должны иметь локально настроенную копию `kubectl`. Смотрите [Политику поддержки версий Helm](https://helm.sh/docs/topics/version_skew/) для того, что бы понимать максимальную версию поддержки между Helm и Kubernetes. Установка Helm -------------- Загрузите binary релиз клиента Helm. Вы можете использовать такие инструменты, как `homebrew`, или посмотрите на [официальную страницу релизов](https://github.com/helm/helm/releases) . Для получения более подробной информации или других вариантов смотрите [руководство по установке](https://helm.sh/ru/docs/intro/install/) . Инициализация Helm Chart Repository ----------------------------------- Как только у вас будет готов Helm, вы можете добавить chart репозиторий. Смотрите [Artifact Hub](https://artifacthub.io/packages/search?kind=0) для проверки доступности Helm chart репозиториев. $ helm repo add stable https://charts.helm.sh/stable После установки, вы сможете посмотреть charts, которые вы можете установить: $ helm search repo stable NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.2 2.1.1 DEPRECATED Scales worker nodes within agent pools stable/aerospike 0.2.8 v4.5.0.5 A Helm chart for Aerospike in Kubernetes stable/airflow 4.1.0 1.10.4 Airflow is a platform to programmatically autho... stable/ambassador 4.1.0 0.81.0 A Helm chart for Datawire Ambassador # ... and many more Пример Установки Chart ---------------------- Чтобы установить chart, вы необходимо использовать команду `helm install`. У Helm есть несколько способов найти и установить chart, но самый простой – это использовать один из официальных `stable` chart-ов. $ helm repo update # Убедитесь, что мы получили последний список chart-ов $ helm install stable/mysql --generate-name Released smiling-penguin В приведенном выше примере был выпущен `stable/mysql` chart, а имя нашего нового релиза: `smiling-penguin`. Вы получите простое представление о возможностях этого MySQL chart-а, запустив `helm show chart stable/mysql`. Или вы можете запустить `helm show all stable/mysql` чтобы получить всю информацию о chart-е. Всякий раз, когда вы устанавливаете chart, создается новая версия. Таким образом, один chart можно установить несколько раз в один и тот же кластер. И каждый из них может управляться и обновляться независимо. `helm install` очень мощная команда со многими возможностями. Узнать больше можно в [Руководстве по эксплуатации Helm](https://helm.sh/ru/docs/intro/using_helm/) Подробнее О Релизах ------------------- Всегда с легкостью можно увидеть, что было выпущено с помощью Helm: $ helm ls NAME VERSION UPDATED                   STATUS   CHART smiling-penguin 1 Wed Sep 28 12:59:46 2016 DEPLOYED mysql-0.1.0 Функция `helm list` покажет вам список всех развернутых релизов. Удаление Релиза --------------- Чтобы деинсталлировать релиз, используйте команду `helm uninstall`: $ helm uninstall smiling-penguin Removed smiling-penguin В данном случае, это удалит `smiling-penguin` из Kubernetes, а так же удалит все ресурсы, связанные с этим релизом и саму историю релизов. If the flag `--keep-history` is provided, release history will be kept. You will be able to request information about that release: Если использовать флаг `--keep-history`, то история релизов будет сохранена. В этом случае, у Вас остается возможность запросить информацию о удаленном ранее релизе. $ helm status smiling-penguin Status: UNINSTALLED ... Так как Helm отслеживает ваши релизы даже после того, как вы их деинсталлировали, вы можете проверить историю кластера и даже восстановить релиз используя `helm rollback`. Чтение Текста Справки --------------------- Чтобы узнать больше о доступных Helm командах, используйте `helm help` или введите команду за которой следует флаг `-h`: $ helm get -h [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Мы являемся выпускным проектом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Введение в Helm =============== Вы новичок в Helm? Это самое подходящее место для начала! ### Quicklinks [#### Краткое Руководство\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/ru/docs/intro/quickstart/) [#### Установка Helm\ \ Узнайте, как установить и начать работать с Helm.](https://helm.sh/ru/docs/intro/install/) [#### Использование Helm\ \ Объясняет основы работы с Helm.](https://helm.sh/ru/docs/intro/using_helm/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Мы являемся выпускным проектом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Установка Helm Установка Helm ============== В этом руководстве рассказывается, как установить Helm CLI. Helm может быть установлен как из исходного кода, так и из собранных binary релизов. Из Проекта Helm --------------- Проект Helm предоставляет два способа получения и установки Helm. Это официальные методы получения релизов Helm. В дополнение к этому сообщество Helm предоставляет методы установки Helm через различные менеджеры пакетов. Установка с помощью этих методов может быть найдена ниже официальных методов. ### Из Binary Релизов Каждый [релиз](https://github.com/helm/helm/releases) Helm предоставляет различные binary сборки под разные операционные системы (OSes). Эти binary версии могут быть загружены и установлены вручную. 1. Скачайте нужную вам [версию](https://github.com/helm/helm/releases) 2. Распакуйте её (`tar -zxvf helm-v3.0.0-linux-amd64.tar.gz`) 3. Найдите `helm` binary файл в директории из распаковки, и переместите в нужное место (`mv linux-amd64/helm /usr/local/bin/helm`) Сразу после этого можно запустить Helm справку [добавить stable репозиторий](https://helm.sh/docs/intro/quickstart/#initialize-a-helm-chart-repository) : `helm help`. **Примечание:** Автоматические тесты Helm выполняются для Linux AMD64 только во время сборки и выпуска GitHub Actions. Тестирование других OSes является обязанностью сообщества, использующего Helm на их OS. ### Из Скрипта У Helm теперь есть скрипт установки, которая будет автоматически загружать последнюю версию Helm и [устанавливать его локально](https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3) . Вы можете получить этот сценарий, а затем выполнить его локально. Он хорошо документирован, так что вы можете прочитать его и понять, что он делает, прежде чем запускать. $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 $ chmod 700 get_helm.sh $ ./get_helm.sh Yes, you can `curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash` if you want to live on the edge. Через Менеджеров Пакетов ------------------------ Сообщество Helm предоставляет возможность установки Helm через менеджеры пакетов операционной системы. Они не поддерживаются проектом Helm и не считаются проверенными. ### Используя Homebrew (macOS) Члены сообщества Helm внесли свой вклад в создание formula Helm для Homebrew. Эта formula, почти всегда, актуальна. brew install helm (**Примечание:**: Существует также formula для emacs-helm, являющаяся другим проектом.) ### Используя Chocolatey (Windows) Члены сообщества Helm внесли свой вклад в [Helm пакет](https://chocolatey.org/packages/kubernetes-helm) собранный под [Chocolatey](https://chocolatey.org/) . Данная сборка почти всегда актуальна choco install kubernetes-helm ### Используя Winget (Windows) Члены сообщества Helm внесли свой вклад в [Helm пакет](https://github.com/microsoft/winget-pkgs/tree/master/manifests/h/Helm/Helm) собранный под [Winget](https://learn.microsoft.com/en-us/windows/package-manager/) . Данная сборка почти всегда актуальна winget install Helm.Helm ### Используя Apt (Debian/Ubuntu) Члены сообщества Helm внесли свой вклад в [Helm package](https://helm.baltorepo.com/stable/debian/) для Apt. Данная сборка почти всегда актуальна curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm ### Используя Snap [Snapcrafters](https://github.com/snapcrafters) сообщество поддерживает Snap-версию [Helm пакета](https://snapcraft.io/helm) : sudo snap install helm --classic ### Используя pkg (FreeBSD) Члены сообщества FreeBSD внесли свой вклад в создание [Helm пакета](https://www.freshports.org/sysutils/helm) под [FreeBSD Ports Collection](https://man.freebsd.org/ports) . Данная сборка почти всегда актуальна pkg install helm ### Тестовые Сборки В дополнение к релизам вы можете скачать или установить тестовые сборки ### Используя Canary Сборки Сборки Canary – это версии программного обеспечения Helm, построенные из последней основной ветви. Они не являются официальными релизами и могут быть нестабильными. Тем не менее, они предлагают возможность протестировать передовые функции. Canary Helm binaries сборки хранятся в [get.helm.sh](https://get.helm.sh/) . Вот несколько ссылок на общие сборки: * [Linux AMD64](https://get.helm.sh/helm-canary-linux-amd64.tar.gz) * [macOS AMD64](https://get.helm.sh/helm-canary-darwin-amd64.tar.gz) * [Experimental Windows AMD64](https://get.helm.sh/helm-canary-windows-amd64.zip) ### Из Исходного Кода (Linux, macOS) Создание Helm из исходного кода-это немного больше работы, но это лучший способ пойти, если вы хотите протестировать последнюю версию (pre-release) Helm. У вас должна быть рабочая среда Go. $ git clone https://github.com/helm/helm.git $ cd helm $ make При необходимости скрипт извлекает зависимости, кэширует их и проверяет конфигурацию. Затем он скомпилирует `helm` и поместит его в `bin/helm`. Заключение ---------- В большинстве случаев установка так же проста, как получение предварительно построенного binary файла `helm`. В этом документе описаны дополнительные случаи для тех, кто хочет делать с Helm более сложные вещи. После успешной установки клиента Helm вы можете перейти к использованию Helm для управления chart-ми и [добавить stable репозиторий](https://helm.sh/docs/intro/quickstart/#initialize-a-helm-chart-repository) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Мы являемся выпускным проектом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Использование Helm Использование Helm ================== В этом руководстве объясняются основы использования Helm для управления пакетами на вашем кластере Kubernetes. Руководство предполагает, что вы уже [установили](https://helm.sh/ru/docs/intro/install/) Helm CLI. Если вы просто заинтересованы в нескольких командах, то можете начать с [Краткого Руководства](https://helm.sh/ru/docs/intro/quickstart/) . В этой главе описаны особенности команд Helm. Three Big Concepts ------------------ _Chart_ – это пакет Helm. Он содержит описания ресурсов, необходимые для запуска приложения, инструмента или службы внутри кластера Kubernetes. _Репозиторий_ это место, где можно собирать charts-ы и делиться ими. Очень похоже на Perl's [CPAN archive](https://www.cpan.org/) или [Fedora Package Database](https://src.fedoraproject.org/) , но для пакетов Kubernetes. _Релиз_ это пример charts-а, работающего в кластере Kubernetes. Один chart часто может быть установлен много раз в одном и том же кластере. Каждый раз, когда он устанавливается, создается новый _release_. Рассмотрим график MySQL. У каждого из них будет свой _release_, который, в свою очередь, будет иметь своё имя _release name_. Зная эти понятия, объяснить работу Helm можно так: Helm устанавливает _charts_ в Kubernetes, создавая новый _release_ для каждой установки. А для поиска новых графиков можно воспользоваться поиском Helm chart _repositories_. 'helm search': Поиск Charts --------------------------- Helm поставляется с мощной поисковой командой. Он может быть использован для поиска двух различных типов источников: * `helm search hub` ищет в [the Artifact Hub](https://artifacthub.io/) , который агрегирует списки из различных хранилищ * `helm search repo` поиск в репозиториях, которые вы добавили в свой локальный каталог helm client (используя `helm repo add`). Этот поиск выполняется по локальным данным, не используя подключение к публичной сети. Вы можете найти общедоступные chart-ы, запустив `helm search hub`: $ helm search hub wordpress URL CHART VERSION APP VERSION DESCRIPTION https://hub.helm.sh/charts/bitnami/wordpress 7.6.7 5.2.4 Web publishing platform for building blogs and ... https://hub.helm.sh/charts/presslabs/wordpress-... v0.6.3 v0.6.3 Presslabs WordPress Operator Helm Chart https://hub.helm.sh/charts/presslabs/wordpress-... v0.7.1 v0.7.1 A Helm chart for deploying a WordPress site on ... Выше приведен поиск всех chart-ов `wordpress` на Artifact Hub. Поиск показывает все доступные chart-ы с определенным именем `helm search hub`. Используя `helm search repo`, вы можете найти названия chart-ов в уже добавленных вами репозиториях: $ helm repo add brigade https://brigadecore.github.io/charts "brigade" has been added to your repositories $ helm search repo brigade NAME CHART VERSION APP VERSION DESCRIPTION brigade/brigade 1.3.2 v1.2.1 Brigade provides event-driven scripting of Kube... brigade/brigade-github-app 0.4.1 v0.2.1 The Brigade GitHub App, an advanced gateway for... brigade/brigade-github-oauth 0.2.0 v0.20.0 The legacy OAuth GitHub Gateway for Brigade brigade/brigade-k8s-gateway 0.1.0 A Helm chart for Kubernetes brigade/brigade-project 1.0.0 v1.0.0 Create a Brigade project brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes Helm search использует приближённый поиск подстроки (fuzzy string matching), поэтому вы можете вводить части слов или фраз: $ helm search repo kash NAME CHART VERSION APP VERSION DESCRIPTION brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes Поиск – это хороший способ найти доступные пакеты. Как только вы нашли пакет, который хотите установить, вы можете использовать `helm install` для его установки. 'helm install': Установка пакета -------------------------------- Чтобы установить новый пакет, используйте команду `helm install`. В самом простом случае она ожидает два аргумента: имя выпуска `_release_name_`, и имя chart-а, который Вы хотите установить. $ helm install happy-panda bitnami/wordpress NAME: happy-panda LAST DEPLOYED: Tue Jan 26 10:27:17 2021 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ** Please be patient while the chart is being deployed ** Your WordPress site can be accessed through the following DNS name from within your cluster: happy-panda-wordpress.default.svc.cluster.local (port 80) To access your WordPress site from outside the cluster follow the steps below: 1. Get the WordPress URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress' export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}") echo "WordPress URL: http://$SERVICE_IP/" echo "WordPress Admin URL: http://$SERVICE_IP/admin" 2. Open a browser and access WordPress using the obtained URL. 3. Login with the following credentials below to see your blog: echo Username: user echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) После установки `wordpress` chart-а обратите внимание, что при установке создается новый объект _release_. Текущей релиз называется `happy-panda`. (Если вы хотите чтобы Helm сгенерировал имя за вас, оставьте название релиза и используйте `--generate-name`.) Во время установки `helm` клиент напечатает полезную информацию о том, какие ресурсы были созданы, каково состояние релиза, а также есть ли дополнительные шаги настройки, которые вы можете воспроизвести. Helm не ждет, пока все ресурсы будут запущены, прежде чем он завершит свою работу. Для многих chart-ов требуются образ Docker-а размером более 600M, и их установка в Kubernetes кластер может занять много времени. Чтобы отслеживать состояние релиза или перечитывать информацию о конфигурации, вы можете использовать `helm status`: $ helm status happy-panda NAME: happy-panda LAST DEPLOYED: Tue Jan 26 10:27:17 2021 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ** Please be patient while the chart is being deployed ** Your WordPress site can be accessed through the following DNS name from within your cluster: happy-panda-wordpress.default.svc.cluster.local (port 80) To access your WordPress site from outside the cluster follow the steps below: 1. Get the WordPress URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress' export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}") echo "WordPress URL: http://$SERVICE_IP/" echo "WordPress Admin URL: http://$SERVICE_IP/admin" 2. Open a browser and access WordPress using the obtained URL. 3. Login with the following credentials below to see your blog: echo Username: user echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) Выше показано текущее состояние вашего релиза. ### Настройка Chart-а Перед установкой Изначально Helm использует параметры конфигурации по умолчанию. Но вы всегда можете настроить chart используя свою конфигурацию Чтобы увидеть, какие параметры есть в chart-е, используйте `helm show values`: $ helm show values bitnami/wordpress ## Global Docker image parameters ## Please, note that this will override the image parameters, including dependencies, configured to use the global value ## Current available global Docker image parameters: imageRegistry and imagePullSecrets ## # global: # imageRegistry: myRegistryName # imagePullSecrets: # - myRegistryKeySecretName # storageClass: myStorageClass ## Bitnami WordPress image version ## ref: https://hub.docker.com/r/bitnami/wordpress/tags/ ## image: registry: docker.io repository: bitnami/wordpress tag: 5.6.0-debian-10-r35 [..] Затем вы можете переопределить любой из этих параметров в файле формата YAML, а затем передать этот файл во время установки. $ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml $ helm install -f values.yaml bitnami/wordpress --generate-name Команды выше создадут пользователя для MariaDB с именем `user0` и предоставят этому пользователю доступ к созданной базе данных `user0db`, но использует остальные значения chart-а по умолчанию. Существует два способа передачи конфигурационных данных во время установки: * `--values` (или `-f`): Укажите YAML файл с конфигурацией. Это можно сделать несколько раз, и самый правый файл будет иметь приоритет * `--set`: переопределения в командной строке. Если используются оба параметра, то значения `--set` объединяются в `--values` с более высоким приоритетом. Переопределения, указанные с помощью `--set`, сохраняются в ConfigMap. Значения, которые были `--set`, можно просмотреть для данного выпуска с помощью `helm get values `. Значения `--set`, можно очистить, выполнив `helm upgrade` с `--reset-values`. #### Формат и Ограничения `--set` Параметр `--set` принимает ноль или более пар имя/значение. В самом простом случае он используется следующим образом: `--set name=value`. Пример в YAML формате: name: value Несколько значений разделяются символами`,`. `--set a=b,c=d` в YAML формате выглядит так: a: b c: d Поддерживаются более сложные выражения. Например, `--set outer.inner=value` outer: inner: value Списки могут быть предоставлены путем включения значений в `{` и `}`. Например, `--set name={a, b, c}`: name: - a - b - c Начиная с Helm 2.5.0, доступ к элементам списка возможен с помощью синтаксиса индекса массива. Например, `--set servers[0].port=80`: servers: - port: 80 Можно задать несколько значений. Строка `--set servers[0].port=80,servers[0].host=example` становится: servers: - port: 80 host: example Иногда вам нужно использовать специальные символы в `--set`. Вы можете использовать обратную косую черту для экранирования символов; `--set name=value1\,value2`: name: "value1,value2" Точно так же вы можете экранировать точки, что может пригодиться, когда chart-ы используют функцию `toYaml` для анализа аннотаций, меток и селекторов узлов. Пример синтаксиса `--set nodeSelector."kubernetes\.io/role"=master`: nodeSelector: kubernetes.io/role: master Глубоко вложенные структуры данных может быть трудно выразить используя `--set`. Разработчикам чартов рекомендуется учитывать использование `--set` при разработке формата файла `values.yaml` (читать подробнее про [Values Files](https://helm.sh/docs/chart_template_guide/values_files/) ). ### Дополнительные Методы Установки `helm install` может установить один из нескольких источников: * Репозиторий chart-ов (как мы видели выше) * Локальное хранилище chart-ов (`helm install foo foo-0.1.1.tgz`) * Распакованная директория с chart-ами (`helm install foo path/to/foo`) * Полный URL до chart-а (`helm install foo https://example.com/charts/foo-1.2.3.tgz`) 'helm upgrade' и 'helm rollback': Обновление Релиза и Восстановление После Сбоя ------------------------------------------------------------------------------- Когда выпускается новая версия chart-а или когда вы хотите изменить конфигурацию своего релиза, вы можете использовать команду `helm upgrade`. Обновление использует существующий релиз и обновляет его в соответствии с предоставленной вами информацией. Из-за того, что chart-ы Kubernetes могут быть большими и сложными, Helm пытается выполнить наименее инвазивное обновление. Он будет обновлять только то, что изменилось с момента последнего релиза. $ helm upgrade -f panda.yaml happy-panda bitnami/wordpress В приведенном выше случае релиз `happy-panda` обновляется с тем же chart, но с новым файлом YAML: mariadb.auth.username: user1 Вы можете использовать `helm get values`, чтобы увидеть, заработала ли новая версия. $ helm get values happy-panda mariadb: auth: username: user1 Команда `helm get` - это полезный инструмент для просмотра релизов в кластере. И как мы видим выше, она показывает, что наши новые значения из `panda.yaml` были развернуты в кластере. Теперь, если что-то идёт не так, как планировалось во время релиза, легко откатиться к предыдущему релизу, используя `helm rollback [RELEASE] [REVISION]`. $ helm rollback happy-panda 1 Пример выше возвращает happy-panda к самой первой версии релиза. Версия релиза - это инкрементная версия. Каждый раз, когда происходит установка, обновление или откат, номер версии увеличивается на 1. Первый номер редакции всегда равен 1. Мы можем использовать `helm history [RELEASE]`, чтобы увидеть номера версий для определенного релиза. Полезные Опции для Установки/Обновлении/Отката ---------------------------------------------- Существует несколько других полезных параметров, которые вы можете указать для настройки поведения Helm во время установки/обновления/отката. Обратите внимание, что это не полный список флагов cli. Чтобы увидеть описание всех флагов, просто запустите `helm --help`. * `--timeout`: [Go duration](https://golang.org/pkg/time/#ParseDuration) время ожидания выполнения Kubernetes команд. Стандартное время `5m0s`. * `--wait`: Ждёт, пока все Pods не будут в состоянии готовности, Deployments должны иметь минимум (`Desired` минус `maxUnavailable`) Pods в состоянии готовности и Services должны иметь IP адрес (и Ingress если есть `LoadBalancer`) перед пометкой успешного релиза. Он будет ждать до значения `--timeout`. Если тайм - аут достигнут, то релиз будет помечен как `FAILED`. Заметка: в сценариях где в Deployment значения `replicas` равно 1 и `maxUnavailable` не равно 0 как часть стратегии rolling update, `--wait` вернёт значение ready, поскольку будет удовлетворено условие минимального количества Pod в состоянии ready. * `--no-hooks`: Это пропускает запуск hooks для команды * `--recreate-pods` (доступно только для `upgrade` и `rollback`): Этот флаг приведёт к пересозданию всех pods (за исключением pods принадлежащих deployments). (УСТАРЕЛО в Helm 3) 'helm uninstall': Удаление Релиза --------------------------------- Когда потребуется удалить релиз из кластера, используйте команду `helm uninstall`: $ helm uninstall happy-panda Это приведет к удалению релиза из кластера. Вы можете просмотреть все ваши текущие развернутые релизы с помощью команды `helm list` : $ helm list NAME VERSION UPDATED STATUS CHART inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 Из примера выше видно, что релиз `happy-panda` был удален. В предыдущих версиях Helm, когда релиз удалялся, запись о его удалении оставалась. В Helm 3, удаление также удаляет запись об удалении релиза. Если вы хотите сохранить запись об удалении выпуска, используйте `helm uninstall --keep-history`. Использование `helm list --uninstalled` покажет только те выпуски, которые были удалены с флагом `--keep-history`. Флаг `helm list --all` покажет вам все релизы, сохраненные Helm, включая записи для неудачных или удаленных элементов (если был указан параметр `--keep-history` ): $ helm list --all NAME VERSION UPDATED STATUS CHART happy-panda 2 Wed Sep 28 12:47:54 2016 UNINSTALLED wordpress-10.4.5.6.0 inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 kindred-angelf 2 Tue Sep 27 16:16:10 2016 UNINSTALLED alpine-0.1.0 Обратите внимание, что поскольку релизы теперь удаляются по умолчанию, откат удаленного ресурса больше невозможен. 'helm repo': Работа с Репозиториями ----------------------------------- Helm 3 больше не поставляется со стандартным хранилищем chart-ов. Группа команд `helm repo` предоставляет возможности добавления, перечисления и удаления репозиториев. Узнать о настроенных репозиториях можно с помощью `helm repo list`: $ helm repo list NAME URL stable https://charts.helm.sh/stable mumoshu https://mumoshu.github.io/charts Новые репозитории могут быть добавлены с помощью `helm repo add`: $ helm repo add dev https://example.com/dev-charts Поскольку репозитории chart-ов часто меняются, в любой момент вы можете убедиться, что ваш клиент Helm обновлен, запустив `helm repo update`. Репозитории могут быть удалены с помощью `helm repo remove`. Создание Собственных Chart-ов ----------------------------- [Руководство по разработке Chart-ов](https://helm.sh/docs/topics/charts/) объясняет, как создавать свои собственные chart-ы. Но вы можете быстро начать работу с помощью команды `helm create`: $ helm create deis-workflow Creating deis-workflow Теперь у вас есть chart в `./deis-workflow`. Вы можете редактировать его и создавать свои собственные шаблоны. У Helm есть линтер для проверки корректности chart-а, воспользоваться им можно с помощью `helm lint`. Когда придет время упаковать chart в пакет для распространения вам поможет команда `helm package` $ helm package deis-workflow deis-workflow-0.1.0.tgz Теперь вы можете с легкостью поставить этот chart в ваш Helm с помощью `helm install` $ helm install deis-workflow ./deis-workflow-0.1.0.tgz ... Упакованные chart-ы могут быть загружены в репозиторий chart-ов. Смотрите документацию по [Helm chart репозитории](https://helm.sh/docs/topics/charts/) для того, чтобы узнать новые детали. Заключение ---------- В этой главе рассмотрены основные схемы использования клиента `helm`, включая поиск, установку, обновление и удаление. Он также охватывает полезные служебные команды, такие как `helm status`, `helm get`, и `helm repo`. Для получения дополнительной информации об этих командах обратитесь к встроенной справке Helm: `helm help`. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Мы являемся выпускным проектом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Добро пожаловать ================ Добро пожаловать в документацию по [Helm](https://helm.sh/) . Helm – это менеджер пакетов Kubernetes. Подробную справочную информацию можно прочитать в отчете [CNCF Helm Project Journey report](https://www.cncf.io/cncf-helm-project-journey/) . Как организована документация ============================= У Helm много документации. Обзор поможет узнать, где искать необходимую информацию * [Обучающие материалы](https://helm.sh/docs/intro) проведут вас за руку через ряд шагов, которые помогут создать первый Helm chart Начните с этого, если вы новичок в Helm. * [Тематические руководства](https://helm.sh/docs/topics) обсуждают ключевые темы и концепции на достаточно высоком уровне, предоставляют полезную справочную информацию и разъяснения. * [Путеводители сообщества](https://helm.sh/docs/community) обсуждают темы, сосредоточенные вокруг Helm сообщества. Начните отсюда, если вы хотите узнать больше о процессе разработки самого Helm и о том, как вы можете внести свой вклад. * [Инструкции по применению](https://helm.sh/docs/howto) это готовые советы по использованию. Они проведут вас через шаги, связанные с решением ключевых проблем и вариантов их разрешения. Инструкции по применению более продвинуты, чем [обучающие материалы](https://helm.sh/docs/intro) , и предлагают некоторые расширенные знания о том, как работает Helm. * * * ### Quicklinks [#### Quickstart Guide\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/docs/intro/quickstart) [#### Chart Guide\ \ Practical steps for building Helm charts—how to structure, sign, and sync your charts.](https://helm.sh/docs/topics/charts) [#### Video: Intro to Helm\ \ Watch Matt Farina and Josh Dolitsky present an introduction to Helm at KubeCon 2019.](https://www.youtube.com/watch?v=Zzwq9FmZdsU) [#### Migrating from v2 to v3\ \ Read our blog post on how to migrate from Helm v2 to Helm v3.](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) [#### Helm Security Audit\ \ Helm has been audited and deemed as recommended for public deployment during a third-party security audit funded by the CNCF.](https://helm.sh/blog/2019-11-04-helm-security-audit-results/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Мы являемся выпускным проектом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Änderungen seit Helm 2 Änderungen seit Helm 2 ====================== Änderungen seit Helm 2 ---------------------- Hier ist eine Liste an grundlegenden Änderungen in Helm 3. ### Löschung von Tiller Während des Helm 2 Entwicklungszyklus haben wir Tiller vorgestellt. Tiller spielte eine wichtige Rolle für Teams in einem geteilten Cluster - es war für mehrere unterschiedliche Operatoren möglich, mit demselben Set an Versionen zu interagieren. Mit rollenbasierter Zugriffskontrolle (RBAC), standardmässig aktiviert in Kubernetes 1.6, sperrte Tiller immer mehr in Produktionsumgebungen aus, da die Verwaltung schwieriger wurde. Durch die riesigen Änderungen der Sicherheitsregeln, war es unser Fokus, eine permissive Standardkonfiguration zu liefern. Das erlaubte es Neulingen in Helm und Kubernetes, schnell zu starten, ohne sich allzuviuel über Sicherheitskontrollen den Kopf zu zerbrechen. Unglücklicherweise konnte diese permissive Konfiguration ein breites Spektrum an Berechtigungen öffnen, ohne dass der Nutzer dies erwartete. DevOps und SREs hatten zusätzliche Betriebsschritte zu lernen, um Tiller in einer multi-mandant Cluster zu betreiben. Nachdem wir von Gemeinschaftsmitgliedern gehört haben, wie sie Helm benutzen, fanden wir, dass Tillers Versionsverwaltung nicht zum Clusterbetrieb oder als zentraler Platz für Helm Versionsinformationen passte. Stattdessen können wir einfach die Informationen von der Kubernetes-API abrufen, die Charts auf lokaler Seite rendern und einen Eintrag der Installation in Kubernetes speichern. Tillers primäre Ziel konnte ohne Tiller erreicht werden, so war es eine der ersten Entscheidungen, die für Helm 3 getroffen wurden, Tiller komplett zu entfernen. Ohne Tiller hat sich das Sicherheitsmodell von Helm radikal vereinfacht. Helm 3 unterstützt jetzt moderne Funktionen von Kubernetes zu Sicherheits, Identität und Authorisierung. Helms Zugriffsrechte werden durch Evaluierung der [kubeconfig Datei](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) getroffen. Cluster Administratoren können Zugriffsrechte granular restriktieren. Versionen werden weiter im Cluster gespeichert und die restliche Funktionalität von Helm bleibt erhalten. ### Verbesserte Aktualisierungsstrategie: 3-Wege Vereinigung Helm 2 hat eine 2-Wege Vereinigungsstrategie beutzt. Während der Aktualisierung verglich es die letzten Chart Manifeste gegen das vorgeschlagene Chart Manifest (welches zur Aktualisierung vorgeschlagen wurde). Es verglich die Unterschiede zwischen den zwei Charts, um herauszufinden, welche Änderunen notwendig sind und welche Resourcen im Kubernetescluster übertragen werden müssen. Wenn Änderungen ausserhalb von Helm gemacht wurden (etwa mit `kubectl edit`), waren diese Änderungen verloren. Das resultierte in Resourcen, die nicht zurückgerollt werden konnten: weil Helm nur die letzte installierte Version kannte und wenn es keine Änderungen im Chart Status gegeben hat, blieb der Livestatus unverändert. In Helm 3 benutzen wir jetzt eine 3-Wege Vereinigungsstrategie. Helm beachtet das alte Manifest, den Livestatus und das neue Manifest, um einen Patch zu generieren. #### Beispiele Lassen Sie uns durch ein paar übliche Beispiele gehen, um die Auswirkungen zu sehen. ##### Zurückrollen wo sich der Livestatus geändert hat Ihr Team hat gerade mit Helm ihre Applikation in die Produktion auf Kubernetes gebracht. Das Chart beinhaltet ein Deployment Objekt, in dem die Nummer der Replicas auf drei gesetzt ist: $ helm install myapp ./myapp Ein neuer Entwickler tritt dem Team bei. An seinem ersten Arbeitstag tritt beim Betrachten des Produktions-Clusters ein fürchterlicher Kaffee-auf-Tastatur-Unfall ein und das Deployment wird von drei Replicas auf 0 skaliert. $ kubectl scale --replicas=0 deployment/myapp Ein anderer Entwickler Ihres Teams stellt fest, dass die Produktionsseite aus ist und entscheidet ein Zurückrollen der Version zum vorherigen Status: $ helm rollback myapp Was passiert? In Helm 2 würde ein Patch generiert, der das alte gegen das neue Manifest vergleicht. Weil es ein Zurückrollen ist, ist es dasselbe Manifest. Helm würde feststellen, dass es nichts zu ändern gibt, weil es keinen Unterschied zwischen dem alten und den neuen Manifest gibt. Der Replica Zähler würde weiter auf 0 stehenbleiben. Panik bricht aus. In Helm 3 würde ein Patch generiert, der das alte Manifest, den Livestatus und das neue Manifest vergleicht. Helm stellt fest, dass der alte Status drei, der Livestatus 0 und das neue Manifest den Wunsch der Änderung zurück zu drei hegt, sodass der Patch eine Änderung des Status zu drei generiert. ##### Aktualisierungen wo sich der Livestatus geändert hat Viele Dienstenetze und andere kontroll-basierte Applikationen injizieren Daten in Kubernetes Objekte. Das kann sowas sein wie ein Sidecar, Label oder andere Informationen. Vorher haben Sie ein Manifest von einem Chart so gerendert: containers: - name: server image: nginx:2.0.0 Und der Livestatus wurde von einer anderen Applikation geändert zu: containers: - name: server image: nginx:2.0.0 - name: my-injected-sidecar image: my-cool-mesh:1.0.0 Jetzt möchten Sie den `nginx` Image Tag aktualisieren zu `2.1.0`. Um das zu erreichen, akualisieren Sie das Chart mit diesem Manifest: containers: - name: server image: nginx:2.1.0 Was passiert? In Helm 2 generiert Helm einen Patch für das `containers` Objekt zwischen dem alten und dem neuen Manifest. Der Cluster Livestatus wird bei der Patchgenerierung nicht beachtet. Der Cluster Livestatus wird in folgender Weise geändert: containers: - name: server image: nginx:2.1.0 Der Sidcar Pod ist vom Livestatus gelöscht. Mehr Panik bricht aus. In Helm 3 generiert Helm einen Patch des `containers` Objekts zwischen dem alten Manifest, dem Livestatus und dem neuen Manifest. Es bemerkt, dass das neue Manifest den Image Tag zu `2.1.0` ändern möchte, aber der Livestatus einen Sidecar Container beinhaltet. Der Cluster Livestatus wird in folgender Weise geändert: containers: - name: server image: nginx:2.1.0 - name: my-injected-sidecar image: my-cool-mesh:1.0.0 ### Versionsnamen sind jetzt im Umfang des Namespace geändert Nach der Löschung von Tiller müssen die Informationen über die Versionen irgendwohin. In Helm 2 wurde das im selben Namespace wie Tiller gespeichert. In der Praxis bedeutete das, dass ein Name von einer Version verwendet wurde, keine andere Version konnte denselben Namen benutzen, auch wenn es in unterschiedlichen Namespace installiert war. In Helm 3 werden die Informationen über eine Version im selben Namespace gespeichert, in dem die Version selber installiert ist. Das bedeutet, dass Benutzer jetzt `helm install wordpress stable/wordpress` in zwei Namespaces benutzen könnnen und jedes wird bei `helm list` im Kontext des zugehörigen Namespace angezeigt (z.B `helm list --namespace foo`). Mit der grösseren Ausrichtung auf nativen Cluster Namespaces, listet das Kommando `helm list` nicht länger alle Versionen standardmässig auf. Stattdessen listet es nur die Versionen im derzeitigen Kubernetes Kontext auf (z.B. den Namespace wenn Sie `kubectl config view --minify` eingeben). Das bedeutet also, dass Sie die Option `--all-namespaces` zu `helm list` eingeben müssen, wie bei Helm 2. ### Secrets als der Standardspeichertreiber In Helm 3 werden jetzt Secrets als der [Standardspeichertreiber](https://helm.sh/docs/topics/advanced/#storage-backends) benutzt. Helm 2 benutzte ConfigMaps als Standard, um Versionsinformationen zu speichern. In Helm 2.7.0 wurde ein neues Speicher-Backend implementiert, was jetzt in Helm 3 der Standard ist. Die Änderung zu Secrets in Helm 3 als Standard erlaubt einen Schutz der Charts in derselben Weise wie die Version der Secret Verschlüsselung in Kubernetes. [Verschlüsseung von Secrets mit Rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) wurde Standard als Alpha-Funktion in Kubernetes 1.7 und wurde stabil in Kubernetes 1.13. Dies erlaubt Benutzer Versions Metadaten zu verschlüsseln und es ist ein guter Startpunkt, um später sowas wie Vault zu benutzen. ### Go Import Pfadänderungen In Helm 3 schaltete Helm den Go Importpfad von `k8s.io/helm` zu `helm.sh/helm/v3`. Wenn Sie 3 Go client Bibliotheken verwenden, stellen Sie die Änderung des Importpfads sicher. ### Capabilities Die Verfügbarkeit des eingebauten `.Capabilities` Objekts wurde im Stadium des Renderns vereinfacht. [Eingebaute Objekte](https://helm.sh/docs/chart_template_guide/builtin_objects/) ### Validierung der Chart Values mit JSONSchema Ein JSON Schema kann jetzt den Chart Values auferlegt werden. Das stellt sicher, dass die Werte, die der Nutzer eingegeben hat, dem Schemalayout des Charts entsprechen, bessere Fehlermeldungen werden zur Verfügung gestellt, wenn falsche Werte für das Chart eingegeben wurden. Eine Validierung erfolgt bei folgenden Kommandos: * `helm install` * `helm upgrade` * `helm template` * `helm lint` Sehen Sie die Dokumentation zu [Schema Dateien](https://helm.sh/docs/topics/charts#schema-files) für mehr Informationen. ### Konsolidierung von `requirements.yaml` in `Chart.yaml` Das Chart Abhängigkeitssystem schwenkte von requirements.yaml und requirements.lock zu Chart.yaml und Chart.lock. Wir empfehlen, dass neue Charts für Helm 3 dem neuen Format folgen. Trotzdem versteht Helm 3 weiterhin die Chart APO Version 1 (`v1`) und wird vorhandene `requirements.yaml` Dateien laden. In Helm 2 sah eine `requirements.yaml` so aus: dependencies: - name: mariadb version: 5.x.x repository: https://charts.helm.sh/stable condition: mariadb.enabled tags: - database In Helm 3 sehen die Abhängigkeiten genauso aus, stehen aber in `Chart.yaml`: dependencies: - name: mariadb version: 5.x.x repository: https://charts.helm.sh/stable condition: mariadb.enabled tags: - database Charts werden weiterhin in das `charts/` Verzeichnis heruntergeladen, Subcharts geliefert nach `charts/` werden ohne Anpassungen weiter funktionieren. ### Name (oder --generate-name) ist jetzt zur Installation erforderlich Wenn in Helm 2 kein Name angeben wurde, wurde einer autogeneriert. In der Produktion war das eher störend als hilfreich. In Helm 3 gibt es eine Fehlermeldung, wenn bei `helm install` kein Name angegeben wird. Wer weiter einen autogenerierten Namen verwenden will, kann die Option `--generate-name` für sich benutzen. ### Charts in OCI Registries hochladen Dies ist eine experimentelle Funktion in Helm 3. Um sie zu benutzen, setzen Sie die Umgebungsvariable `HELM_EXPERIMENTAL_OCI=1`. Auf einem hohen Level, ein Chart Repository ist ein Ort, an dem Charts gespeichert und geteilt werden können. Ein Helm Programm packt und schickt Helm Charts zu einem Chart Repository. Einfach ausgedrückt ist das ein simpler HTTP Server, der eine index.yaml Datei hat und einige gepackte Charts. Während es für die meisten einfachen Speicheranforderungen nur Vorteile bringt, gibt es aber auch ein paar Nachteile: * Chart Repositories fällt es sehr schwer, die Sicherheitsanforderungen an eine Produktionsumgebung zu erfüllen. Es ist sehr wichtig, eine Authentifizierung und Authorisierung für die Standard API zu haben. * Helm Chart Herkunftswerkzeuge zum Signieren und Verifizieren der Integrität sind optional für den Veröffentlichungsprozess. * In einer Mehrbenutzerumgebung kann dasselbe Chart von unterschiedlichen Nutzern hochgeladen werden, kostet doppelten Speicher für denselben Inhalt, aber das ist nicht Teil der Spezifikation. * Die Benutzung einer einzigen Indexdatei zum Suchen, Metadataeninformationen und Herunterladen der Charts hat es kompliziert gemacht oder ist in einer sicheren Mehrbenutzerumgebung unmöglich. Das Docker Distribution Projekt (auch bekannt als Docker Registry v2) ist der Erfolgsfaktor des Docker Registry Projekts. Viele Cloud Lieferanten bieten ein Produkt des Distribution Projekts an und da dies so viele sind, hat das Distribution Projekt in vielen Jahren Vorteile bezüglich Hardening, empfohlene Vorgehensweisen und Kampftests. Bitte schauen Sie nach `helm help chart` und `helm help registry` für mehr wie ein Chart zu packen und in eine Docker Registry zu laden ist. Für mehr Informationen schauen Sie [diese Seite](https://helm.sh/docs/topics/registries/) . ### Löschen von `helm serve` `helm serve` startete eine lokales Chart Repository auf Ihrem Computer für Entwicklerzwecke. Nun, es wurde nicht viel angenommen und hatte zahlreiche Probleme mit seinem Design. Am Ende entschieden wir uns es zu löschen und als Plugin auszulagern. Für ähnliche Erfahrungen zu `helm serve` schauen Sie in die lokale Dateisystemoption im [ChartMuseum](https://chartmuseum.com/docs/#using-with-local-filesystem-storage) und das [servecm plugin](https://github.com/jdolitsky/helm-servecm) . ### Unterstützung für Chart Bibliotheken Helm 3 unterstützt eine Klasse von Charts genannt "Chart Bibliotheken". Das ist ein Chart, was von anderen Charts geteilt wird, aber keine eigenen Versionsartefakte erstellt. Eine Chart Bibliothek Vorlage kann nur `define` Elemente deklarieren. Global nicht-`define` definierter Inhalt wird ignoriert. Das erlaubt Nutzern, Code oder Codeschnippsel quer zwischen vielen Charts wiederzuverwenden und doppelten Code zu vermeiden ( [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) ). Chart Bibliotheken sind in der Abhängigkeitsdirektive in der Chart.yaml deklariert und werden installiert und verwaltet wie andere Charts. dependencies: - name: mylib version: 1.x.x repository: quay.io Wir sind sehr stolz darauf, um Anwendungsfälle für diese Funktion von Chartentwicklern und auch beste Beispiele der Nutzung zu sehen. ### Chart.yaml apiVersion erhöht Mit der Vorstellung der Chartbibliotheken, der Konsilidierung der requirements.yaml in Chart.yaml würden Programme in Helm 2 Format nicht mehr funktionieren. So erhöhten wir die apiVersion in Chart.yaml von `v1` zu `v2`. `helm create` erstellt Charts jetzt in diesem neuen Format, so wurde die Standard apiVersion ebenfalls erhöht. Programme möchten beide Versionen unterstützen und sollten das Feld `apiVersion` in Chart.yaml untersuchen, um zu verstehen, wie sie das Paketformat parsen sollen. ### XDG Basis Verzeichnissupport [Die Spezifikation zu XDG Basis Verzeichnissupport](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) ist ein portabler Standard, der Konfigurationen, Daten und Zwischenspeicherdateien definiert und wie sie im Dateisystem gespeichert werden sollen. In Helm 2 speicherte Helm all diese Information in `~/.helm` (auch bekannt als `helm home`), was mit der Umgebungsvariable `$HELM_HOME` geändert werden konnte, oder auch durch die globale Funktion `--home`. In Helm 3 respektiert Helm jetzt die folgenden Umgebungsvariablen nach der XDG Basnow respects the following environment variables as per the XDG Basis Verzeichnissupport Spezifikation: * `$XDG_CACHE_HOME` * `$XDG_CONFIG_HOME` * `$XDG_DATA_HOME` Helm Plugins beachten weiterhin für Abwärtskompatibiltät`$HELM_HOME` als Alias für `$XDG_DATA_HOME`. Verschiedene neue Umgebungsvariablen werden ebenfalls als Variablen des Plugins eingeführt: * `$HELM_PATH_CACHE` für den Pfad zum Zwischenspeicher * `$HELM_PATH_CONFIG` für den Pfad zur Konfiguration * `$HELM_PATH_DATA` für den Pfad zu den Daten Helm Plugins, die Helm 3 unterstützen, sollten diese neuen Umgebungsvariablen nutzen. ### Umbenennung von Kommandozeilenbefehle Um sich in der Erwartungen zu anderen Paketmanagern anzupassen, wurde `helm delete` umbenannt zu `helm uninstall`. `helm delete` funktioniert weiterhin als ALias für `helm uninstall` und kann weiter verwendet werden. In Helm 2 wurde die Option `--purge` bereitgestellt, um den Overhead von Versionsinformationen aufzuräumen. Diese Funktion ist jetzt standardmässig eingeschaltet. Um sie zu deaktivieren, gibt es die Option `helm uninstall --keep-history`. Zusätzlich wurden verschiedene andere Kommandos in ähnlicher Konvention umbenannt: * `helm inspect` -> `helm show` * `helm fetch` -> `helm pull` Diese Kommandos haben ihre alte Bedeutung als Alias beibehalten, sodass sie die weiter benutzen können. ### Automatisch erstellter Namespace Wenn eine Version in einem Namespace erstellt wird, der nicht existiert, hat Helm2 diesen angelegt. Helm 3 folgt den Konventionen von anderen Kubernetes Werkzeugen und gibt eine Fehlermeldung zurück, wenn der Namespace nicht existiert. Helm 3 wird den Namespace mit der expliziten Option `--create-namespace` anlegen. ### Was passierte mit .Chart.ApiVersion? Helm folgt den typischen Konventionen des sogenannten `CamelCasing`, also dem Grossschreiben von Akronymen. Wir hatten das irgendwo im Code, wie mit `.Capabilities.APIVersions.Has`. In Helm v3 haben wir das korrigiert zu `.Chart.ApiVersion`, um der Konvention zu folgen und `.Chart.APIVersion` umzubenennen. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Wir sind ein promoviertes Projekt der Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Chart Entwicklung Tipps und Tricks Chart Entwicklung Tipps und Tricks ================================== Dieses Handbuch bespricht Tipps und Tricks, die Helm Chart Entwickler bei der Entwicklung von produktionsreifen Charts gelernt haben. Kenne Deine Vorlagenfunktionen ------------------------------ Helm benutzt [Go Templates](https://godoc.org/text/template) für Vorlagen Ihrer Resourcedateien. Wobei Go schon einige eingebauten Funktionen mitbringt, haben wir noch viele andere hinzugefügt. Als erstes haben wir alle Funktionen in der [Sprig Bibliothek](https://masterminds.github.io/sprig/) hinzugefügt. Wir haben auch zwei spezielle Vorlagenfunktionen hinzugefügt: `include` und `required`. Die `include` Funktion erlaubt Ihnen das Hinzufügen anderer Vorlagen und das Zusammenfügen des Ergebnisses in einer anderen Vorlagenfunktion. Zum Beispiel diese Vorlage inkludiert eine Vorlage namens `mytpl`, dann wandelt es diese in Kleinschreibung um und quotet diese mit doppelten Anführungszeichen. value: {{ include "mytpl" . | lower | quote }} Die `required` Function erlaubt Ihnen die Deklaration eines Wertes als notwendig für das Vorlagenrendering. Wenn der Wert leer ist, wird das Vorlagenrendern fehlschlagen und dem Benutzer eine Fehlermeldung ausgeben. Das folgende Beispiel der `required` Funktion deklariert einen Eintrag für `.Values.who`, der notwendig ist und gibt einen Fehler aus, wenn dieser fehlt: value: {{ required "A valid .Values.who entry required!" .Values.who }} Strings quoten, Integers nicht quoten ------------------------------------- Wenn Sie mit Strings arbeiten, sind Sie mit Quoten immer auf der sicheren Seite: name: {{ .Values.MyName | quote }} Aber wenn Sie mit Integers arbeiten _quoten Sie nicht die Werte._ Das kann in vielen Fällen zu Fehlern in Kubernetes führen. port: {{ .Values.Port }} Dieser Hinweis gilt nicht für Umgebungsvariablen, die immer als String erwartet werden, auch wenn sie Integers repräsentieren: env: - name: HOST value: "http://host" - name: PORT value: "1234" Benutzen der 'include' Funktion ------------------------------- Go hat die Möglichkeit über eine eingebaute Funktion `template` zwei Vorlagen zu verbinden. Leider kann diese eingebaute Funktion nicht in Go Vorlagen Pipelines verwendet werden. Um das zu ermöglichen, eine Vorlage zu inkludieren und die Vorlagenausgabe weiter zu bearbeiten, hat Helm eine spezielle `include` Funktion: {{ include "toYaml" $value | indent 2 }} Dies inkludiert eine Vorlage namens `toYaml`, gibt das `$value` mit und gibt dann die Ausgabe der Vorlage an die `indent` Funktion weiter. Da YAML Einrückungen und Leerzeichen viel Bedeutung zumisst, ist das ein grossartiger Weg um Codeschnippsel zu inkludieren, aber die Einrückungen im relevaten Kontext zu halten. Benutzung der 'required' Funktion --------------------------------- Go stellt einen Weg zur Verfügung, um Vorlagenoptionen zu setzen und so das Verhalten zu beeinflussen, wenn eine Map mit einem Schlüssel indiziert wird, der in der Map nicht vorhanden ist. Das ist typischerweise gesetzt mit `template.Options("missingkey=option")`, wobei `option` `default` sein kann, `zero` oder `error`. Wenn diese Option zu error gesetzt ist, wird die Ausführung gestoppt, wennimmer der Wert leer ist. Es gibt Situationen, wenn Chart Entwickler dieses Verhalten für bestimmte Werte in der `values.yaml` Datei hervorrufen möchten. Die `required` Funktion gibt Entwicklern die Möglichkeit, einen Werteintrag zu deklarieren, der für das Vorlagenrendern notwendig ist. Wenn der Wert in `values.yaml` leer ist, wird die Vorlage nicht gerendert und eine Fehlermeldung wird vom Entwickler bereitgestellt. Zum Beispiel: {{ required "A valid foo is required!" .Values.foo }} Das oben wird eine Vorlage rendern, wenn `.Values.foo` definiert ist, aber fehlschlagen, wenn `.Values.foo` nicht definiert ist. Benutzen der 'tpl' Funktion --------------------------- Die `tpl` Funktion erlaubt Entwicklern Strings als Vorlagen in Vorlagen zu evaluieren. Das ist nützlich, um einen Vorlagenstring als Wert zu einem Chart oder zum Rendern einer externen Konfigurationsdatei zu verwenden. Syntax: `{{ tpl TEMPLATE_STRING VALUES }}` Beispiele: # values template: "{{ .Values.name }}" name: "Tom" # template {{ tpl .Values.template . }} # output Tom Rendern einer externen Konfigurationsdatei: # external configuration file conf/app.conf firstName={{ .Values.firstName }} lastName={{ .Values.lastName }} # values firstName: Peter lastName: Parker # template {{ tpl (.Files.Get "conf/app.conf") . }} # output firstName=Peter lastName=Parker Erstellen eines Image Pull Secrets ---------------------------------- Image Pull Secrets sind eine Kombination aus _registry_, _username_ und _password_. Sie brauchen sie vielleicht in einer Applikation, die Sie bereitstellen möchten, aber zum Erstellen brauchen Sie öfters `base64`. Wir können eine Hilfsvorlage erstellen, um die Docker Konfigurationsdatei mit einem Secret Payload zu erstellen. Hier kommt das Beispiel: Zuerst nehmen wir an, dass die Zugangsdaten in der `values.yaml` Datei definiert sind, wie: imageCredentials: registry: quay.io username: someone password: sillyness email: someone@host.com Wir definieren dann unsere Hilfsvorlage wie folgt: {{- define "imagePullSecret" }} {{- with .Values.imageCredentials }} {{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" .registry .username .password .email (printf "%s:%s" .username .password | b64enc) | b64enc }} {{- end }} {{- end }} Zum Schluss verwenden wir die Hilfsvorlage in einer grösseren Vorlage, um das Secret Manifest zu erstellen: apiVersion: v1 kind: Secret metadata: name: myregistrykey type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: {{ template "imagePullSecret" . }} Automatisierte Bereitstellungen ------------------------------- Sehr oft werden ConfigMaps oder Secrets als Konfigurationsdateien in Container injiziert oder dort sind andere externe Abhängigkeiten, was einen Pod Restart erforderlich macht. Abhängig von der Applikation sollte ein Restart eine Aktualsierung durch `helm upgrade` auslösen, aber die Deployment-Spezifikation selber ändert sich nicht und lässt die alte Konfiguration als Ergebnis inkonsistent in der Bereitstellung. Die `sha256sum` Funktion kann benutzt werden, um in der Annotation Sektion des Deployments dieses zu aktualisieren, wenn sich die Datei geändert hat. kind: Deployment spec: template: metadata: annotations: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} [...] In einem Ereignis, wenn Sie sowieso Ihr Deployment neu starten wollen, können Sie einen ähnlichen Schritt mit der Annotation gehen wie oben, aber diese mit einem zufälligen String ersetzen, sodass es immer eine Änderung gibt und diese einen Restart der Bereitstellung hervorruft: kind: Deployment spec: template: metadata: annotations: rollme: {{ randAlphaNum 5 | quote }} [...] Jede Benutzung dieser Vorlagenfunktion wird einen einzigartigen zufälligen String generieren. Das bedeutet, wenn dieser zufällige String mit mehreren Resourcen synchronisiert werden soll, müssen sich alle relevanten Resourcen in derselben Vorlagendatei befinden. Beide Methoden helfen Ihnen, Ihre Aktualisierungsstrategie zu planen und Ausfälle zu verhindern. HINWEIS: In der Vergangenheit empfohlen wir die Benutzung der Option `--recreate-pods`. Diese Option ist als veraltet markiert und in Helm 3 favorisieren wir die Methoden oben. Helm anweisen, keine Resourcen zu installieren ---------------------------------------------- Manchmal sollen Resourcen von Helm nicht deinstalliert werden, wenn Helm läuft mit `helm uninstall`. Chart Entwickler können eine Annotation zu einer Resource hinzufügen, um das zu verhindern. kind: Secret metadata: annotations: "helm.sh/resource-policy": keep [...] (Als notwendig markieren) Die Annotation `"helm.sh/resource-policy": keep` instruiert Helm, das Löschen dieser Resource bei Kommandos wie `helm uninstall`, `helm upgrade` oder `helm rollback` zu übergehen, was normalerweise zum Löschen führen würde. Helm wird diese nicht länger verwalten. Das kann zu Problemen führen, etwa bei `helm install --replace` bei einer Version, die schon deinstalliert ist, aber diese Resourcen behalten hat. Benutzung von "Partials" und inkludierten Vorlagen -------------------------------------------------- Manchmal möchten Sie Teile Ihres Charts wiederverwenden, in einem Block oder Vorlagenteile. Oft ist es sauberer, die in einer eigenen Datei vorzuhalten. Im `templates/` Verzeichnis werden Dateien, die mit einem Unterstrich beginnen (`_`), nicht als Ausgabedateien für Kubernetes Manifeste betrachtet. Mit dieser Konvention, werden Hilfsvorlagen und Teile in eine `_helpers.tpl` Datei platziert. Komplexe Charts mit vielen Abhängigkeiten ----------------------------------------- Viele Charts im CNCF [Artifact Hub](https://artifacthub.io/packages/search?kind=0) sind "building blocks" zum Erstellen erweiterter Applikationen. Aber Charts werden verwendet, zum Aufbau von Instanzen hochskalierbarer Anwendungen. In diesem Fall kann ein Schirm-Chart viele Unter-Charts haben, jede mit einer Funktion als Teil des Ganzen. Die derzeitige Praxis zum Komponieren einer komplexten Applikation von einzelnen Teilen ist ein Schirm-Chart auf höchster Stufe mit exponierten globalen Konfigurationswerten und dann benutzen des `charts/` Unterverzeichnis zum Einschluss aller Komponenten. YAML als Überschreibung von JSON -------------------------------- Entsprechend der Beschreibung der YAML Spezifikation ist YAML eine Überschreibung von JSON. Das bedeutet, dass jede valide JSON Struktur auch valide in YAML ist. Dies hat Vorteile: Manchmal finden es Vorlagenentwickler einfacher eine Datenstruktur in JSON-ähnlicher Syntax anzugeben, anstatt sich mit dem leerzeichensensitiven YAML abzugeben. Als bewährte Methode sollten Vorlagen einer YAML-ähnlichen Syntax folgen, unabhängig vom JSON. Die Syntax reduziert das Risiko eines Formatierungsproblems erheblich. Vorsicht bei zufallsgenerierten Werten -------------------------------------- Es gibt Funktionen in Helm, die zufällige Daten generieren, kryptographische Schlüssel usw.. Das ist gut so, aber achten Sie darauf, dass diese bem Aktualisieren und Rendern nochmal ausgeführt werden. Wenn eine Vorage unterschiedliche Daten wie beim letzten Lauf generiert, triggert das eine Aktualisierung der Resource. Installieren oder Aktualisieren einer Version mit einem Kommando ---------------------------------------------------------------- Helm stellt einen Weg zur Verfügung, um Installation und Aktualisierung in einem Kommando aufzurufen. Benutzen Sie `helm upgrade` mit dem `--install` Kommando. Das veranlasst Helm erst nachzuschauen, ob eine Version schon installiert ist, bevor es sie installiert. Wenn sie vorhanden ist, wird Helm die existierende Version aktualisieren. $ helm upgrade --install --values [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Wir sind ein promoviertes Projekt der Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Installieren Installieren ============ Installieren ------------ ### Warum gibt es keine nativen Pakete von Helm für Fedora oder andere Linuxdistributionen? Das Helm Projekt verwaltet keine Pakete für Betriebssysteme oder Umgebungen. Die Helm Gemeinschaft stellt möglicherweise native Pakete zur Verfügung und wenn es genug Aufmerksamkeit in der Gemeinschaft für ein Paket gibt, wird es vielleicht gelistet. So war es als Homebrew Formular startete und gelistet wurde. Wenn Sie interessiert sind, ein Paket zu verwalten, würden wir das sehr begrüssen. ### Warum stellt Ihr ein `curl ...|bash` Script zur Verfügung? Es ist ein Script in unserem Verzeichnis (`scripts/get-helm-3`), was als `curl ..|bash` ausgeführt werden kann. Die Übertragung ist durch HTTPS gesichert und das Script macht einige Überprüfungen beim Abruf. Aber egal, dieses Script hat alle Gefährlichkeiten eines Shellscripts. Wir stellen es zur Verfügung, weil es nützlich ist, aber empfehlen den Nutzern, es vor der ersten Ausführung gründlich zu lesen. Was wir wirklich möchten, ist eine besser gepackte Version von Helm. ### Wie lege ich die Dateien vom Helm Programm woanders hin? Helm benutzt die XDG Struktur zum Abspeichern von Dateien. Es gibt Umgebungsvariablen, die diese Lokation überschreiben kann: * `$XDG_CACHE_HOME`: Setzt eine alternative Lokation für Zwischenspeicherdateien. * `$XDG_CONFIG_HOME`: Setzt eine alternative Lokation für Helm Konfiguration. * `$XDG_DATA_HOME`: Setzt eine alternative Lokation für Helm Daten. Beachten Sie, dass Sie existierende Repositories mit dem Kommando `helm repo add...` neu hinzufügen müssen. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Wir sind ein promoviertes Projekt der Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Deinstallieren Deinstallieren ============== Deinstallieren -------------- ### I möchte mein lokales Helm deinstallieren. Wo sind alle Dateien? Neben dem eigentlichen `helm` Programm speichert Helm Dateien an folgenden Orten: * $XDG\_CACHE\_HOME * $XDG\_CONFIG\_HOME * $XDG\_DATA\_HOME Die folgende Tabelle gibt die Standardspeicherorte je Betriebssystem an: | Betriebssystem | Zwischenspeicherpfad | Konfigurationspfad | Datenpfad | | --- | --- | --- | --- | | Linux | `$HOME/.cache/helm` | `$HOME/.config/helm` | `$HOME/.local/share/helm` | | macOS | `$HOME/Library/Caches/helm` | `$HOME/Library/Preferences/helm` | `$HOME/Library/helm` | | Windows | `%TEMP%\helm` | `%APPDATA%\helm` | `%APPDATA%\helm` | [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Wir sind ein promoviertes Projekt der Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Fehlersuche Fehlersuche =========== Fehlersuche ----------- ### Ich bekomme eine Warnung "Unable to get an update from the "stable" chart repository" Starten Sie `helm repo list`. Wenn Ihr `stable` Repository zu `storage.googleapis.com` zeigt, benötigen Sie eine Aktualisierung. Am 13.11.2020 wurde das Helm Chart Verzeichnis [unsupported](https://github.com/helm/charts#deprecation-timeline) , nachdem es ein Jahr lang als veraltet gekennzeichnet wurde. Ein Archiv ist verfügbar auf `https://charts.helm.sh/stable`, aber es bekommt keine Aktualisierungen mehr. Sie können folgendes tun, um Ihr Repository zu reparieren: $ helm repo add stable https://charts.helm.sh/stable --force-update Dasselbe gilt für das `incubator` Repository, dessen Archiv verfügbar ist bei [https://charts.helm.sh/incubator](https://charts.helm.sh/incubator) . Zur Reparatur können Sie folgendes Kommando verwenden: $ helm repo add incubator https://charts.helm.sh/incubator --force-update ### Ich bekomme die Warnung 'WARNING: "kubernetes-charts.storage.googleapis.com" is deprecated for "stable" and will be deleted Nov. 13, 2020.' Das alte Google Helm Chart Repository wurde ersetzt durch ein neues. Starten Sie folgendes Kommando, um das dauerhaft zu beheben: $ helm repo add stable https://charts.helm.sh/stable --force-update Wenn Sie einen ähnlichen Fehler für `incubator` bekommen, machen Sie folgendes: $ helm repo add incubator https://charts.helm.sh/incubator --force-update ### Wenn ich ein Helm Repo hinzufüge, bekomme ich den Fehler 'Error: Repo "https://kubernetes-charts.storage.googleapis.com" is no longer available' Das Helm Chart Repository wird nach [einem Jahr Abschaltperiode](https://github.com/helm/charts#deprecation-timeline) nicht mehr unterstützt. Archive für diese Verzeichnisse sind verfügbar unter `https://charts.helm.sh/stable` und `https://charts.helm.sh/incubator`, aber es werden keine Aktualisierungen mehr hinzugefügt. Das Kommando `helm repo add` wird das Hinzufügen der alten URLs nicht erlauben, ausser man verwendet die Option `--use-deprecated-repos`. ### Auf GKE (Google Container Engine) bekomme ich "No SSH tunnels currently open" Error: Error forwarding ports: error upgrading connection: No SSH tunnels currently open. Were the targets able to accept an ssh-key for user "gke-[redacted]"? Eine andere Variante des Fehler ist: Unable to connect to the server: x509: certificate signed by unknown authority Das Problem ist, dass Ihre lokale Kubernetes Konfigurationsdatei die richtigen Anmeldeinformationen beinhalten muss. Wenn Sie in GKE einen Cluster erstellen, werden Sie die Anmeldeinformation incl. SSL Zertifikate bekommen. Diese müssen in einer Kubernetes Konfigurationsdatei gespeichert werden (Default: `~/.kube/config`), sodass `kubectl` und `helm` darauf zugreifen können. ### Nach der Migration von Helm 2 zeigt `helm list` nur sehr wenige oder gar keine Versionen an Es scheint so, dass Sie einige Fakten übersehen haben, dass Helm 3 nur Versionen im Skope des Cluster Namespaces anzeigt. Das heisst, dass Sie an allen Kommandos, die eine Version betreffen, diese Optionen hinzufügen müssen: * im derzeitigen Namespace mit aktivem Kontext bleiben (wie beschrieben im Kommando `kubectl config view --minify`), * den richtigen Namespace angeben mit der Option `--namespace`/`-n` oder * für das `helm list` Kommando die Option `--all-namespaces`/`-A` angeben Dies wird zu allen Kommandos wie `helm ls`, `helm uninstall` und allen anderen `helm` Befehlen referenziert zu einer Version hinzugefügt. ### In macOS kann man auf die Dateie `/etc/.mdns_debug` zugreifen. Warum? Wir wissen davon, dass Helm auf macOS versucht, auf eine Datei namens `/etc/.mdns_debug` zuzugreifen. Wenn die Datei existiert, hält Helm ein Dateihandle offen, während es ausgeführt wird. Das wird durch die macOS MDNS Bibliothek verursacht. Es erwartet, dass die Datei zur Fehlersuche geladen wird (wenn verfügbar). Das Dateihandle sollte nicht offen gehalten werden und der Fehler wurde bei Apple gemeldet. Der Fehler liegt an macOS und nicht Helm. Wenn Sie nicht möchten, dass Helm die Datei lädt, könnten Sie Helm selber übersetzen als statische Bibliothek, dass das Hostnetzwerk nicht benutzt. Wenn Sie das tun, wird sich die Dateigrösse von Helm stark vergrössern, aber Sie sind das Problem los. Der Fehler war ursächlich als Sicherheitsproblem gemeldet. Aber es hat sich mittlerweile herausgestellt, dass es kein Problem darstellt. ### helm repo add schlägt fehl, wenn es schon mal benutzt war In Helm 3.3.1 und davor gab das Kommando `helm repo add ` keine Ausgabe, wenn Sie versucht haben, dass Verzeichnis hinzuzufügen, wenn es schon vorhanden war. Die Option `--no-update` würde eine Fehlermeldung ausgeben, wenn das Verzeichnis schon registriert war. In Helm 3.3.2 und davor gibt es beim Versuch das Verzeichnis hinzuzufügen einen Fehler: `Error: repository name (reponame) already exists, please specify a different name` Das Standardverhalten ist jetzt umgekehrt. `--no-update` wird jetzt ignoriert, wenn Sie ein existierendes Verzeichnis ersetzen (überschreiben) wollen. Sie können die Option `--force-update` verwenden. Das ist wegen einer unterbrochenden Änerung für ein Sicherheitsupdate wie erklärt ist in [Helm 3.3.2 release notes](https://github.com/helm/helm/releases/tag/v3.3.2) . ### Kubernetes Programmprotokoll aktivieren Die Ausgabe von Protokollmeldungen zur Fehlersuche können durch die [klog](https://pkg.go.dev/k8s.io/klog) Option aktiviert werden. Verwenden Sie die Option `-v` zur Stärke der Ausgabe. Zum Beispiel: helm list -v 6 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Wir sind ein promoviertes Projekt der Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Push Helm Push ========= helm push --------- завантажити чарт на віддалений сервер ### Опис Завантаження чарту до реєстру. Якщо чарт має повʼязаний файл підтвердження автентичності, він також буде завантажений. helm push [chart] [remote] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату -h, --help довідка push --insecure-skip-tls-verify пропустити перевірку tls-сертифікатів під час завантаження чарту --key-file string ідентифікувати клієнта реєстру за допомогою цього файлу ключа SSL --plain-http використовувати небезпечні HTTP-зʼєднання для завантаження чарту ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — Менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Helm Registry ============= helm registry ------------- вхід до або вихід з реєстру ### Опис Ця команда містить декілька субкоманд для взаємодії з реєстрами. ### Параметри -h, --help довідка registry ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — Менеджер пакетів Helm для Kubernetes. * [helm registry login](https://helm.sh/uk/docs/helm/helm_registry_login/)  — вхід до реєстру * [helm registry logout](https://helm.sh/uk/docs/helm/helm_registry_logout/)  — вихід з реєстру ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Login Helm Registry Login =================== helm registry login ------------------- вхід до реєстру ### Опис Автентифікація на віддаленому реєстрі. helm registry login [host] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату -h, --help довідка login --insecure дозволити зʼєднання з TLS-реєстром без сертифікатів --key-file string ідентифікувати клієнта реєстру за допомогою цього файлу ключа SSL -p, --password string пароль для реєстру або токен ідентифікації --password-stdin зчитати пароль або токен ідентифікації з stdin -u, --username string імʼя користувача реєстру ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm registry](https://helm.sh/uk/docs/helm/helm_registry/)  — увійти або вийти з реєстру. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Logout Helm Registry Logout ==================== helm registry logout -------------------- вихід з реєстру ### Опис Видалення збережених облікових даних для віддаленого реєстру. helm registry logout [host] [flags] ### Параметри -h, --help довідка logout ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm registry](https://helm.sh/uk/docs/helm/helm_registry/)  — увійти або вийти з реєстру. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Helm Repo ========= helm repo --------- додати, вивести перелік, видалити, оновити та індексувати репозиторії чартів ### Опис Ця команда містить кілька субкоманд для взаємодії з репозиторіями чартів. Вона може використовуватися для додавання, видалення, виводу переліку та індексування репозиторіїв чартів. ### Параметри -h, --help довідка repo ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. * [helm repo add](https://helm.sh/uk/docs/helm/helm_repo_add/)  — додати репозиторій чартів * [helm repo index](https://helm.sh/uk/docs/helm/helm_repo_index/)  — згенерувати файл індексу для теки, що містить упаковані чарти * [helm repo list](https://helm.sh/uk/docs/helm/helm_repo_list/)  — вивести перелік репозиторіїв чартів * [helm repo remove](https://helm.sh/uk/docs/helm/helm_repo_remove/)  — видалити один або кілька репозиторіїв чартів * [helm repo update](https://helm.sh/uk/docs/helm/helm_repo_update/)  — оновити інформацію про доступні чарти локально з репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Add Helm Repo Add ============= helm repo add ------------- додати репозиторій чартів helm repo add [NAME] [URL] [flags] ### Параметри --allow-deprecated-repos стандартно ця команда не дозволяє додавати офіційні репозиторії, які були назавжди видалені. Ця опція вимикає таку поведінку --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --force-update замінити (перезаписати) репозиторій, якщо він уже існує -h, --help довідка add --insecure-skip-tls-verify пропустити перевірку tls-сертифікатів для репозиторію --key-file string ідентифікувати HTTPS-клієнта за допомогою цього файлу ключа SSL --no-update Ігнорується. Раніше ця опція відключала примусові оновлення. Застаріла через force-update. --pass-credentials передавати облікові дані всім доменам --password string пароль до репозиторію чартів --password-stdin зчитати пароль до репозиторію чартів з stdin --username string імʼя користувача репозиторію чартів ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm repo](https://helm.sh/uk/docs/helm/helm_repo/)  — додавання, створення списку, видалення, оновлення та індексація репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Index Helm Repo Index =============== helm repo index --------------- згенерувати файл індексу для теки, що містить упаковані чарти ### Опис Прочитати поточну теку і згенерувати файл індексу на основі знайдених чартів. Цей інструмент використовується для створення файлу 'index.yaml' для репозиторію чартів. Щоб встановити абсолютну URL-адресу для чартів, використовуйте прапорець '--url'. Щоб обʼєднати згенерований індекс із наявним файлом індексу, використовуйте прапорець '--merge'. У цьому випадку чарти, знайдені в поточній теці, будуть обʼєднані з наявним індексом, причому локальні чарти матимуть пріоритет над теперішніми. helm repo index [DIR] [flags] ### Параметри -h, --help довідка index --json вивід у форматі JSON --merge string обʼєднати згенерований індекс із вказаним індексом --url string URL репозиторію чартів ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm repo](https://helm.sh/uk/docs/helm/helm_repo/)  — додавання, створення списку, видалення, оновлення та індексація репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo List Helm Repo List ============== helm repo list -------------- вивести перелік репозиторії чартів helm repo list [flags] ### Параметри -h, --help довідка list -o, --output format вивести результат у вказаному форматі. Доступні значення: table, json, yaml (стандартно table) ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm repo](https://helm.sh/uk/docs/helm/helm_repo/)  — додавання, створення списку, видалення, оновлення та індексація репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Remove Helm Repo Remove ================ helm repo remove ---------------- видалити один або кілька репозиторіїв чартів helm repo remove [REPO1 [REPO2 ...]] [flags] ### Параметри -h, --help довідка remove ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm repo](https://helm.sh/uk/docs/helm/helm_repo/)  — додавання, створення списку, видалення, оновлення та індексація репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Update Helm Repo Update ================ helm repo update ---------------- оновити інформацію про доступні чарти локально з репозиторіїв чартів ### Опис Команда update отримує останню інформацію про чарти з відповідних репозиторіїв чартів. Інформація кешується локально, де її використовують такі команди, як 'helm search'. Ви можете опційно вказати список репозиторіїв, які ви хочете оновити. helm repo update ... Щоб оновити всі репозиторії, використовуйте 'helm repo update'. helm repo update [REPO1 [REPO2 ...]] [flags] ### Параметри --fail-on-repo-update-fail оновлення не буде завершене, якщо будь-яке з оновлень репозиторіїв зазнає невдачі -h, --help довідка update ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm repo](https://helm.sh/uk/docs/helm/helm_repo/)  — додавання, створення списку, видалення, оновлення та індексація репозиторіїв чартів ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Rollback Helm Rollback ============= helm rollback ------------- відкотити реліз до попередньої версії ### Опис Ця команда відкотить реліз до попередньої версії. Перший аргумент команди rollback — це імʼя релізу, а другий — номер версії (revision). Якщо цей аргумент пропущений або встановлений на 0, реліз буде повернено до попередньої версії. Щоб побачити номери версій, виконайте команду 'helm history RELEASE'. helm rollback [REVISION] [flags] ### Параметри --cleanup-on-fail дозволити видалення нових ресурсів, створених під час цього відкату, якщо відкат не вдається --dry-run імітувати відкат --force примусово оновити ресурси через видалення/пересворення, якщо потрібно -h, --help довдідка rollback --history-max int обмежити максимальну кількість збережених версій для кожного релізу. Використовуйте 0 для безмежної кількості (стандартно 10) --no-hooks запобігти виконанню хуків під час відкату --recreate-pods перезапускати podʼи для ресурсу, якщо це застосовується --timeout duration час очікування для будь-якої окремої операції Kubernetes (наприклад, Jobs для хуків) (стандартно 5m0s) --wait якщо встановлено, буде чекати, поки всі Pods, PVCs, Services і мінімальна кількість Pods у Deployment, StatefulSet або ReplicaSet не перейдуть у стан готовності, перш ніж позначити реліз як успішний. Чекатиме стільки, скільки вказано у --timeout --wait-for-jobs якщо встановлено і --wait увімкнено, буде чекати, поки всі Jobs не будуть завершені, перш ніж позначити реліз як успішний. Чекатиме стільки, скільки вказано у --timeout ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Helm Search =========== helm search ----------- шукати ключове слово у чартах ### Опис Команда search надає можливість шукати Helm чарти в різних місцях, де вони можуть зберігатися, включаючи Artifact Hub і репозиторії, які ви додали. Використовуйте субкоманди search для пошуку в різних місцях для чартів. ### Параметри -h, --help довідка search ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. * [helm search hub](https://helm.sh/uk/docs/helm/helm_search_hub/)  — шукати чарти в Artifact Hub або у власному екземплярі хабу * [helm search repo](https://helm.sh/uk/docs/helm/helm_search_repo/)  — шукати репозиторії за ключовим словом у чартах ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Hub Helm Search Hub =============== helm search hub --------------- шукати чарти в Artifact Hub або у власному екземплярі хабу ### Опис Шукайте Helm чарти в Artifact Hub або у власному екземплярі хабу. Artifact Hub — це вебзастосунок, що дозволяє знаходити, встановлювати та публікувати пакети та конфігурації для проєктів CNCF, включаючи публічно доступні розподілені Helm чарти. Це проєкт Sandbox Cloud Native Computing Foundation. Ви можете переглянути хаб за адресою [https://artifacthub.io/](https://artifacthub.io/) Аргумент \[KEYWORD\] приймає як ключове слово, так і рядок з параметрами розширеного запиту. Документацію з параметрів розширеного запиту дивіться на [https://artifacthub.github.io/hub/api/?urls.primaryName=Monocular%20compatible%20search%20API#/Monocular/get\_api\_chartsvc\_v1\_charts\_search](https://artifacthub.github.io/hub/api/?urls.primaryName=Monocular%20compatible%20search%20API#/Monocular/get_api_chartsvc_v1_charts_search) Попередні версії Helm використовували екземпляр Monocular як стандартне значення для 'endpoint', тому для зворотної сумісності Artifact Hub сумісний з API пошуку Monocular. Аналогічно, при встановленні прапорця 'endpoint' зазначена точка доступу також має реалізовувати API пошуку, сумісний з Monocular. Зверніть увагу, що при вказівці екземпляра Monocular як 'endpoint', розширені запити не підтримуються. Для деталей API дивіться [https://github.com/helm/monocular](https://github.com/helm/monocular) helm search hub [KEYWORD] [flags] ### Параметри --endpoint string Екземпляр хаба для запитів чартів (стандартно "https://hub.helm.sh") --fail-on-no-result пошук не вдається, якщо результати не знайдені -h, --help довідка hub --list-repo-url вивести URL репозиторію чартів --max-col-width uint максимальна ширина стовпця для таблиці виводу (стандартно 50) -o, --output format вивести результат у вказаному форматі. Доступні значення: table, json, yaml (стандартно table) ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm search](https://helm.sh/uk/docs/helm/helm_search/)  — пошук ключового слова в чартах ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Repo Helm Search Repo ================ helm search repo ---------------- шукати репозиторії за ключовим словом у чартах ### Опис Команда search проходить через всі репозиторії, налаштовані в системі, і шукає збіги. Пошук цих репозиторіїв використовує метадані, збережені в системі. Вона відобразить останні стабільні версії знайдених чартів. Якщо ви вказуєте прапорець --devel, у виводі будуть включені передрелізні версії. Якщо ви хочете шукати за допомогою обмеження версії, використовуйте --version. Приклади: # Шукати стабільні версії релізів, що відповідають ключовому слову "nginx" $ helm search repo nginx # Шукати версії релізів, що відповідають ключовому слову "nginx", включаючи версії передрелізні $ helm search repo nginx --devel # Шукати останній стабільний реліз для nginx-ingress з основною версією 1 $ helm search repo nginx-ingress --version ^1.0.0 Репозиторії управляються командами 'helm repo'. helm search repo [keyword] [flags] ### Параметри --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. --fail-on-no-result повертає помилку, якщо результати не знайдені -h, --help довідка repo --max-col-width uint максимальна ширина стовпця для таблиці виводу (стандартно 50) -o, --output format вивести результат у вказаному форматі. Доступні значення: table, json, yaml (стандартно table) -r, --regexp використовувати регулярні вирази для пошуку в репозиторіях, які ви додали --version string шукати, використовуючи обмеження семантичного версіонування в репозиторіях, які ви додали -l, --versions показати довгий список, з кожною версією кожного чарту на окремому рядку, для репозиторіїв, які ви додали ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm search](https://helm.sh/uk/docs/helm/helm_search/)  — пошук ключового слова в чартах ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Helm Show ========= helm show --------- показати інформацію про чарт ### Опис Ця команда складається з кількох підкоманд для відображення інформації про чарт ### Параметри -h, --help довідка show ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. * [helm show all](https://helm.sh/uk/docs/helm/helm_show_all/)  — показати всю інформацію про чарт * [helm show chart](https://helm.sh/uk/docs/helm/helm_show_chart/)  — показати визначення чарту * [helm show crds](https://helm.sh/uk/docs/helm/helm_show_crds/)  — показати CRD чарту * [helm show readme](https://helm.sh/uk/docs/helm/helm_show_readme/)  — показати README чарту * [helm show values](https://helm.sh/uk/docs/helm/helm_show_values/)  — показати значення чарту ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show All Helm Show All ============= helm show all ------------- показати всю інформацію про чарт ### Опис Ця команда перевіряє чарт (теку, файл або URL) та показує весь його вміст (values.yaml, Chart.yaml, README). helm show all [CHART] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --devel використовувати версії в розробці також. Еквівалентно версії '>0.0.0-0'. Якщо вказано --version, це ігнорується -h, --help довідка all --insecure-skip-tls-verify пропустити перевірку сертифікатів TLS для завантаження чарту --key-file string ідентифікувати HTTPS-клієнта за допомогою цього SSL ключового файлу --keyring string розташування публічних ключів, які використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чартів, де розташований запитуваний чарт --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --repo string URL репозиторію чартів, де розташований запитуваний чарт --username string імʼя користувача репозиторію чартів, де розташований запитуваний чарт --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним теґом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, буде використовуватися остання версія ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm show](https://helm.sh/uk/docs/helm/helm_show/)  — показати інформацію про чарт ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Chart Helm Show Chart =============== helm show chart --------------- показати визначення чарту ### Опис Ця команда перевіряє чарт (теку, файл або URL) і показує вміст файлу Chart.yaml. helm show chart [CHART] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. -h, --help довідка chart --insecure-skip-tls-verify пропустити перевірку сертифікатів TLS для завантаження чарту --key-file string ідентифікувати HTTPS-клієнта за допомогою цього SSL ключового файлу --keyring string розташування публічних ключів, які використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чартів, де розташований запитуваний чарт --plain-http використовувати небезпечні HTTP з'єднання для завантаження чарту --repo string URL репозиторію чартів, де розташований запитуваний чарт --username string імʼя користувача репозиторію чартів, де розташований запитуваний чарт --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним тегом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, буде використовуватися остання версія ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm show](https://helm.sh/uk/docs/helm/helm_show/)  — показати інформацію про чарт ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Crds Helm Show Crds ============== helm show crds -------------- показати CRD чарту ### Опис Ця команда перевіряє чарт (теку, файл або URL) та показує вміст файлів CustomResourceDefinition (CRD). helm show crds [CHART] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. -h, --help довідка crds --insecure-skip-tls-verify пропустити перевірку сертифікатів TLS для завантаження чарту --key-file string ідентифікувати HTTPS-клієнта за допомогою цього SSL ключового файлу --keyring string розташування публічних ключів, які використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чартів, де розташований запитуваний чарт --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --repo string URL репозиторію чартів, де розташований запитуваний чарт --username string імʼя користувача репозиторію чартів, де розташований запитуваний чарт --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним тегом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, буде використовуватися остання версія ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm show](https://helm.sh/uk/docs/helm/helm_show/)  — показати інформацію про чарт ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Readme Helm Show Readme ================ helm show readme ---------------- показати README файл чарту ### Опис Ця команда перевіряє чарт (теку, файл або URL) та показує вміст файлу README helm show readme [CHART] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. -h, --help довідка readme --insecure-skip-tls-verify пропустити перевірку сертифікатів TLS для завантаження чарту --key-file string ідентифікувати HTTPS-клієнта за допомогою цього SSL ключового файлу --keyring string розташування публічних ключів, які використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чартів, де розташований запитуваний чарт --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --repo string URL репозиторію чартів, де розташований запитуваний чарт --username string імʼя користувача репозиторію чартів, де розташований запитуваний чарт --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним тегом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, буде використовуватися остання версія ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm show](https://helm.sh/uk/docs/helm/helm_show/)  — показати інформацію про чарт ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Values Helm Show Values ================ helm show values ---------------- показати значення чарту ### Опис Ця команда перевіряє чарт (теку, файл або URL) та показує вміст файлу values.yaml helm show values [CHART] [flags] ### Параметри --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. -h, --help довідка values --insecure-skip-tls-verify пропустити перевірку сертифікатів TLS для завантаження чарту --key-file string ідентифікувати HTTPS-клієнта за допомогою цього SSL ключового файлу --keyring string розташування публічних ключів, які використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чартів, де розташований запитуваний чарт --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --repo string URL репозиторію чартів, де розташований запитуваний чарт --username string імʼя користувача репозиторію чартів, де розташований запитуваний чарт --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним тегом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, буде використовуватися остання версія ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm show](https://helm.sh/uk/docs/helm/helm_show/)  — показати інформацію про чарт ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Status Helm Status =========== helm status ----------- показати статус вказаного релізу ### Опис Ця команда показує статус вказаного релізу. Статус складається з: * часу останнього розгортання * простору імен k8s, в якому знаходиться реліз * стану релізу (може бути: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade або pending-rollback) * ревізії релізу * опису релізу (може бути повідомленням про завершення або помилкою, потрібно увімкнути --show-desc) * списку ресурсів, які входять до складу цього релізу (потрібно увімкнути --show-resources) * деталей останнього запуску тестового набору, якщо застосовується * додаткових приміток, наданих чартом helm status RELEASE_NAME [flags] ### Параметри -h, --help довідка status -o, --output format виводить результат у вказаному форматі. Дозволені значення: table, json, yaml (стандартно table) --revision int якщо вказано, показати статус вказаного релізу з ревізією --show-desc якщо вказано, показати описове повідомлення вказаного релізу --show-resources якщо вказано, показати ресурси вказаного релізу ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Template Helm Template ============= helm template ------------- локальний рендеринг шаблонів ### Опис Рендерить шаблони чарту локально та показує результат. Будь-які значення, які зазвичай шукалися або отримувалися в кластері, будуть імітуватися локально. Крім того, жодна з перевірок валідності чарту на сервері (наприклад, перевірка підтримки API) не проводиться. helm template [NAME] [CHART] [flags] ### Параметри -a, --api-versions strings версії API Kubernetes, які використовуються для Capabilities.APIVersions --atomic якщо вказано, процес встановлення видалить інсталяцію у разі невдачі. Прапорець --wait буде встановлено автоматично, якщо використовується --atomic --ca-file string перевірити сертифікати HTTPS-серверів за допомогою цього CA пакету --cert-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL сертифікату --create-namespace створити простір імен релізу, якщо його не існує --dependency-update оновити залежності, якщо вони відсутні перед установкою чарту --description string додати власний опис --devel використовувати також версії в розробці. Еквівалент версії '>0.0.0-0'. Якщо вказано --version, цей параметр ігнорується. --disable-openapi-validation якщо вказано, процес встановлення не буде перевіряти шаблони за схемою OpenAPI Kubernetes --dry-run string[="client"] імітувати встановлення. Якщо --dry-run вказано без жодної опції або як '--dry-run=client', він не буде намагатися підключитися до кластера. Встановлення '--dry-run=server' дозволяє намагатися підключитися до кластера. --enable-dns увімкнути DNS запити при рендерингу шаблонів --force примусово оновлювати ресурси через стратегію заміни -g, --generate-name згенерувати імʼя (та опустити параметр NAME) -h, --help довідка по template --hide-notes якщо встановлено, не показувати примітки у виводі встановлення. Не впливає на присутність у метаданих чарту --include-crds включити CRD у вивід шаблонів --insecure-skip-tls-verify пропустити перевірки TLS сертифікатів для завантаження чарту --is-upgrade встановити .Release.IsUpgrade замість .Release.IsInstall --key-file string ідентифікувати клієнта HTTPS, використовуючи цей файл SSL ключа --keyring string розташування публічних ключів, використовуваних для перевірки (стандартно "~/.gnupg/pubring.gpg") --kube-version string версія Kubernetes, яка використовується для Capabilities.KubeVersion -l, --labels stringToString Мітки, які будуть додані до метаданих релізу. Мають бути розділені комами. (стандартно []) --name-template string вказати шаблон, використаний для іменування релізу --no-hooks запобігти виконанню хуків у процесі установки --output-dir string записувати виконані шаблони у файли в output-dir замість stdout --pass-credentials передати облікові дані всім доменам --password string пароль до репозиторію чартів, де знайти запитуваний чарт --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --post-renderer postRendererString шлях до виконуваного файлу, який буде використаний для пост-рендерингу. Якщо він існує в $PATH, буде використано цей бінарний файл, інакше спробує знайти виконуваний файл за вказаним шляхом --post-renderer-args postRendererArgsSlice аргумент для пост-рендерера (можна вказати кілька) (стандартно []) --release-name використовувати імʼя релізу в шляху output-dir --render-subchart-notes якщо вказано, рендерити нотатки субчарту разом з батьківським --replace повторно використовувати дане імʼя, тільки якщо це імʼя є видаленим релізом, який залишається в історії. Це небезпечно в операційному середовищі --repo string URL репозиторію чартів, де знайти запитуваний чарт --set stringArray встановити значення в командному рядку (можна вказати кілька або розділити значення комами: key1=val1,key2=val2) --set-file stringArray встановити значення з відповідних файлів, зазначених через командний рядок (можна вказати кілька або розділити значення комами: key1=path1,key2=path2) --set-json stringArray встановити JSON значення в командному рядку (можна вказати кілька або розділити значення комами: key1=jsonval1,key2=jsonval2) --set-literal stringArray встановити літеральне STRING значення на командному рядку --set-string stringArray встановити STRING значення в командному рядку (можна вказати кілька або розділити значення комами: key1=val1,key2=val2) -s, --show-only stringArray показати тільки маніфести, відрендерені з вказаних шаблонів --skip-crds якщо вказано, CRD не будуть встановлені. Ствндартно CRD встановлюються, якщо ще не присутні --skip-schema-validation якщо встановлено, вимикає перевірку схеми JSON --skip-tests пропустити тести з виводу шаблонів --timeout duration час очікування для будь-якої окремої операції Kubernetes (наприклад, Jobs для хук) (стандартно 5м0с) --username string імʼя користувача репозиторію чартів, де знайти запитуваний чарт --validate перевірити ваші маніфести на відповідність кластеру Kubernetes, до якого ви в даний час звертаєтеся. Це така ж перевірка, яка виконується при установці -f, --values strings вказати значення в YAML файлі або URL (можна вказати кілька) --verify перевірити пакет перед його використанням --version string вказати обмеження версії для версії чарту, яку потрібно використовувати. Це обмеження може бути конкретним тегом (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо це не вказано, використовується остання версія --wait якщо вказано, буде чекати, поки всі Pods, PVCs, Services та мінімальна кількість Pods Deployment, StatefulSet або ReplicaSet не будуть у стані готовності, перш ніж позначити реліз як успішний. Це буде чекати стільки, скільки вказано у --timeout --wait-for-jobs якщо вказано і --wait увімкнено, буде чекати, поки всі Jobs не будуть завершені перед тим, як позначити реліз як успішний. Це буде чекати стільки, скільки вказано у --timeout ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Test Helm Test ========= helm test --------- запустити тести для релізу ### Опис Команда test запускає тести для релізу. Аргументом цієї команди є імʼя розгорнутого релізу. Тести, що будуть виконані, визначені у чарті, який був встановлений. helm test [RELEASE] [flags] ### Параметри --filter strings вказати тести за атрибутом (в даний час "name") використовуючи синтаксис attribute=value або '!attribute=value', щоб виключити тест (можна вказати кілька або розділити значення комами: name=test1,name=test2) -h, --help довідка test --hide-notes якщо встановлено, не показувати примітки у виводі встановлення. Не впливає на присутність у метаданих чарту --logs отримати логи з тестових podʼів (це виконується після завершення всіх тестів, але перед будь-яким очищенням) --timeout duration час очікування для будь-якої окремої операції Kubernetes (наприклад, Jobs для хуків) (стандартно 5м0с) ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Uninstall Helm Uninstall ============== helm uninstall -------------- видалити реліз ### Опис Ця команда приймає імʼя релізу і видаляє його. Вона видаляє всі ресурси, асоційовані з останнім релізом чарту, а також історію релізу, звільняючи його для подальшого використання. Використовуйте прапор '--dry-run', щоб побачити, які релізи будуть видалені без фактичного видалення. helm uninstall RELEASE_NAME [...] [flags] ### Параметри --cascade string Має бути "background", "orphan" або "foreground". Вибирає стратегію каскадного видалення для залежних ресурсів. Стандартно background. (стандартно "background") --description string додати власний опис --dry-run симулювати видалення -h, --help довідка uninstall --ignore-not-found Вважати "release not found" як успішне видалення --keep-history видалити всі асоційовані ресурси і помітити реліз як видалений, але зберегти історію релізу --no-hooks запобігти виконанню хуків під час видалення --timeout duration час очікування для будь-якої окремої операції Kubernetes (наприклад, Jobs для хуків) (стандартно 5м0с) --wait якщо вказано, буде чекати, поки всі ресурси не будуть видалені перед поверненням. Буде чекати стільки, скільки вказано у --timeout ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Upgrade Helm Upgrade ============ helm upgrade ------------ оновити реліз ### Опис Ця команда оновлює реліз до нової версії чарту. Аргументи для оновлення повинні містити реліз і чарт. Аргумент чарту може бути або: посилання на чарт ('example/mariadb'), шлях до теки з чартом, упакований чарт або повністю кваліфікований URL. Для посилань на чарт буде вказана остання версія, якщо не встановлено прапорець '--version'. Щоб перевизначити значення в чарті, використовуйте або прапорець '--values' та передайте файл, або прапорець '--set' і передайте конфігурацію з командного рядка. Для примусового використання рядкових значень використовуйте '--set-string'. Можна також використовувати '--set-file', щоб задати окремі значення з файлу, коли значення занадто довге для командного рядка або генерується динамічно. Ви також можете використовувати '--set-json', щоб задати json-значення (скаляри/обʼєкти/масиви) з командного рядка. Ви можете вказати прапорець '--values'/'-f' кілька разів. Пріоритет буде надано останньому (правому) файлу. Наприклад, якщо і myvalues.yaml, і override.yaml містять ключ 'Test', значення, задане в override.yaml, матиме пріоритет: $ helm upgrade -f myvalues.yaml -f override.yaml redis ./redis Ви можете вказати прапорець '--set' кілька разів. Пріоритет буде надано останньому (правому) заданому значенню. Наприклад, якщо значення 'bar' і 'newbar' встановлені для ключа 'foo', значення 'newbar' матиме пріоритет: $ helm upgrade --set foo=bar --set foo=newbar redis ./redis Ви також можете оновити значення для поточного релізу за допомогою цієї команди з прапорцем '--reuse-values'. Аргументи 'RELEASE' і 'CHART' повинні бути встановлені на оригінальні параметри, поточні значення будуть обʼєднані з будь-якими значеннями, заданими через прапорці '--values'/'-f' або '--set'. Пріоритет надається новим значенням. $ helm upgrade --reuse-values --set foo=bar --set foo=newbar redis ./redis Прапорець `--dry-run` виведе усі згенеровані маніфести чартів, включно з секретами, які можуть містити конфіденційні значення. Для приховування секретів Kubernetes використовуйте прапорець `--hide-secret`. Будь ласка, уважно вивчіть, як і коли використовувати ці прапорці. helm upgrade [RELEASE] [CHART] [flags] ### Параметри --atomic якщо встановлено, процес оновлення скасовує зміни у разі невдалого оновлення. Прапорець --wait буде автоматично встановлено, якщо використовується --atomic --ca-file string перевіряти сертифікати HTTPS-серверів, використовуючи цей CA пакет --cert-file string ідентифікувати HTTPS-клієнта, використовуючи цей SSL сертифікат --cleanup-on-fail дозволити видалення нових ресурсів, створених в цьому оновленні, коли оновлення не вдалося --create-namespace якщо встановлено --install, створити простір імен релізу, якщо він не присутній --dependency-update оновити залежності, якщо вони відсутні, перед встановленням чарту --description string додати власний опис --devel використовувати також версії в розробці. Еквівалентно версії '>0.0.0-0'. Якщо вказано --version, це буде проігноровано --disable-openapi-validation якщо встановлено, процес оновлення не буде перевіряти відрендерені шаблони на відповідність Kubernetes OpenAPI Schema --dry-run string[="client"] симулювати установку. Якщо --dry-run встановлено без вказання опції або як '--dry-run=client', не буде спроб зʼєднання з кластером. Встановлення '--dry-run=server' дозволяє спробувати зʼєднання з кластером. --enable-dns увімкнути DNS запити під час рендерингу шаблонів --force примусове оновлення ресурсів через стратегію заміни -h, --help довідка upgrade --hide-notes якщо встановлено, не показувати примітки у виводі встановлення. Не впливає на присутність у метаданих чарту --hide-secret приховати Kubernetes Secrets, якщо також використовується прапорець --dry-run --history-max int обмежити максимальну кількість ревізій, збережених для релізу. Використовуйте 0 для відсутності обмежень (стандартно 10) --insecure-skip-tls-verify пропустити перевірки сертифікатів TLS для завантаження чарту -i, --install якщо реліз з цим імʼям ще не існує, виконується установка --key-file string ідентифікувати HTTPS-клієнта, використовуючи цей файл SSL ключа --keyring string розташування публічних ключів, що використовуються для перевірки (стандартно "~/.gnupg/pubring.gpg") -l, --labels stringToString Мітки, які будуть додані до метаданих релізу. Мають бути розділені комою. Оригінальні мітки релізу будуть обʼєднані з мітками оновлення. Ви можете скинути мітку, використовуючи null. (стандартно []) --no-hooks вимкнути хуки перед/після оновлення -o, --output format друкує вивід у вказаному форматі. Дозволені значення: table, json, yaml (стандартно table) --pass-credentials передати облікові дані всім доменам --password string пароль репозиторію чарту для розташування запитуваного чарту --plain-http використовувати небезпечні HTTP зʼєднання для завантаження чарту --post-renderer postRendererString шлях до виконуваного файлу, що буде використано для пост-рендерингу. Якщо він існує в $PATH, буде використано двійковий файл, інакше буде спробовано знайти виконуваний файл за вказаним шляхом --post-renderer-args postRendererArgsSlice аргумент для пост-рендерера (можна вказати кілька) (стандартно []) --render-subchart-notes якщо встановлено, рендерити нотатки субчарту разом з батьківським чартом --repo string URL репозиторію чарту для розташування запитуваного чарту --reset-then-reuse-values при оновленні, скинути значення до вбудованих у чарт значень, застосувати значення останнього релізу та обʼєднати будь-які перекриття з командного рядка через --set і -f. Якщо вказано '--reset-values' або '--reuse-values', це буде проігноровано --reset-values при оновленні, скинути значення до вбудованих у чарт значень --reuse-values при оновленні, повторно використовувати значення останнього релізу та обʼєднати будь-які перекриття з командного рядка через --set і -f. Якщо вказано '--reset-values', це буде проігноровано --set stringArray встановити значення з командного рядка (можна вказати кілька або розділити значення комами: key1=val1,key2=val2) --set-file stringArray встановити значення з відповідних файлів, зазначених через командний рядок (можна вказати кілька або розділити значення комами: key1=path1,key2=path2) --set-json stringArray встановити JSON значення з командного рядка (можна вказати кілька або розділити значення комами: key1=jsonval1,key2=jsonval2) --set-literal stringArray встановити літеральне STRING значення з командного рядка --set-string stringArray встановити STRING значення з командного рядка (можна вказати кілька або розділити значення комами: key1=val1,key2=val2) --skip-crds якщо встановлено, CRD не будуть встановлені під час виконання оновлення з увімкненим прапорцем install. Стандартно, CRD встановлюються, якщо ще не присутні, під час виконання оновлення з увімкненим прапорцем install --skip-schema-validation якщо встановлено, вимикає перевірку схеми JSON --timeout duration час очікування для будь-якої окремої операції Kubernetes (наприклад, Jobs для хуків) (стандартно 5м0с) --username string імʼя користувача репозиторію чарту для розташування запитуваного чарту -f, --values strings вказати значення у YAML файлі або URL (можна вказати кілька) --verify перевірити пакет перед використанням --version string вказати обмеження версії для версії чарту, яку слід використовувати. Це обмеження може бути конкретною міткою (наприклад, 1.1.1) або може посилатися на дійсний діапазон (наприклад, ^2.0.0). Якщо не вказано, буде використана остання версія --wait якщо встановлено, чекатиме, поки всі Pods, PVC, Services і мінімальна кількість Pods Deployment, StatefulSet або ReplicaSet не перебуватимуть у стані готовності перед поміткою релізу як успішного. Буде чекати стільки, скільки вказано у --timeout --wait-for-jobs якщо встановлено і --wait увімкнено, чекатиме, поки всі Jobs не будуть завершені перед поміткою релізу як успішного. Це буде чекати стільки, скільки вказано у --timeout ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Verify Helm Verify =========== helm verify ----------- перевірити, що чарт за вказаним шляхом підписаний і є дійсним ### Опис Перевірте, чи має вказаний чарт дійсний файл автентичності. Файли автентичності забезпечують криптографічну перевірку того, що чарт не був зміненим і був упакований надійним постачальником. Цю команду можна використовувати для перевірки локального чарту. Декілька інших команд надають прапорці '--verify', які виконують ту ж саму валідацію. Щоб згенерувати підписаний пакет, використовуйте команду 'helm package --sign'. helm verify PATH [flags] ### Параметри -h, --help довідка verify --keyring string вєящка ключів, що містить публічні ключі (стандартно "~/.gnupg/pubring.gpg") ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Version Helm Version ============ helm version ------------ друкує інформацію про версію клієнта ### Опис Показує версію для Helm. Команда надрукує представлення версії Helm. Вивід виглядатиме приблизно так: version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"} * Version — семантична версія релізу. * GitCommit — SHA коміту, з якого була збудована ця версія. * GitTreeState — "clean", якщо при створенні цього бінарного файлу не було локальних змін у коді, і "dirty", якщо бінарний файл був збудований з локально зміненого коду. * GoVersion — версія Go, яка була використана для компіляції Helm. При використанні прапорця --template доступні такі властивості для використання в шаблоні: * .Version містить семантичну версію Helm * .GitCommit — git коміт * .GitTreeState — стан git дерева, коли був збудований Helm * .GoVersion містить версію Go, з якою був зібраний Helm Наприклад, --template='Version: {{.Version}}' надрукує 'Version: v3.2.1'. helm version [flags] ### Параметри -h, --help довідка version --short надрукувати номер версії --template string шаблон для формату рядка версії ### Параметри, успадковані від батьківських команд --burst-limit int стандартні обмеження на стороні клієнта (стандартно 100) --debug увімкнути розширений вивід --kube-apiserver string адреса та порт сервера API Kubernetes --kube-as-group stringArray група для імперсонації під час операції, цей прапор може бути повторений для вказання кількох груп. --kube-as-user string імʼя користувача для імперсонації під час операції --kube-ca-file string файл центру сертифікаці СА для підключення до сервера API Kubernetes --kube-context string імʼя контексту kubeconfig для використання --kube-insecure-skip-tls-verify якщо встановлено true, сертифікат сервера API Kubernetes не буде перевірятися на дійсність. Це робить ваші HTTPS-зʼєднання небезпечними --kube-tls-server-name string імʼя сервера для перевірки сертифіката сервера API Kubernetes. Якщо не вказано, використовується імʼя хоста, що використовується для підключення до сервера --kube-token string токен на предʼявника, який використовується для автентифікації --kubeconfig string шлях до файлу kubeconfig -n, --namespace string простір імен для цього запиту --qps float32 кількість запитів в секунду під час взаємодії з API Kubernetes, не включаючи сплески --registry-config string шлях до файлу конфігурації реєстру (стандартно "~/.config/helm/registry/config.json") --repository-cache string шлях до теки, що містить кешовані індекси репозиторіїв (стандартно "~/.cache/helm/repository") --repository-config string шлях до файлу, що містить імена та URL репозиторіїв (стандартно "~/.config/helm/repositories.yaml") ### ДИВІТЬСЯ ТАКОЖ * [helm](https://helm.sh/uk/docs/helm/helm/)  — менеджер пакетів Helm для Kubernetes. ###### Автоматично згенеровано spf13/cobra 11 вересня 2024 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Ласкаво просимо =============== Ласкаво просимо до документації [Helm](https://helm.sh/uk/) . Helm — це менеджер пакунків для Kubernetes, і ви можете прочитати детальну довідкову інформацію у [звіті CNCF Helm Project Journey](https://www.cncf.io/cncf-helm-project-journey/) . Як організована документація ============================ Helm має багато документації. Загальний огляд того, як все організовано допоможе вам зрозуміти, де шукати певні речі: * [Підручники](https://helm.sh/uk/docs/chart_template_guide/getting_started/) проведуть вас через низку кроків для створення вашого першого чарту Helm. Почніть тут, якщо ви новачок у Helm. * [Тематичні посібники](https://helm.sh/uk/docs/topics/) обговорюють ключові теми та концепції на досить високому рівні та надають корисну довідкову інформацію та пояснення. * [Настанови для спільноти](https://helm.sh/uk/docs/community/) обговорюють теми, повʼязані зі спільнотою Helm. Почніть тут, якщо ви хочете дізнатися більше про процес розробки Helm і про те, як ви можете до нього долучитися. * [Посібники](https://helm.sh/uk/docs/howto/)  — це рецепти. Вони проведуть вас через кроки, повʼязані з розвʼязанням ключових проблем та варіантів використання. Вони більш докладні, ніж підручників і передбачають певні знання про те, як працює Helm. ### Quicklinks [#### Quickstart Guide\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/docs/intro/quickstart) [#### Chart Guide\ \ Practical steps for building Helm charts—how to structure, sign, and sync your charts.](https://helm.sh/docs/topics/charts) [#### Video: Intro to Helm\ \ Watch Matt Farina and Josh Dolitsky present an introduction to Helm at KubeCon 2019.](https://www.youtube.com/watch?v=Zzwq9FmZdsU) [#### Migrating from v2 to v3\ \ Read our blog post on how to migrate from Helm v2 to Helm v3.](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) [#### Helm Security Audit\ \ Helm has been audited and deemed as recommended for public deployment during a third-party security audit funded by the CNCF.](https://helm.sh/blog/2019-11-04-helm-security-audit-results/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [Ми є дипломованим проєктом Cloud Native Computing Foundation.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Changes Since Helm 2 Changes Since Helm 2 ==================== Changes since Helm 2 -------------------- Here's an exhaustive list of all the major changes introduced in Helm 3. ### Removal of Tiller During the Helm 2 development cycle, we introduced Tiller. Tiller played an important role for teams working on a shared cluster - it made it possible for multiple different operators to interact with the same set of releases. With role-based access controls (RBAC) enabled by default in Kubernetes 1.6, locking down Tiller for use in a production scenario became more difficult to manage. Due to the vast number of possible security policies, our stance was to provide a permissive default configuration. This allowed first-time users to start experimenting with Helm and Kubernetes without having to dive headfirst into the security controls. Unfortunately, this permissive configuration could grant a user a broad range of permissions they weren’t intended to have. DevOps and SREs had to learn additional operational steps when installing Tiller into a multi-tenant cluster. After hearing how community members were using Helm in certain scenarios, we found that Tiller’s release management system did not need to rely upon an in-cluster operator to maintain state or act as a central hub for Helm release information. Instead, we could simply fetch information from the Kubernetes API server, render the Charts client-side, and store a record of the installation in Kubernetes. Tiller’s primary goal could be accomplished without Tiller, so one of the first decisions we made regarding Helm 3 was to completely remove Tiller. With Tiller gone, the security model for Helm is radically simplified. Helm 3 now supports all the modern security, identity, and authorization features of modern Kubernetes. Helm’s permissions are evaluated using your [kubeconfig file](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) . Cluster administrators can restrict user permissions at whatever granularity they see fit. Releases are still recorded in-cluster, and the rest of Helm’s functionality remains. ### Improved Upgrade Strategy: 3-way Strategic Merge Patches Helm 2 used a two-way strategic merge patch. During an upgrade, it compared the most recent chart's manifest against the proposed chart's manifest (the one supplied during `helm upgrade`). It compared the differences between these two charts to determine what changes needed to be applied to the resources in Kubernetes. If changes were applied to the cluster out-of-band (such as during a `kubectl edit`), those changes were not considered. This resulted in resources being unable to roll back to its previous state: because Helm only considered the last applied chart's manifest as its current state, if there were no changes in the chart's state, the live state was left unchanged. In Helm 3, we now use a three-way strategic merge patch. Helm considers the old manifest, its live state, and the new manifest when generating a patch. #### Examples Let's go through a few common examples what this change impacts. ##### Rolling back where live state has changed Your team just deployed their application to production on Kubernetes using Helm. The chart contains a Deployment object where the number of replicas is set to three: $ helm install myapp ./myapp A new developer joins the team. On their first day while observing the production cluster, a horrible coffee-spilling-on-the-keyboard accident happens and they `kubectl scale` the production deployment from three replicas down to zero. $ kubectl scale --replicas=0 deployment/myapp Another developer on your team notices that the production site is down and decides to rollback the release to its previous state: $ helm rollback myapp What happens? In Helm 2, it would generate a patch, comparing the old manifest against the new manifest. Because this is a rollback, it's the same manifest. Helm would determine that there is nothing to change because there is no difference between the old manifest and the new manifest. The replica count continues to stay at zero. Panic ensues. In Helm 3, the patch is generated using the old manifest, the live state, and the new manifest. Helm recognizes that the old state was at three, the live state is at zero and the new manifest wishes to change it back to three, so it generates a patch to change the state back to three. ##### Upgrades where live state has changed Many service meshes and other controller-based applications inject data into Kubernetes objects. This can be something like a sidecar, labels, or other information. Previously if you had the given manifest rendered from a Chart: containers: - name: server image: nginx:2.0.0 And the live state was modified by another application to containers: - name: server image: nginx:2.0.0 - name: my-injected-sidecar image: my-cool-mesh:1.0.0 Now, you want to upgrade the `nginx` image tag to `2.1.0`. So, you upgrade to a chart with the given manifest: containers: - name: server image: nginx:2.1.0 What happens? In Helm 2, Helm generates a patch of the `containers` object between the old manifest and the new manifest. The cluster's live state is not considered during the patch generation. The cluster's live state is modified to look like the following: containers: - name: server image: nginx:2.1.0 The sidecar pod is removed from live state. More panic ensues. In Helm 3, Helm generates a patch of the `containers` object between the old manifest, the live state, and the new manifest. It notices that the new manifest changes the image tag to `2.1.0`, but live state contains a sidecar container. The cluster's live state is modified to look like the following: containers: - name: server image: nginx:2.1.0 - name: my-injected-sidecar image: my-cool-mesh:1.0.0 ### Release Names are now scoped to the Namespace With the removal of Tiller, the information about each release had to go somewhere. In Helm 2, this was stored in the same namespace as Tiller. In practice, this meant that once a name was used by a release, no other release could use that same name, even if it was deployed in a different namespace. In Helm 3, information about a particular release is now stored in the same namespace as the release itself. This means that users can now `helm install wordpress stable/wordpress` in two separate namespaces, and each can be referred with `helm list` by changing the current namespace context (e.g. `helm list --namespace foo`). With this greater alignment to native cluster namespaces, the `helm list` command no longer lists all releases by default. Instead, it will list only the releases in the namespace of your current kubernetes context (i.e. the namespace shown when you run `kubectl config view --minify`). It also means you must supply the `--all-namespaces` flag to `helm list` to get behaviour similar to Helm 2. ### Secrets as the default storage driver In Helm 3, Secrets are now used as the [default storage driver](https://helm.sh/docs/topics/advanced/#storage-backends) . Helm 2 used ConfigMaps by default to store release information. In Helm 2.7.0, a new storage backend that uses Secrets for storing release information was implemented, and it is now the default starting in Helm 3. Changing to Secrets as the Helm 3 default allows for additional security in protecting charts in conjunction with the release of Secret encryption in Kubernetes. [Encrypting secrets at rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) became available as an alpha feature in Kubernetes 1.7 and became stable as of Kubernetes 1.13. This allows users to encrypt Helm release metadata at rest, and so it is a good starting point that can be expanded later into using something like Vault. ### Go import path changes In Helm 3, Helm switched the Go import path over from `k8s.io/helm` to `helm.sh/helm/v3`. If you intend to upgrade to the Helm 3 Go client libraries, make sure to change your import paths. ### Capabilities The `.Capabilities` built-in object available during the rendering stage has been simplified. [Built-in Objects](https://helm.sh/docs/chart_template_guide/builtin_objects/) ### Validating Chart Values with JSONSchema A JSON Schema can now be imposed upon chart values. This ensures that values provided by the user follow the schema laid out by the chart maintainer, providing better error reporting when the user provides an incorrect set of values for a chart. Validation occurs when any of the following commands are invoked: * `helm install` * `helm upgrade` * `helm template` * `helm lint` See the documentation on [Schema files](https://helm.sh/docs/topics/charts/#schema-files) for more information. ### Consolidation of `requirements.yaml` into `Chart.yaml` The Chart dependency management system moved from requirements.yaml and requirements.lock to Chart.yaml and Chart.lock. We recommend that new charts meant for Helm 3 use the new format. However, Helm 3 still understands Chart API version 1 (`v1`) and will load existing `requirements.yaml` files In Helm 2, this is how a `requirements.yaml` looked: dependencies: - name: mariadb version: 5.x.x repository: https://charts.helm.sh/stable condition: mariadb.enabled tags: - database In Helm 3, the dependency is expressed the same way, but now from your `Chart.yaml`: dependencies: - name: mariadb version: 5.x.x repository: https://charts.helm.sh/stable condition: mariadb.enabled tags: - database Charts are still downloaded and placed in the `charts/` directory, so subcharts vendored into the `charts/` directory will continue to work without modification. ### Name (or --generate-name) is now required on install In Helm 2, if no name was provided, an auto-generated name would be given. In production, this proved to be more of a nuisance than a helpful feature. In Helm 3, Helm will throw an error if no name is provided with `helm install`. For those who still wish to have a name auto-generated for you, you can use the `--generate-name` flag to create one for you. ### Pushing Charts to OCI Registries This is an experimental feature introduced in Helm 3. To use, set the environment variable `HELM_EXPERIMENTAL_OCI=1`. At a high level, a Chart Repository is a location where Charts can be stored and shared. The Helm client packs and ships Helm Charts to a Chart Repository. Simply put, a Chart Repository is a basic HTTP server that houses an index.yaml file and some packaged charts. While there are several benefits to the Chart Repository API meeting the most basic storage requirements, a few drawbacks have started to show: * Chart Repositories have a very hard time abstracting most of the security implementations required in a production environment. Having a standard API for authentication and authorization is very important in production scenarios. * Helm’s Chart provenance tools used for signing and verifying the integrity and origin of a chart are an optional piece of the Chart publishing process. * In multi-tenant scenarios, the same Chart can be uploaded by another tenant, costing twice the storage cost to store the same content. Smarter chart repositories have been designed to handle this, but it’s not a part of the formal specification. * Using a single index file for search, metadata information, and fetching Charts has made it difficult or clunky to design around in secure multi-tenant implementations. Docker’s Distribution project (also known as Docker Registry v2) is the successor to the Docker Registry project. Many major cloud vendors have a product offering of the Distribution project, and with so many vendors offering the same product, the Distribution project has benefited from many years of hardening, security best practices, and battle-testing. Please have a look at `helm help chart` and `helm help registry` for more information on how to package a chart and push it to a Docker registry. For more info, please see [this page](https://helm.sh/docs/topics/registries/) . ### Removal of `helm serve` `helm serve` ran a local Chart Repository on your machine for development purposes. However, it didn't receive much uptake as a development tool and had numerous issues with its design. In the end, we decided to remove it and split it out as a plugin. For a similar experience to `helm serve`, have a look at the local filesystem storage option in [ChartMuseum](https://chartmuseum.com/docs/#using-with-local-filesystem-storage) and the [servecm plugin](https://github.com/jdolitsky/helm-servecm) . ### Library chart support Helm 3 supports a class of chart called a “library chart”. This is a chart that is shared by other charts, but does not create any release artifacts of its own. A library chart’s templates can only declare `define` elements. Globally scoped non-`define` content is simply ignored. This allows users to re-use and share snippets of code that can be re-used across many charts, avoiding redundancy and keeping charts [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) . Library charts are declared in the dependencies directive in Chart.yaml, and are installed and managed like any other chart. dependencies: - name: mylib version: 1.x.x repository: quay.io We’re very excited to see the use cases this feature opens up for chart developers, as well as any best practices that arise from consuming library charts. ### Chart.yaml apiVersion bump With the introduction of library chart support and the consolidation of requirements.yaml into Chart.yaml, clients that understood Helm 2's package format won't understand these new features. So, we bumped the apiVersion in Chart.yaml from `v1` to `v2`. `helm create` now creates charts using this new format, so the default apiVersion was bumped there as well. Clients wishing to support both versions of Helm charts should inspect the `apiVersion` field in Chart.yaml to understand how to parse the package format. ### XDG Base Directory Support [The XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) is a portable standard defining where configuration, data, and cached files should be stored on the filesystem. In Helm 2, Helm stored all this information in `~/.helm` (affectionately known as `helm home`), which could be changed by setting the `$HELM_HOME` environment variable, or by using the global flag `--home`. In Helm 3, Helm now respects the following environment variables as per the XDG Base Directory Specification: * `$XDG_CACHE_HOME` * `$XDG_CONFIG_HOME` * `$XDG_DATA_HOME` Helm plugins are still passed `$HELM_HOME` as an alias to `$XDG_DATA_HOME` for backwards compatibility with plugins looking to use `$HELM_HOME` as a scratchpad environment. Several new environment variables are also passed in to the plugin's environment to accommodate this change: * `$HELM_PATH_CACHE` for the cache path * `$HELM_PATH_CONFIG` for the config path * `$HELM_PATH_DATA` for the data path Helm plugins looking to support Helm 3 should consider using these new environment variables instead. ### CLI Command Renames In order to better align the verbiage from other package managers, `helm delete` was re-named to `helm uninstall`. `helm delete` is still retained as an alias to `helm uninstall`, so either form can be used. In Helm 2, in order to purge the release ledger, the `--purge` flag had to be provided. This functionality is now enabled by default. To retain the previous behavior, use `helm uninstall --keep-history`. Additionally, several other commands were re-named to accommodate the same conventions: * `helm inspect` -> `helm show` * `helm fetch` -> `helm pull` These commands have also retained their older verbs as aliases, so you can continue to use them in either form. ### Automatically creating namespaces When creating a release in a namespace that does not exist, Helm 2 created the namespace. Helm 3 follows the behavior of other Kubernetes tooling and returns an error if the namespace does not exist. Helm 3 will create the namespace if you explicitly specify `--create-namespace` flag. ### What happened to .Chart.ApiVersion? Helm follows the typical convention for CamelCasing which is to capitalize an acronym. We have done this elsewhere in the code, such as with `.Capabilities.APIVersions.Has`. In Helm v3, we corrected `.Chart.ApiVersion` to follow this pattern, renaming it to `.Chart.APIVersion`. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Chart Development Tips and Tricks Chart Development Tips and Tricks ================================= This guide covers some of the tips and tricks Helm chart developers have learned while building production-quality charts. Know Your Template Functions ---------------------------- Helm uses [Go templates](https://godoc.org/text/template) for templating your resource files. While Go ships several built-in functions, we have added many others. First, we added all of the functions in the [Sprig library](https://masterminds.github.io/sprig/) , except `env` and `expandenv`, for security reasons. We also added two special template functions: `include` and `required`. The `include` function allows you to bring in another template, and then pass the results to other template functions. For example, this template snippet includes a template called `mytpl`, then lowercases the result, then wraps that in double quotes. value: {{ include "mytpl" . | lower | quote }} The `required` function allows you to declare a particular values entry as required for template rendering. If the value is empty, the template rendering will fail with a user submitted error message. The following example of the `required` function declares an entry for `.Values.who` is required, and will print an error message when that entry is missing: value: {{ required "A valid .Values.who entry required!" .Values.who }} Quote Strings, Don't Quote Integers ----------------------------------- When you are working with string data, you are always safer quoting the strings than leaving them as bare words: name: {{ .Values.MyName | quote }} But when working with integers _do not quote the values._ That can, in many cases, cause parsing errors inside of Kubernetes. port: {{ .Values.Port }} This remark does not apply to env variables values which are expected to be string, even if they represent integers: env: - name: HOST value: "http://host" - name: PORT value: "1234" Using the 'include' Function ---------------------------- Go provides a way of including one template in another using a built-in `template` directive. However, the built-in function cannot be used in Go template pipelines. To make it possible to include a template, and then perform an operation on that template's output, Helm has a special `include` function: {{ include "toYaml" $value | indent 2 }} The above includes a template called `toYaml`, passes it `$value`, and then passes the output of that template to the `indent` function. Because YAML ascribes significance to indentation levels and whitespace, this is one great way to include snippets of code, but handle indentation in a relevant context. Using the 'required' function ----------------------------- Go provides a way for setting template options to control behavior when a map is indexed with a key that's not present in the map. This is typically set with `template.Options("missingkey=option")`, where `option` can be `default`, `zero`, or `error`. While setting this option to error will stop execution with an error, this would apply to every missing key in the map. There may be situations where a chart developer wants to enforce this behavior for select values in the `values.yaml` file. The `required` function gives developers the ability to declare a value entry as required for template rendering. If the entry is empty in `values.yaml`, the template will not render and will return an error message supplied by the developer. For example: {{ required "A valid foo is required!" .Values.foo }} The above will render the template when `.Values.foo` is defined, but will fail to render and exit when `.Values.foo` is undefined. Using the 'tpl' Function ------------------------ The `tpl` function allows developers to evaluate strings as templates inside a template. This is useful to pass a template string as a value to a chart or render external configuration files. Syntax: `{{ tpl TEMPLATE_STRING VALUES }}` Examples: # values template: "{{ .Values.name }}" name: "Tom" # template {{ tpl .Values.template . }} # output Tom Rendering an external configuration file: # external configuration file conf/app.conf firstName={{ .Values.firstName }} lastName={{ .Values.lastName }} # values firstName: Peter lastName: Parker # template {{ tpl (.Files.Get "conf/app.conf") . }} # output firstName=Peter lastName=Parker Creating Image Pull Secrets --------------------------- Image pull secrets are essentially a combination of _registry_, _username_, and _password_. You may need them in an application you are deploying, but to create them requires running `base64` a couple of times. We can write a helper template to compose the Docker configuration file for use as the Secret's payload. Here is an example: First, assume that the credentials are defined in the `values.yaml` file like so: imageCredentials: registry: quay.io username: someone password: sillyness email: someone@host.com We then define our helper template as follows: {{- define "imagePullSecret" }} {{- with .Values.imageCredentials }} {{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" .registry .username .password .email (printf "%s:%s" .username .password | b64enc) | b64enc }} {{- end }} {{- end }} Finally, we use the helper template in a larger template to create the Secret manifest: apiVersion: v1 kind: Secret metadata: name: myregistrykey type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: {{ template "imagePullSecret" . }} Automatically Roll Deployments ------------------------------ Often times ConfigMaps or Secrets are injected as configuration files in containers or there are other external dependency changes that require rolling pods. Depending on the application a restart may be required should those be updated with a subsequent `helm upgrade`, but if the deployment spec itself didn't change the application keeps running with the old configuration resulting in an inconsistent deployment. The `sha256sum` function can be used to ensure a deployment's annotation section is updated if another file changes: kind: Deployment spec: template: metadata: annotations: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} [...] NOTE: If you're adding this to a library chart you won't be able to access your file in `$.Template.BasePath`. Instead you can reference your definition with `{{ include ("mylibchart.configmap") . | sha256sum }}`. In the event you always want to roll your deployment, you can use a similar annotation step as above, instead replacing with a random string so it always changes and causes the deployment to roll: kind: Deployment spec: template: metadata: annotations: rollme: {{ randAlphaNum 5 | quote }} [...] Each invocation of the template function will generate a unique random string. This means that if it's necessary to sync the random strings used by multiple resources, all relevant resources will need to be in the same template file. Both of these methods allow your Deployment to leverage the built in update strategy logic to avoid taking downtime. NOTE: In the past we recommended using the `--recreate-pods` flag as another option. This flag has been marked as deprecated in Helm 3 in favor of the more declarative method above. Tell Helm Not To Uninstall a Resource ------------------------------------- Sometimes there are resources that should not be uninstalled when Helm runs a `helm uninstall`. Chart developers can add an annotation to a resource to prevent it from being uninstalled. kind: Secret metadata: annotations: helm.sh/resource-policy: keep [...] The annotation `helm.sh/resource-policy: keep` instructs Helm to skip deleting this resource when a helm operation (such as `helm uninstall`, `helm upgrade` or `helm rollback`) would result in its deletion. _However_, this resource becomes orphaned. Helm will no longer manage it in any way. This can lead to problems if using `helm install --replace` on a release that has already been uninstalled, but has kept resources. Using "Partials" and Template Includes -------------------------------------- Sometimes you want to create some reusable parts in your chart, whether they're blocks or template partials. And often, it's cleaner to keep these in their own files. In the `templates/` directory, any file that begins with an underscore(`_`) is not expected to output a Kubernetes manifest file. So by convention, helper templates and partials are placed in a `_helpers.tpl` file. Complex Charts with Many Dependencies ------------------------------------- Many of the charts in the CNCF [Artifact Hub](https://artifacthub.io/packages/search?kind=0) are "building blocks" for creating more advanced applications. But charts may be used to create instances of large-scale applications. In such cases, a single umbrella chart may have multiple subcharts, each of which functions as a piece of the whole. The current best practice for composing a complex application from discrete parts is to create a top-level umbrella chart that exposes the global configurations, and then use the `charts/` subdirectory to embed each of the components. YAML is a Superset of JSON -------------------------- According to the YAML specification, YAML is a superset of JSON. That means that any valid JSON structure ought to be valid in YAML. This has an advantage: Sometimes template developers may find it easier to express a datastructure with a JSON-like syntax rather than deal with YAML's whitespace sensitivity. As a best practice, templates should follow a YAML-like syntax _unless_ the JSON syntax substantially reduces the risk of a formatting issue. Be Careful with Generating Random Values ---------------------------------------- There are functions in Helm that allow you to generate random data, cryptographic keys, and so on. These are fine to use. But be aware that during upgrades, templates are re-executed. When a template run generates data that differs from the last run, that will trigger an update of that resource. Install or Upgrade a Release with One Command --------------------------------------------- Helm provides a way to perform an install-or-upgrade as a single command. Use `helm upgrade` with the `--install` command. This will cause Helm to see if the release is already installed. If not, it will run an install. If it is, then the existing release will be upgraded. $ helm upgrade --install --values [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Charts Charts ====== Helm uses a packaging format called _charts_. A chart is a collection of files that describe a related set of Kubernetes resources. A single chart might be used to deploy something simple, like a memcached pod, or something complex, like a full web app stack with HTTP servers, databases, caches, and so on. Charts are created as files laid out in a particular directory tree. They can be packaged into versioned archives to be deployed. If you want to download and look at the files for a published chart, without installing it, you can do so with `helm pull chartrepo/chartname`. This document explains the chart format, and provides basic guidance for building charts with Helm. The Chart File Structure ------------------------ A chart is organized as a collection of files inside of a directory. The directory name is the name of the chart (without versioning information). Thus, a chart describing WordPress would be stored in a `wordpress/` directory. Inside of this directory, Helm will expect a structure that matches this: wordpress/ Chart.yaml # A YAML file containing information about the chart LICENSE # OPTIONAL: A plain text file containing the license for the chart README.md # OPTIONAL: A human-readable README file values.yaml # The default configuration values for this chart values.schema.json # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file charts/ # A directory containing any charts upon which this chart depends. crds/ # Custom Resource Definitions templates/ # A directory of templates that, when combined with values, # will generate valid Kubernetes manifest files. templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes Helm reserves use of the `charts/`, `crds/`, and `templates/` directories, and of the listed file names. Other files will be left as they are. The Chart.yaml File ------------------- The `Chart.yaml` file is required for a chart. It contains the following fields: apiVersion: The chart API version (required) name: The name of the chart (required) version: A SemVer 2 version (required) kubeVersion: A SemVer range of compatible Kubernetes versions (optional) description: A single-sentence description of this project (optional) type: The type of the chart (optional) keywords: - A list of keywords about this project (optional) home: The URL of this projects home page (optional) sources: - A list of URLs to source code for this project (optional) dependencies: # A list of the chart requirements (optional) - name: The name of the chart (nginx) version: The version of the chart ("1.2.3") repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name") condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled ) tags: # (optional) - Tags can be used to group charts for enabling/disabling together import-values: # (optional) - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items. alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times maintainers: # (optional) - name: The maintainers name (required for each maintainer) email: The maintainers email (optional for each maintainer) url: A URL for the maintainer (optional for each maintainer) icon: A URL to an SVG or PNG image to be used as an icon (optional). appVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended. deprecated: Whether this chart is deprecated (optional, boolean) annotations: example: A list of annotations keyed by name (optional). As of [v3.3.2](https://github.com/helm/helm/releases/tag/v3.3.2) , additional fields are not allowed. The recommended approach is to add custom metadata in `annotations`. ### Charts and Versioning Every chart must have a version number. A version must follow the [SemVer 2](https://semver.org/spec/v2.0.0.html) standard. Unlike Helm Classic, Helm v2 and later uses version numbers as release markers. Packages in repositories are identified by name plus version. For example, an `nginx` chart whose version field is set to `version: 1.2.3` will be named: nginx-1.2.3.tgz More complex SemVer 2 names are also supported, such as `version: 1.2.3-alpha.1+ef365`. But non-SemVer names are explicitly disallowed by the system. **NOTE:** Whereas Helm Classic and Deployment Manager were both very GitHub oriented when it came to charts, Helm v2 and later does not rely upon or require GitHub or even Git. Consequently, it does not use Git SHAs for versioning at all. The `version` field inside of the `Chart.yaml` is used by many of the Helm tools, including the CLI. When generating a package, the `helm package` command will use the version that it finds in the `Chart.yaml` as a token in the package name. The system assumes that the version number in the chart package name matches the version number in the `Chart.yaml`. Failure to meet this assumption will cause an error. ### The `apiVersion` Field The `apiVersion` field should be `v2` for Helm charts that require at least Helm 3. Charts supporting previous Helm versions have an `apiVersion` set to `v1` and are still installable by Helm 3. Changes from `v1` to `v2`: * A `dependencies` field defining chart dependencies, which were located in a separate `requirements.yaml` file for `v1` charts (see [Chart Dependencies](https://helm.sh/docs/topics/charts/#chart-dependencies) ). * The `type` field, discriminating application and library charts (see [Chart Types](https://helm.sh/docs/topics/charts/#chart-types) ). ### The `appVersion` Field Note that the `appVersion` field is not related to the `version` field. It is a way of specifying the version of the application. For example, the `drupal` chart may have an `appVersion: "8.2.1"`, indicating that the version of Drupal included in the chart (by default) is `8.2.1`. This field is informational, and has no impact on chart version calculations. Wrapping the version in quotes is highly recommended. It forces the YAML parser to treat the version number as a string. Leaving it unquoted can lead to parsing issues in some cases. For example, YAML interprets `1.0` as a floating point value, and a git commit SHA like `1234e10` as scientific notation. As of Helm v3.5.0, `helm create` wraps the default `appVersion` field in quotes. ### The `kubeVersion` Field The optional `kubeVersion` field can define semver constraints on supported Kubernetes versions. Helm will validate the version constraints when installing the chart and fail if the cluster runs an unsupported Kubernetes version. Version constraints may comprise space separated AND comparisons such as >= 1.13.0 < 1.15.0 which themselves can be combined with the OR `||` operator like in the following example >= 1.13.0 < 1.14.0 || >= 1.14.1 < 1.15.0 In this example the version `1.14.0` is excluded, which can make sense if a bug in certain versions is known to prevent the chart from running properly. Apart from version constrains employing operators `=` `!=` `>` `<` `>=` `<=` the following shorthand notations are supported * hyphen ranges for closed intervals, where `1.1 - 2.3.4` is equivalent to `>= 1.1 <= 2.3.4`. * wildcards `x`, `X` and `*`, where `1.2.x` is equivalent to `>= 1.2.0 < 1.3.0`. * tilde ranges (patch version changes allowed), where `~1.2.3` is equivalent to `>= 1.2.3 < 1.3.0`. * caret ranges (minor version changes allowed), where `^1.2.3` is equivalent to `>= 1.2.3 < 2.0.0`. For a detailed explanation of supported semver constraints see [Masterminds/semver](https://github.com/Masterminds/semver) . ### Deprecating Charts When managing charts in a Chart Repository, it is sometimes necessary to deprecate a chart. The optional `deprecated` field in `Chart.yaml` can be used to mark a chart as deprecated. If the **latest** version of a chart in the repository is marked as deprecated, then the chart as a whole is considered to be deprecated. The chart name can be later reused by publishing a newer version that is not marked as deprecated. The workflow for deprecating charts is: 1. Update chart's `Chart.yaml` to mark the chart as deprecated, bumping the version 2. Release the new chart version in the Chart Repository 3. Remove the chart from the source repository (e.g. git) ### Chart Types The `type` field defines the type of chart. There are two types: `application` and `library`. Application is the default type and it is the standard chart which can be operated on fully. The [library chart](https://helm.sh/docs/topics/library_charts/) provides utilities or functions for the chart builder. A library chart differs from an application chart because it is not installable and usually doesn't contain any resource objects. **Note:** An application chart can be used as a library chart. This is enabled by setting the type to `library`. The chart will then be rendered as a library chart where all utilities and functions can be leveraged. All resource objects of the chart will not be rendered. Chart LICENSE, README and NOTES ------------------------------- Charts can also contain files that describe the installation, configuration, usage and license of a chart. A LICENSE is a plain text file containing the [license](https://en.wikipedia.org/wiki/Software_license) for the chart. The chart can contain a license as it may have programming logic in the templates and would therefore not be configuration only. There can also be separate license(s) for the application installed by the chart, if required. A README for a chart should be formatted in Markdown (README.md), and should generally contain: * A description of the application or service the chart provides * Any prerequisites or requirements to run the chart * Descriptions of options in `values.yaml` and default values * Any other information that may be relevant to the installation or configuration of the chart When hubs and other user interfaces display details about a chart that detail is pulled from the content in the `README.md` file. The chart can also contain a short plain text `templates/NOTES.txt` file that will be printed out after installation, and when viewing the status of a release. This file is evaluated as a [template](https://helm.sh/docs/topics/charts/#templates-and-values) , and can be used to display usage notes, next steps, or any other information relevant to a release of the chart. For example, instructions could be provided for connecting to a database, or accessing a web UI. Since this file is printed to STDOUT when running `helm install` or `helm status`, it is recommended to keep the content brief and point to the README for greater detail. Chart Dependencies ------------------ In Helm, one chart may depend on any number of other charts. These dependencies can be dynamically linked using the `dependencies` field in `Chart.yaml` or brought in to the `charts/` directory and managed manually. ### Managing Dependencies with the `dependencies` field The charts required by the current chart are defined as a list in the `dependencies` field. dependencies: - name: apache version: 1.2.3 repository: https://example.com/charts - name: mysql version: 3.2.1 repository: https://another.example.com/charts * The `name` field is the name of the chart you want. * The `version` field is the version of the chart you want. * The `repository` field is the full URL to the chart repository. Note that you must also use `helm repo add` to add that repo locally. * You might use the name of the repo instead of URL $ helm repo add fantastic-charts https://charts.helm.sh/incubator dependencies: - name: awesomeness version: 1.0.0 repository: "@fantastic-charts" Once you have defined dependencies, you can run `helm dependency update` and it will use your dependency file to download all the specified charts into your `charts/` directory for you. $ helm dep up foochart Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "local" chart repository ...Successfully got an update from the "stable" chart repository ...Successfully got an update from the "example" chart repository ...Successfully got an update from the "another" chart repository Update Complete. Happy Helming! Saving 2 charts Downloading apache from repo https://example.com/charts Downloading mysql from repo https://another.example.com/charts When `helm dependency update` retrieves charts, it will store them as chart archives in the `charts/` directory. So for the example above, one would expect to see the following files in the charts directory: charts/ apache-1.2.3.tgz mysql-3.2.1.tgz #### Alias field in dependencies In addition to the other fields above, each requirements entry may contain the optional field `alias`. Adding an alias for a dependency chart would put a chart in dependencies using alias as name of new dependency. One can use `alias` in cases where they need to access a chart with other name(s). # parentchart/Chart.yaml dependencies: - name: subchart repository: http://localhost:10191 version: 0.1.0 alias: new-subchart-1 - name: subchart repository: http://localhost:10191 version: 0.1.0 alias: new-subchart-2 - name: subchart repository: http://localhost:10191 version: 0.1.0 In the above example we will get 3 dependencies in all for `parentchart`: subchart new-subchart-1 new-subchart-2 The manual way of achieving this is by copy/pasting the same chart in the `charts/` directory multiple times with different names. #### Tags and Condition fields in dependencies In addition to the other fields above, each requirements entry may contain the optional fields `tags` and `condition`. All charts are loaded by default. If `tags` or `condition` fields are present, they will be evaluated and used to control loading for the chart(s) they are applied to. Condition - The condition field holds one or more YAML paths (delimited by commas). If this path exists in the top parent's values and resolves to a boolean value, the chart will be enabled or disabled based on that boolean value. Only the first valid path found in the list is evaluated and if no paths exist then the condition has no effect. Tags - The tags field is a YAML list of labels to associate with this chart. In the top parent's values, all charts with tags can be enabled or disabled by specifying the tag and a boolean value. # parentchart/Chart.yaml dependencies: - name: subchart1 repository: http://localhost:10191 version: 0.1.0 condition: subchart1.enabled,global.subchart1.enabled tags: - front-end - subchart1 - name: subchart2 repository: http://localhost:10191 version: 0.1.0 condition: subchart2.enabled,global.subchart2.enabled tags: - back-end - subchart2 # parentchart/values.yaml subchart1: enabled: true tags: front-end: false back-end: true In the above example all charts with the tag `front-end` would be disabled but since the `subchart1.enabled` path evaluates to 'true' in the parent's values, the condition will override the `front-end` tag and `subchart1` will be enabled. Since `subchart2` is tagged with `back-end` and that tag evaluates to `true`, `subchart2` will be enabled. Also note that although `subchart2` has a condition specified, there is no corresponding path and value in the parent's values so that condition has no effect. ##### Using the CLI with Tags and Conditions The `--set` parameter can be used as usual to alter tag and condition values. helm install --set tags.front-end=true --set subchart2.enabled=false ##### Tags and Condition Resolution * **Conditions (when set in values) always override tags.** The first condition path that exists wins and subsequent ones for that chart are ignored. * Tags are evaluated as 'if any of the chart's tags are true then enable the chart'. * Tags and conditions values must be set in the top parent's values. * The `tags:` key in values must be a top level key. Globals and nested `tags:` tables are not currently supported. #### Importing Child Values via dependencies In some cases it is desirable to allow a child chart's values to propagate to the parent chart and be shared as common defaults. An additional benefit of using the `exports` format is that it will enable future tooling to introspect user-settable values. The keys containing the values to be imported can be specified in the parent chart's `dependencies` in the field `import-values` using a YAML list. Each item in the list is a key which is imported from the child chart's `exports` field. To import values not contained in the `exports` key, use the [child-parent](https://helm.sh/docs/topics/charts/#using-the-child-parent-format) format. Examples of both formats are described below. ##### Using the exports format If a child chart's `values.yaml` file contains an `exports` field at the root, its contents may be imported directly into the parent's values by specifying the keys to import as in the example below: # parent's Chart.yaml file dependencies: - name: subchart repository: http://localhost:10191 version: 0.1.0 import-values: - data # child's values.yaml file exports: data: myint: 99 Since we are specifying the key `data` in our import list, Helm looks in the `exports` field of the child chart for `data` key and imports its contents. The final parent values would contain our exported field: # parent's values myint: 99 Please note the parent key `data` is not contained in the parent's final values. If you need to specify the parent key, use the 'child-parent' format. ##### Using the child-parent format To access values that are not contained in the `exports` key of the child chart's values, you will need to specify the source key of the values to be imported (`child`) and the destination path in the parent chart's values (`parent`). The `import-values` in the example below instructs Helm to take any values found at `child:` path and copy them to the parent's values at the path specified in `parent:` # parent's Chart.yaml file dependencies: - name: subchart1 repository: http://localhost:10191 version: 0.1.0 ... import-values: - child: default.data parent: myimports In the above example, values found at `default.data` in the subchart1's values will be imported to the `myimports` key in the parent chart's values as detailed below: # parent's values.yaml file myimports: myint: 0 mybool: false mystring: "helm rocks!" # subchart1's values.yaml file default: data: myint: 999 mybool: true The parent chart's resulting values would be: # parent's final values myimports: myint: 999 mybool: true mystring: "helm rocks!" The parent's final values now contains the `myint` and `mybool` fields imported from subchart1. ### Managing Dependencies manually via the `charts/` directory If more control over dependencies is desired, these dependencies can be expressed explicitly by copying the dependency charts into the `charts/` directory. A dependency should be an unpacked chart directory but its name cannot start with `_` or `.`. Such files are ignored by the chart loader. For example, if the WordPress chart depends on the Apache chart, the Apache chart (of the correct version) is supplied in the WordPress chart's `charts/` directory: wordpress: Chart.yaml # ... charts/ apache/ Chart.yaml # ... mysql/ Chart.yaml # ... The example above shows how the WordPress chart expresses its dependency on Apache and MySQL by including those charts inside of its `charts/` directory. **TIP:** _To drop a dependency into your `charts/` directory, use the `helm pull` command_ ### Operational aspects of using dependencies The above sections explain how to specify chart dependencies, but how does this affect chart installation using `helm install` and `helm upgrade`? Suppose that a chart named "A" creates the following Kubernetes objects * namespace "A-Namespace" * statefulset "A-StatefulSet" * service "A-Service" Furthermore, A is dependent on chart B that creates objects * namespace "B-Namespace" * replicaset "B-ReplicaSet" * service "B-Service" After installation/upgrade of chart A a single Helm release is created/modified. The release will create/update all of the above Kubernetes objects in the following order: * A-Namespace * B-Namespace * A-Service * B-Service * B-ReplicaSet * A-StatefulSet This is because when Helm installs/upgrades charts, the Kubernetes objects from the charts and all its dependencies are * aggregated into a single set; then * sorted by type followed by name; and then * created/updated in that order. Hence a single release is created with all the objects for the chart and its dependencies. The install order of Kubernetes types is given by the enumeration InstallOrder in kind\_sorter.go (see [the Helm source file](https://github.com/helm/helm/blob/484d43913f97292648c867b56768775a55e4bba6/pkg/releaseutil/kind_sorter.go) ). Templates and Values -------------------- Helm Chart templates are written in the [Go template language](https://golang.org/pkg/text/template/) , with the addition of 50 or so add-on template functions [from the Sprig library](https://github.com/Masterminds/sprig) and a few other [specialized functions](https://helm.sh/docs/howto/charts_tips_and_tricks/) . All template files are stored in a chart's `templates/` folder. When Helm renders the charts, it will pass every file in that directory through the template engine. Values for the templates are supplied two ways: * Chart developers may supply a file called `values.yaml` inside of a chart. This file can contain default values. * Chart users may supply a YAML file that contains values. This can be provided on the command line with `helm install`. When a user supplies custom values, these values will override the values in the chart's `values.yaml` file. ### Template Files Template files follow the standard conventions for writing Go templates (see [the text/template Go package documentation](https://golang.org/pkg/text/template/) for details). An example template file might look something like this: apiVersion: v1 kind: ReplicationController metadata: name: deis-database namespace: deis labels: app.kubernetes.io/managed-by: deis spec: replicas: 1 selector: app.kubernetes.io/name: deis-database template: metadata: labels: app.kubernetes.io/name: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }} imagePullPolicy: {{ .Values.pullPolicy }} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: {{ default "minio" .Values.storage }} The above example, based loosely on [https://github.com/deis/charts](https://github.com/deis/charts) , is a template for a Kubernetes replication controller. It can use the following four template values (usually defined in a `values.yaml` file): * `imageRegistry`: The source registry for the Docker image. * `dockerTag`: The tag for the docker image. * `pullPolicy`: The Kubernetes pull policy. * `storage`: The storage backend, whose default is set to `"minio"` All of these values are defined by the template author. Helm does not require or dictate parameters. To see many working charts, check out the CNCF [Artifact Hub](https://artifacthub.io/packages/search?kind=0) . ### Predefined Values Values that are supplied via a `values.yaml` file (or via the `--set` flag) are accessible from the `.Values` object in a template. But there are other pre-defined pieces of data you can access in your templates. The following values are pre-defined, are available to every template, and cannot be overridden. As with all values, the names are _case sensitive_. * `Release.Name`: The name of the release (not the chart) * `Release.Namespace`: The namespace the chart was released to. * `Release.Service`: The service that conducted the release. * `Release.IsUpgrade`: This is set to true if the current operation is an upgrade or rollback. * `Release.IsInstall`: This is set to true if the current operation is an install. * `Chart`: The contents of the `Chart.yaml`. Thus, the chart version is obtainable as `Chart.Version` and the maintainers are in `Chart.Maintainers`. * `Files`: A map-like object containing all non-special files in the chart. This will not give you access to templates, but will give you access to additional files that are present (unless they are excluded using `.helmignore`). Files can be accessed using `{{ index .Files "file.name" }}` or using the `{{.Files.Get name }}` function. You can also access the contents of the file as `[]byte` using `{{ .Files.GetBytes }}` * `Capabilities`: A map-like object that contains information about the versions of Kubernetes (`{{ .Capabilities.KubeVersion }}`) and the supported Kubernetes API versions (`{{ .Capabilities.APIVersions.Has "batch/v1" }}`) **NOTE:** Any unknown `Chart.yaml` fields will be dropped. They will not be accessible inside of the `Chart` object. Thus, `Chart.yaml` cannot be used to pass arbitrarily structured data into the template. The values file can be used for that, though. ### Values files Considering the template in the previous section, a `values.yaml` file that supplies the necessary values would look like this: imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3" A values file is formatted in YAML. A chart may include a default `values.yaml` file. The Helm install command allows a user to override values by supplying additional YAML values: $ helm install --generate-name --values=myvals.yaml wordpress When values are passed in this way, they will be merged into the default values file. For example, consider a `myvals.yaml` file that looks like this: storage: "gcs" When this is merged with the `values.yaml` in the chart, the resulting generated content will be: imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "gcs" Note that only the last field was overridden. **NOTE:** The default values file included inside of a chart _must_ be named `values.yaml`. But files specified on the command line can be named anything. **NOTE:** If the `--set` flag is used on `helm install` or `helm upgrade`, those values are simply converted to YAML on the client side. **NOTE:** If any required entries in the values file exist, they can be declared as required in the chart template by using the ['required' function](https://helm.sh/docs/howto/charts_tips_and_tricks/) Any of these values are then accessible inside of templates using the `.Values` object: apiVersion: v1 kind: ReplicationController metadata: name: deis-database namespace: deis labels: app.kubernetes.io/managed-by: deis spec: replicas: 1 selector: app.kubernetes.io/name: deis-database template: metadata: labels: app.kubernetes.io/name: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }} imagePullPolicy: {{ .Values.pullPolicy }} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: {{ default "minio" .Values.storage }} ### Scope, Dependencies, and Values Values files can declare values for the top-level chart, as well as for any of the charts that are included in that chart's `charts/` directory. Or, to phrase it differently, a values file can supply values to the chart as well as to any of its dependencies. For example, the demonstration WordPress chart above has both `mysql` and `apache` as dependencies. The values file could supply values to all of these components: title: "My WordPress Site" # Sent to the WordPress template mysql: max_connections: 100 # Sent to MySQL password: "secret" apache: port: 8080 # Passed to Apache Charts at a higher level have access to all of the variables defined beneath. So the WordPress chart can access the MySQL password as `.Values.mysql.password`. But lower level charts cannot access things in parent charts, so MySQL will not be able to access the `title` property. Nor, for that matter, can it access `apache.port`. Values are namespaced, but namespaces are pruned. So for the WordPress chart, it can access the MySQL password field as `.Values.mysql.password`. But for the MySQL chart, the scope of the values has been reduced and the namespace prefix removed, so it will see the password field simply as `.Values.password`. #### Global Values As of 2.0.0-Alpha.2, Helm supports special "global" value. Consider this modified version of the previous example: title: "My WordPress Site" # Sent to the WordPress template global: app: MyWordPress mysql: max_connections: 100 # Sent to MySQL password: "secret" apache: port: 8080 # Passed to Apache The above adds a `global` section with the value `app: MyWordPress`. This value is available to _all_ charts as `.Values.global.app`. For example, the `mysql` templates may access `app` as `{{ .Values.global.app}}`, and so can the `apache` chart. Effectively, the values file above is regenerated like this: title: "My WordPress Site" # Sent to the WordPress template global: app: MyWordPress mysql: global: app: MyWordPress max_connections: 100 # Sent to MySQL password: "secret" apache: global: app: MyWordPress port: 8080 # Passed to Apache This provides a way of sharing one top-level variable with all subcharts, which is useful for things like setting `metadata` properties like labels. If a subchart declares a global variable, that global will be passed _downward_ (to the subchart's subcharts), but not _upward_ to the parent chart. There is no way for a subchart to influence the values of the parent chart. Also, global variables of parent charts take precedence over the global variables from subcharts. ### Schema Files Sometimes, a chart maintainer might want to define a structure on their values. This can be done by defining a schema in the `values.schema.json` file. A schema is represented as a [JSON Schema](https://json-schema.org/) . It might look something like this: { "$schema": "https://json-schema.org/draft-07/schema#", "properties": { "image": { "description": "Container Image", "properties": { "repo": { "type": "string" }, "tag": { "type": "string" } }, "type": "object" }, "name": { "description": "Service name", "type": "string" }, "port": { "description": "Port", "minimum": 0, "type": "integer" }, "protocol": { "type": "string" } }, "required": [\ "protocol",\ "port"\ ], "title": "Values", "type": "object" } This schema will be applied to the values to validate it. Validation occurs when any of the following commands are invoked: * `helm install` * `helm upgrade` * `helm lint` * `helm template` An example of a `values.yaml` file that meets the requirements of this schema might look something like this: name: frontend protocol: https port: 443 Note that the schema is applied to the final `.Values` object, and not just to the `values.yaml` file. This means that the following `yaml` file is valid, given that the chart is installed with the appropriate `--set` option shown below. name: frontend protocol: https helm install --set port=443 Furthermore, the final `.Values` object is checked against _all_ subchart schemas. This means that restrictions on a subchart can't be circumvented by a parent chart. This also works backwards - if a subchart has a requirement that is not met in the subchart's `values.yaml` file, the parent chart _must_ satisfy those restrictions in order to be valid. ### References When it comes to writing templates, values, and schema files, there are several standard references that will help you out. * [Go templates](https://godoc.org/text/template) * [Extra template functions](https://godoc.org/github.com/Masterminds/sprig) * [The YAML format](https://yaml.org/spec/) * [JSON Schema](https://json-schema.org/) Custom Resource Definitions (CRDs) ---------------------------------- Kubernetes provides a mechanism for declaring new types of Kubernetes objects. Using CustomResourceDefinitions (CRDs), Kubernetes developers can declare custom resource types. In Helm 3, CRDs are treated as a special kind of object. They are installed before the rest of the chart, and are subject to some limitations. CRD YAML files should be placed in the `crds/` directory inside of a chart. Multiple CRDs (separated by YAML start and end markers) may be placed in the same file. Helm will attempt to load _all_ of the files in the CRD directory into Kubernetes. CRD files _cannot be templated_. They must be plain YAML documents. When Helm installs a new chart, it will upload the CRDs, pause until the CRDs are made available by the API server, and then start the template engine, render the rest of the chart, and upload it to Kubernetes. Because of this ordering, CRD information is available in the `.Capabilities` object in Helm templates, and Helm templates may create new instances of objects that were declared in CRDs. For example, if your chart had a CRD for `CronTab` in the `crds/` directory, you may create instances of the `CronTab` kind in the `templates/` directory: crontabs/ Chart.yaml crds/ crontab.yaml templates/ mycrontab.yaml The `crontab.yaml` file must contain the CRD with no template directives: kind: CustomResourceDefinition metadata: name: crontabs.stable.example.com spec: group: stable.example.com versions: - name: v1 served: true storage: true scope: Namespaced names: plural: crontabs singular: crontab kind: CronTab Then the template `mycrontab.yaml` may create a new `CronTab` (using templates as usual): apiVersion: stable.example.com kind: CronTab metadata: name: {{ .Values.name }} spec: # ... Helm will make sure that the `CronTab` kind has been installed and is available from the Kubernetes API server before it proceeds installing the things in `templates/`. ### Limitations on CRDs Unlike most objects in Kubernetes, CRDs are installed globally. For that reason, Helm takes a very cautious approach in managing CRDs. CRDs are subject to the following limitations: * CRDs are never reinstalled. If Helm determines that the CRDs in the `crds/` directory are already present (regardless of version), Helm will not attempt to install or upgrade. * CRDs are never installed on upgrade or rollback. Helm will only create CRDs on installation operations. * CRDs are never deleted. Deleting a CRD automatically deletes all of the CRD's contents across all namespaces in the cluster. Consequently, Helm will not delete CRDs. Operators who want to upgrade or delete CRDs are encouraged to do this manually and with great care. Using Helm to Manage Charts --------------------------- The `helm` tool has several commands for working with charts. It can create a new chart for you: $ helm create mychart Created mychart/ Once you have edited a chart, `helm` can package it into a chart archive for you: $ helm package mychart Archived mychart-0.1.-.tgz You can also use `helm` to help you find issues with your chart's formatting or information: $ helm lint mychart No issues found Chart Repositories ------------------ A _chart repository_ is an HTTP server that houses one or more packaged charts. While `helm` can be used to manage local chart directories, when it comes to sharing charts, the preferred mechanism is a chart repository. Any HTTP server that can serve YAML files and tar files and can answer GET requests can be used as a repository server. The Helm team has tested some servers, including Google Cloud Storage with website mode enabled, and S3 with website mode enabled. A repository is characterized primarily by the presence of a special file called `index.yaml` that has a list of all of the packages supplied by the repository, together with metadata that allows retrieving and verifying those packages. On the client side, repositories are managed with the `helm repo` commands. However, Helm does not provide tools for uploading charts to remote repository servers. This is because doing so would add substantial requirements to an implementing server, and thus raise the barrier for setting up a repository. Chart Starter Packs ------------------- The `helm create` command takes an optional `--starter` option that lets you specify a "starter chart". Also, the starter option has a short alias `-p`. Examples of usage: helm create my-chart --starter starter-name helm create my-chart -p starter-name helm create my-chart -p /absolute/path/to/starter-name Starters are just regular charts, but are located in `$XDG_DATA_HOME/helm/starters`. As a chart developer, you may author charts that are specifically designed to be used as starters. Such charts should be designed with the following considerations in mind: * The `Chart.yaml` will be overwritten by the generator. * Users will expect to modify such a chart's contents, so documentation should indicate how users can do so. * All occurrences of `` will be replaced with the specified chart name so that starter charts can be used as templates, except for some variable files. For example, if you use custom files in the `vars` directory or certain `README.md` files, `` will NOT override inside them. Additionally, the chart description is not inherited. Currently the only way to add a chart to `$XDG_DATA_HOME/helm/starters` is to manually copy it there. In your chart's documentation, you may want to explain that process. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Developer Guide Developer Guide =============== This guide explains how to set up your environment for developing on Helm. Prerequisites ------------- * The latest version of Go * A Kubernetes cluster w/ kubectl (optional) * Git Building Helm ------------- We use Make to build our programs. The simplest way to get started is: $ make If required, this will first install dependencies and validate configuration. It will then compile `helm` and place it in `bin/helm`. To run Helm locally, you can run `bin/helm`. * Helm is known to run on macOS and most Linux distributions, including Alpine. Running tests ------------- To run all the tests, run `make test`. As a pre-requisite, you would need to have [golangci-lint](https://golangci-lint.run/) installed. Running Locally --------------- You can update your path and add the path of your local helm binary. In an editor open your shell config file. Add the following line making sure you replace `` with your local bin directory. export PATH=":$PATH" This will allow you to run the locally built version of helm from your terminal. Contribution Guidelines ----------------------- We welcome contributions. This project has set up some guidelines in order to ensure that (a) code quality remains high, (b) the project remains consistent, and (c) contributions follow the open source legal requirements. Our intent is not to burden contributors, but to build elegant and high-quality open source code so that our users will benefit. Make sure you have read and understood the main CONTRIBUTING guide: [https://github.com/helm/helm/blob/main/CONTRIBUTING.md](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) ### Structure of the Code The code for the Helm project is organized as follows: * The individual programs are located in `cmd/`. Code inside of `cmd/` is not designed for library re-use. * Shared libraries are stored in `pkg/`. * The `scripts/` directory contains a number of utility scripts. Most of these are used by the CI/CD pipeline. Go dependency management is in flux, and it is likely to change during the course of Helm's lifecycle. We encourage developers to _not_ try to manually manage dependencies. Instead, we suggest relying upon the project's `Makefile` to do that for you. With Helm 3, it is recommended that you are on Go version 1.13 or later. ### Writing Documentation Since Helm 3, documentation has been moved to its own repository. When writing new features, please write accompanying documentation and submit it to the [helm-www](https://github.com/helm/helm-www) repository. One exception: [Helm CLI output (in English)](https://helm.sh/docs/helm/) is generated from the `helm` binary itself. See [Updating the Helm CLI Reference Docs](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) for instructions on how to generate this output. When translated, the CLI output is not generated and can be found in `/content//docs/helm`. ### Git Conventions We use Git for our version control system. The `main` branch is the home of the current development candidate. Releases are tagged. We accept changes to the code via GitHub Pull Requests (PRs). One workflow for doing this is as follows: 1. Fork the `github.com/helm/helm` repository into your GitHub account 2. `git clone` the forked repository into your desired directory 3. Create a new working branch (`git checkout -b feat/my-feature`) and do your work on that branch. 4. When you are ready for us to review, push your branch to GitHub, and then open a new pull request with us. For Git commit messages, we follow the [Semantic Commit Messages](https://karma-runner.github.io/0.13/dev/git-commit-msg.html) : fix(helm): add --foo flag to 'helm install' When 'helm install --foo bar' is run, this will print "foo" in the output regardless of the outcome of the installation. Closes #1234 Common commit types: * fix: Fix a bug or error * feat: Add a new feature * docs: Change documentation * test: Improve testing * ref: refactor existing code Common scopes: * helm: The Helm CLI * pkg/lint: The lint package. Follow a similar convention for any package * `*`: two or more scopes Read more: * The [Deis Guidelines](https://github.com/deis/workflow/blob/master/src/contributing/submitting-a-pull-request.md) were the inspiration for this section. * Karma Runner [defines](https://karma-runner.github.io/0.13/dev/git-commit-msg.html) the semantic commit message idea. ### Go Conventions We follow the Go coding style standards very closely. Typically, running `go fmt` will make your code beautiful for you. We also typically follow the conventions recommended by `go lint` and `gometalinter`. Run `make test-style` to test the style conformance. Read more: * Effective Go [introduces formatting](https://golang.org/doc/effective_go.html#formatting) . * The Go Wiki has a great article on [formatting](https://github.com/golang/go/wiki/CodeReviewComments) . If you run the `make test` target, not only will unit tests be run, but so will style tests. If the `make test` target fails, even for stylistic reasons, your PR will not be considered ready for merging. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | General Conventions General Conventions =================== This part of the Best Practices Guide explains general conventions. Chart Names ----------- Chart names must be lower case letters and numbers. Words _may_ be separated with dashes (-): Examples: drupal nginx-lego aws-cluster-autoscaler Neither uppercase letters nor underscores can be used in chart names. Dots should not be used in chart names. Version Numbers --------------- Wherever possible, Helm uses [SemVer 2](https://semver.org/) to represent version numbers. (Note that Docker image tags do not necessarily follow SemVer, and are thus considered an unfortunate exception to the rule.) When SemVer versions are stored in Kubernetes labels, we conventionally alter the `+` character to an `_` character, as labels do not allow the `+` sign as a value. Formatting YAML --------------- YAML files should be indented using _two spaces_ (and never tabs). Usage of the Words Helm and Chart --------------------------------- There are a few conventions for using the words _Helm_ and _helm_. * _Helm_ refers to the project as a whole * `helm` refers to the client-side command * The term `chart` does not need to be capitalized, as it is not a proper noun * However, `Chart.yaml` does need to be capitalized because the file name is case sensitive When in doubt, use _Helm_ (with an uppercase 'H'). [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Introduction to Helm ==================== Are you new to Helm? This is the place to start! ### Quicklinks [#### Quickstart Guide\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/docs/intro/quickstart/) [#### Installing Helm\ \ Learn how to install and get running with Helm.](https://helm.sh/docs/intro/install/) [#### Using Helm\ \ Explains the basics of Helm.](https://helm.sh/docs/intro/using_helm/) [#### Cheat Sheet\ \ Helm cheatsheet](https://helm.sh/docs/intro/cheatsheet/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Introduction Introduction ============ Helm's Go SDK enables custom software to leverage Helm charts and Helm's functionality for managing Kubernetes software deployment (In fact, the Helm CLI is effectively just one such tool!) Currently, the SDK has been functionally separated from the Helm CLI. And the SDK can (and is) used by standalone tooling. The Helm project has committed to API stability for the SDK. As a warning, the SDK has some rough edges remaining from the initial work to separate the CLI and the SDK. Which the Helm project aims to improve and over time. Full API documentation can be found at [https://pkg.go.dev/helm.sh/helm/v3](https://pkg.go.dev/helm.sh/helm/v3) . A brief overview of some of the main types of packages and a simple example follows below. See the [Examples](https://helm.sh/docs/sdk/examples/) section for more examples and a more full featured 'driver'. Main package overview --------------------- * [pkg/action](https://pkg.go.dev/helm.sh/helm/v3/pkg/action) : Contains the main “client” for performing Helm actions. This is the same package that the CLI is using underneath the hood. If you just need to perform basic Helm commands from another Go program, this package is for you * [pkg/chart](https://pkg.go.dev/helm.sh/helm/v3/pkg/chart) , [pkg/chartutil](https://pkg.go.dev/helm.sh/helm/v3/pkg/chartutil) : Methods and helpers used for loading and manipulating charts * [pkg/cli](https://pkg.go.dev/helm.sh/helm/v3/pkg/cli) and its subpackages: Contains all the handlers for the standard Helm environment variables and its subpackages contain output and values file handling * [pkg/release](https://pkg.go.dev/helm.sh/helm/v3/pkg/release) : Defines the `Release` object and statuses There are many more packages besides these, so go check out the documentation for more information! ### Simple example This is a simple example of doing a `helm list` using the Go SDK. See the [Examples](https://helm.sh/docs/sdk/examples/) section for more full featured examples. package main import ( "log" "os" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" ) func main() { settings := cli.New() actionConfig := new(action.Configuration) // You can pass an empty string instead of settings.Namespace() to list // all namespaces if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil { log.Printf("%+v", err) os.Exit(1) } client := action.NewList(actionConfig) // Only list deployed client.Deployed = true results, err := client.Run() if err != nil { log.Printf("%+v", err) os.Exit(1) } for _, rel := range results { log.Printf("%+v", rel) } } Compatibility ------------- The Helm SDK explicitly follows the Helm backwards compatibility guarantees: [https://github.com/helm/community/blob/main/hips/hip-0004.md](https://github.com/helm/community/blob/main/hips/hip-0004.md) That is, break changes will only be made over major versions. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Quickstart Guide Quickstart Guide ================ This guide covers how you can quickly get started using Helm. Prerequisites ------------- The following prerequisites are required for a successful and properly secured use of Helm. 1. A Kubernetes cluster 2. Deciding what security configurations to apply to your installation, if any 3. Installing and configuring Helm. ### Install Kubernetes or have access to a cluster * You must have Kubernetes installed. For the latest release of Helm, we recommend the latest stable release of Kubernetes, which in most cases is the second-latest minor release. * You should also have a local configured copy of `kubectl`. See the [Helm Version Support Policy](https://helm.sh/docs/topics/version_skew/) for the maximum version skew supported between Helm and Kubernetes. Install Helm ------------ Download a binary release of the Helm client. You can use tools like `homebrew`, or look at [the official releases page](https://github.com/helm/helm/releases) . For more details, or for other options, see [the installation guide](https://helm.sh/docs/intro/install/) . Initialize a Helm Chart Repository ---------------------------------- Once you have Helm ready, you can add a chart repository. Check [Artifact Hub](https://artifacthub.io/packages/search?kind=0) for available Helm chart repositories. $ helm repo add bitnami https://charts.bitnami.com/bitnami Once this is installed, you will be able to list the charts you can install: $ helm search repo bitnami NAME CHART VERSION APP VERSION DESCRIPTION bitnami/bitnami-common 0.0.9 0.0.9 DEPRECATED Chart with custom templates used in ... bitnami/airflow 8.0.2 2.0.0 Apache Airflow is a platform to programmaticall... bitnami/apache 8.2.3 2.4.46 Chart for Apache HTTP Server bitnami/aspnet-core 1.2.3 3.1.9 ASP.NET Core is an open-source framework create... # ... and many more Install an Example Chart ------------------------ To install a chart, you can run the `helm install` command. Helm has several ways to find and install a chart, but the easiest is to use the `bitnami` charts. $ helm repo update # Make sure we get the latest list of charts $ helm install bitnami/mysql --generate-name NAME: mysql-1612624192 LAST DEPLOYED: Sat Feb 6 16:09:56 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: ... In the example above, the `bitnami/mysql` chart was released, and the name of our new release is `mysql-1612624192`. You get a simple idea of the features of this MySQL chart by running `helm show chart bitnami/mysql`. Or you could run `helm show all bitnami/mysql` to get all information about the chart. Whenever you install a chart, a new release is created. So one chart can be installed multiple times into the same cluster. And each can be independently managed and upgraded. The `helm install` command is a very powerful command with many capabilities. To learn more about it, check out the [Using Helm Guide](https://helm.sh/docs/intro/using_helm/) Learn About Releases -------------------- It's easy to see what has been released using Helm: $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mysql-1612624192 default 1 2021-02-06 16:09:56.283059 +0100 CET deployed mysql-8.3.0 8.0.23 The `helm list` (or `helm ls`) function will show you a list of all deployed releases. Uninstall a Release ------------------- To uninstall a release, use the `helm uninstall` command: $ helm uninstall mysql-1612624192 release "mysql-1612624192" uninstalled This will uninstall `mysql-1612624192` from Kubernetes, which will remove all resources associated with the release as well as the release history. If the flag `--keep-history` is provided, release history will be kept. You will be able to request information about that release: $ helm status mysql-1612624192 Status: UNINSTALLED ... Because Helm tracks your releases even after you've uninstalled them, you can audit a cluster's history, and even undelete a release (with `helm rollback`). Reading the Help Text --------------------- To learn more about the available Helm commands, use `helm help` or type a command followed by the `-h` flag: $ helm get -h [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Chart Hooks Chart Hooks =========== Helm provides a _hook_ mechanism to allow chart developers to intervene at certain points in a release's life cycle. For example, you can use hooks to: * Load a ConfigMap or Secret during install before any other charts are loaded. * Execute a Job to back up a database before installing a new chart, and then execute a second job after the upgrade in order to restore data. * Run a Job before deleting a release to gracefully take a service out of rotation before removing it. Hooks work like regular templates, but they have special annotations that cause Helm to utilize them differently. In this section, we cover the basic usage pattern for hooks. The Available Hooks ------------------- The following hooks are defined: | Annotation Value | Description | | --- | --- | | `pre-install` | Executes after templates are rendered, but before any resources are created in Kubernetes | | `post-install` | Executes after all resources are loaded into Kubernetes | | `pre-delete` | Executes on a deletion request before any resources are deleted from Kubernetes | | `post-delete` | Executes on a deletion request after all of the release's resources have been deleted | | `pre-upgrade` | Executes on an upgrade request after templates are rendered, but before any resources are updated | | `post-upgrade` | Executes on an upgrade request after all resources have been upgraded | | `pre-rollback` | Executes on a rollback request after templates are rendered, but before any resources are rolled back | | `post-rollback` | Executes on a rollback request after all resources have been modified | | `test` | Executes when the Helm test subcommand is invoked ( [view test docs](https://helm.sh/docs/chart_tests/)
) | _Note that the `crd-install` hook has been removed in favor of the `crds/` directory in Helm 3._ Hooks and the Release Lifecycle ------------------------------- Hooks allow you, the chart developer, an opportunity to perform operations at strategic points in a release lifecycle. For example, consider the lifecycle for a `helm install`. By default, the lifecycle looks like this: 1. User runs `helm install foo` 2. The Helm library install API is called 3. After some verification, the library renders the `foo` templates 4. The library loads the resulting resources into Kubernetes 5. The library returns the release object (and other data) to the client 6. The client exits Helm defines two hooks for the `install` lifecycle: `pre-install` and `post-install`. If the developer of the `foo` chart implements both hooks, the lifecycle is altered like this: 1. User runs `helm install foo` 2. The Helm library install API is called 3. CRDs in the `crds/` directory are installed 4. After some verification, the library renders the `foo` templates 5. The library prepares to execute the `pre-install` hooks (loading hook resources into Kubernetes) 6. The library sorts hooks by weight (assigning a weight of 0 by default), by resource kind and finally by name in ascending order. 7. The library then loads the hook with the lowest weight first (negative to positive) 8. The library waits until the hook is "Ready" (except for CRDs) 9. The library loads the resulting resources into Kubernetes. Note that if the `--wait` flag is set, the library will wait until all resources are in a ready state and will not run the `post-install` hook until they are ready. 10. The library executes the `post-install` hook (loading hook resources) 11. The library waits until the hook is "Ready" 12. The library returns the release object (and other data) to the client 13. The client exits What does it mean to wait until a hook is ready? This depends on the resource declared in the hook. If the resource is a `Job` or `Pod` kind, Helm will wait until it successfully runs to completion. And if the hook fails, the release will fail. This is a _blocking operation_, so the Helm client will pause while the Job is run. For all other kinds, as soon as Kubernetes marks the resource as loaded (added or updated), the resource is considered "Ready". When many resources are declared in a hook, the resources are executed serially. If they have hook weights (see below), they are executed in weighted order. Starting from Helm 3.2.0 hook resources with same weight are installed in the same order as normal non-hook resources. Otherwise, ordering is not guaranteed. (In Helm 2.3.0 and after, they are sorted alphabetically. That behavior, though, is not considered binding and could change in the future.) It is considered good practice to add a hook weight, and set it to `0` if weight is not important. ### Hook resources are not managed with corresponding releases The resources that a hook creates are currently not tracked or managed as part of the release. Once Helm verifies that the hook has reached its ready state, it will leave the hook resource alone. Garbage collection of hook resources when the corresponding release is deleted may be added to Helm 3 in the future, so any hook resources that must never be deleted should be annotated with `helm.sh/resource-policy: keep`. Practically speaking, this means that if you create resources in a hook, you cannot rely upon `helm uninstall` to remove the resources. To destroy such resources, you need to either [add a custom `helm.sh/hook-delete-policy` annotation](https://helm.sh/docs/topics/charts_hooks/#hook-deletion-policies) to the hook template file, or [set the time to live (TTL) field of a Job resource](https://kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/) . Writing a Hook -------------- Hooks are just Kubernetes manifest files with special annotations in the `metadata` section. Because they are template files, you can use all of the normal template features, including reading `.Values`, `.Release`, and `.Template`. For example, this template, stored in `templates/post-install-job.yaml`, declares a job to be run on `post-install`: apiVersion: batch/v1 kind: Job metadata: name: "{{ .Release.Name }}" labels: app.kubernetes.io/managed-by: {{ .Release.Service | quote }} app.kubernetes.io/instance: {{ .Release.Name | quote }} app.kubernetes.io/version: {{ .Chart.AppVersion }} helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" annotations: # This is what defines this resource as a hook. Without this line, the # job is considered part of the release. "helm.sh/hook": post-install "helm.sh/hook-weight": "-5" "helm.sh/hook-delete-policy": hook-succeeded spec: template: metadata: name: "{{ .Release.Name }}" labels: app.kubernetes.io/managed-by: {{ .Release.Service | quote }} app.kubernetes.io/instance: {{ .Release.Name | quote }} helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" spec: restartPolicy: Never containers: - name: post-install-job image: "alpine:3.3" command: ["/bin/sleep","{{ default "10" .Values.sleepyTime }}"] What makes this template a hook is the annotation: annotations: "helm.sh/hook": post-install One resource can implement multiple hooks: annotations: "helm.sh/hook": post-install,post-upgrade Similarly, there is no limit to the number of different resources that may implement a given hook. For example, one could declare both a secret and a config map as a pre-install hook. When subcharts declare hooks, those are also evaluated. There is no way for a top-level chart to disable the hooks declared by subcharts. It is possible to define a weight for a hook which will help build a deterministic executing order. Weights are defined using the following annotation: annotations: "helm.sh/hook-weight": "5" Hook weights can be positive or negative numbers but must be represented as strings. When Helm starts the execution cycle of hooks of a particular Kind it will sort those hooks in ascending order. ### Hook deletion policies It is possible to define policies that determine when to delete corresponding hook resources. Hook deletion policies are defined using the following annotation: annotations: "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded You can choose one or more defined annotation values: | Annotation Value | Description | | --- | --- | | `before-hook-creation` | Delete the previous resource before a new hook is launched (default) | | `hook-succeeded` | Delete the resource after the hook is successfully executed | | `hook-failed` | Delete the resource if the hook failed during execution | If no hook deletion policy annotation is specified, the `before-hook-creation` behavior applies by default. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Getting Started Getting Started =============== In this section of the guide, we'll create a chart and then add a first template. The chart we created here will be used throughout the rest of the guide. To get going, let's take a brief look at a Helm chart. Charts ------ As described in the [Charts Guide](https://helm.sh/docs/topics/charts) , Helm charts are structured like this: mychart/ Chart.yaml values.yaml charts/ templates/ ... The `templates/` directory is for template files. When Helm evaluates a chart, it will send all of the files in the `templates/` directory through the template rendering engine. It then collects the results of those templates and sends them on to Kubernetes. The `values.yaml` file is also important to templates. This file contains the _default values_ for a chart. These values may be overridden by users during `helm install` or `helm upgrade`. The `Chart.yaml` file contains a description of the chart. You can access it from within a template. The `charts/` directory _may_ contain other charts (which we call _subcharts_). Later in this guide we will see how those work when it comes to template rendering. A Starter Chart --------------- For this guide, we'll create a simple chart called `mychart`, and then we'll create some templates inside of the chart. $ helm create mychart Creating mychart ### A Quick Glimpse of `mychart/templates/` If you take a look at the `mychart/templates/` directory, you'll notice a few files already there. * `NOTES.txt`: The "help text" for your chart. This will be displayed to your users when they run `helm install`. * `deployment.yaml`: A basic manifest for creating a Kubernetes [deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) * `service.yaml`: A basic manifest for creating a [service endpoint](https://kubernetes.io/docs/concepts/services-networking/service/) for your deployment * `_helpers.tpl`: A place to put template helpers that you can re-use throughout the chart And what we're going to do is... _remove them all!_ That way we can work through our tutorial from scratch. We'll actually create our own `NOTES.txt` and `_helpers.tpl` as we go. $ rm -rf mychart/templates/* When you're writing production grade charts, having basic versions of these charts can be really useful. So in your day-to-day chart authoring, you probably won't want to remove them. A First Template ---------------- The first template we are going to create will be a `ConfigMap`. In Kubernetes, a ConfigMap is simply an object for storing configuration data. Other things, like pods, can access the data in a ConfigMap. Because ConfigMaps are basic resources, they make a great starting point for us. Let's begin by creating a file called `mychart/templates/configmap.yaml`: apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue: "Hello World" **TIP:** Template names do not follow a rigid naming pattern. However, we recommend using the extension `.yaml` for YAML files and `.tpl` for helpers. The YAML file above is a bare-bones ConfigMap, having the minimal necessary fields. By virtue of the fact that this file is in the `mychart/templates/` directory, it will be sent through the template engine. It is just fine to put a plain YAML file like this in the `mychart/templates/` directory. When Helm reads this template, it will simply send it to Kubernetes as-is. With this simple template, we now have an installable chart. And we can install it like this: $ helm install full-coral ./mychart NAME: full-coral LAST DEPLOYED: Tue Nov 1 17:36:01 2016 NAMESPACE: default STATUS: DEPLOYED REVISION: 1 TEST SUITE: None Using Helm, we can retrieve the release and see the actual template that was loaded. $ helm get manifest full-coral --- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue: "Hello World" The `helm get manifest` command takes a release name (`full-coral`) and prints out all of the Kubernetes resources that were uploaded to the server. Each file begins with `---` to indicate the start of a YAML document, and then is followed by an automatically generated comment line that tells us what template file generated this YAML document. From there on, we can see that the YAML data is exactly what we put in our `configmap.yaml` file. Now we can uninstall our release: `helm uninstall full-coral`. ### Adding a Simple Template Call Hard-coding the `name:` into a resource is usually considered to be bad practice. Names should be unique to a release. So we might want to generate a name field by inserting the release name. **TIP:** The `name:` field is limited to 63 characters because of limitations to the DNS system. For that reason, release names are limited to 53 characters. Kubernetes 1.3 and earlier limited to only 24 characters (thus 14 character names). Let's alter `configmap.yaml` accordingly. apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" The big change comes in the value of the `name:` field, which is now `{{ .Release.Name }}-configmap`. > A template directive is enclosed in `{{` and `}}` blocks. The template directive `{{ .Release.Name }}` injects the release name into the template. The values that are passed into a template can be thought of as _namespaced objects_, where a dot (`.`) separates each namespaced element. The leading dot before `Release` indicates that we start with the top-most namespace for this scope (we'll talk about scope in a bit). So we could read `.Release.Name` as "start at the top namespace, find the `Release` object, then look inside of it for an object called `Name`". The `Release` object is one of the built-in objects for Helm, and we'll cover it in more depth later. But for now, it is sufficient to say that this will display the release name that the library assigns to our release. Now when we install our resource, we'll immediately see the result of using this template directive: $ helm install clunky-serval ./mychart NAME: clunky-serval LAST DEPLOYED: Tue Nov 1 17:45:37 2016 NAMESPACE: default STATUS: DEPLOYED REVISION: 1 TEST SUITE: None You can run `helm get manifest clunky-serval` to see the entire generated YAML. Note that the ConfigMap inside Kubernetes name is `clunky-serval-configmap` instead of `mychart-configmap` previously. At this point, we've seen templates at their most basic: YAML files that have template directives embedded in `{{` and `}}`. In the next part, we'll take a deeper look into templates. But before moving on, there's one quick trick that can make building templates faster: When you want to test the template rendering, but not actually install anything, you can use `helm install --debug --dry-run goodly-guppy ./mychart`. This will render the templates. But instead of installing the chart, it will return the rendered template to you so you can see the output: $ helm install --debug --dry-run goodly-guppy ./mychart install.go:149: [debug] Original chart version: "" install.go:166: [debug] CHART PATH: /Users/ninja/mychart NAME: goodly-guppy LAST DEPLOYED: Thu Dec 26 17:24:13 2019 NAMESPACE: default STATUS: pending-install REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: {} COMPUTED VALUES: affinity: {} fullnameOverride: "" image: pullPolicy: IfNotPresent repository: nginx imagePullSecrets: [] ingress: annotations: {} enabled: false hosts: - host: chart-example.local paths: [] tls: [] nameOverride: "" nodeSelector: {} podSecurityContext: {} replicaCount: 1 resources: {} securityContext: {} service: port: 80 type: ClusterIP serviceAccount: create: true name: null tolerations: [] HOOKS: MANIFEST: --- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: goodly-guppy-configmap data: myvalue: "Hello World" Using `--dry-run` will make it easier to test your code, but it won't ensure that Kubernetes itself will accept the templates you generate. It's best not to assume that your chart will install just because `--dry-run` works. In the [Chart Template Guide](https://helm.sh/docs/chart_template_guide/) , we take the basic chart we defined here and explore the Helm template language in detail. And we'll get started with built-in objects. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Examples Examples ======== This document runs though a series of examples of using the Helm SDK. Intended to document various SDK functionalities. The final example shows `main.go` driver ( [link](https://helm.sh/docs/sdk/examples/#driver) ). That runs the below actions and includes necessary helper functions. The code for the examples lives in the [helm/helm-www/sdkexamples/](https://github.com/helm/helm-www/tree/main/sdkexamples) directory. And is intended to be fully functional. Actions ------- ### Install Action This example installs the given chart/release, for the given version and values: package main import ( "context" "fmt" "log" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/chart/loader" "helm.sh/helm/v3/pkg/cli" "helm.sh/helm/v3/pkg/downloader" "helm.sh/helm/v3/pkg/getter" ) func runInstall(ctx context.Context, logger *log.Logger, settings *cli.EnvSettings, releaseName string, chartRef string, chartVersion string, releaseValues map[string]interface{}) error { actionConfig, err := initActionConfig(settings, logger) if err != nil { return fmt.Errorf("failed to init action config: %w", err) } installClient := action.NewInstall(actionConfig) installClient.DryRunOption = "none" installClient.ReleaseName = releaseName installClient.Namespace = settings.Namespace() installClient.Version = chartVersion registryClient, err := newRegistryClientTLS( settings, logger, installClient.CertFile, installClient.KeyFile, installClient.CaFile, installClient.InsecureSkipTLSverify, installClient.PlainHTTP) if err != nil { return fmt.Errorf("failed to created registry client: %w", err) } installClient.SetRegistryClient(registryClient) chartPath, err := installClient.ChartPathOptions.LocateChart(chartRef, settings) if err != nil { return err } providers := getter.All(settings) chart, err := loader.Load(chartPath) if err != nil { return err } // Check chart dependencies to make sure all are present in /charts if chartDependencies := chart.Metadata.Dependencies; chartDependencies != nil { if err := action.CheckDependencies(chart, chartDependencies); err != nil { err = fmt.Errorf("failed to check chart dependencies: %w", err) if !installClient.DependencyUpdate { return err } manager := &downloader.Manager{ Out: logger.Writer(), ChartPath: chartPath, Keyring: installClient.ChartPathOptions.Keyring, SkipUpdate: false, Getters: providers, RepositoryConfig: settings.RepositoryConfig, RepositoryCache: settings.RepositoryCache, Debug: settings.Debug, RegistryClient: installClient.GetRegistryClient(), } if err := manager.Update(); err != nil { return err } // Reload the chart with the updated Chart.lock file. if chart, err = loader.Load(chartPath); err != nil { return fmt.Errorf("failed to reload chart after repo update: %w", err) } } } release, err := installClient.RunWithContext(ctx, chart, releaseValues) if err != nil { return fmt.Errorf("failed to run install: %w", err) } logger.Printf("release created:\n%+v", *release) return nil } ### Upgrade Action This example upgrades the given release, with the given chart, version and values: package main import ( "context" "fmt" "log" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/chart/loader" "helm.sh/helm/v3/pkg/cli" "helm.sh/helm/v3/pkg/downloader" "helm.sh/helm/v3/pkg/getter" ) func runUpgrade(ctx context.Context, logger *log.Logger, settings *cli.EnvSettings, releaseName string, chartRef string, chartVersion string, releaseValues map[string]interface{}) error { actionConfig, err := initActionConfig(settings, logger) if err != nil { return fmt.Errorf("failed to init action config: %w", err) } upgradeClient := action.NewUpgrade(actionConfig) upgradeClient.Namespace = settings.Namespace() upgradeClient.DryRunOption = "none" upgradeClient.Version = chartVersion registryClient, err := newRegistryClientTLS( settings, logger, upgradeClient.CertFile, upgradeClient.KeyFile, upgradeClient.CaFile, upgradeClient.InsecureSkipTLSverify, upgradeClient.PlainHTTP) if err != nil { return fmt.Errorf("missing registry client: %w", err) } upgradeClient.SetRegistryClient(registryClient) chartPath, err := upgradeClient.ChartPathOptions.LocateChart(chartRef, settings) if err != nil { return err } providers := getter.All(settings) // Check chart dependencies to make sure all are present in /charts chart, err := loader.Load(chartPath) if err != nil { return fmt.Errorf("failed to load chart: %w", err) } if req := chart.Metadata.Dependencies; req != nil { if err := action.CheckDependencies(chart, req); err != nil { err = fmt.Errorf("failed to check chart dependencies: %w", err) if !upgradeClient.DependencyUpdate { return err } man := &downloader.Manager{ Out: logger.Writer(), ChartPath: chartPath, Keyring: upgradeClient.ChartPathOptions.Keyring, SkipUpdate: false, Getters: providers, RepositoryConfig: settings.RepositoryConfig, RepositoryCache: settings.RepositoryCache, Debug: settings.Debug, } if err := man.Update(); err != nil { return err } // Reload the chart with the updated Chart.lock file. if chart, err = loader.Load(chartPath); err != nil { return fmt.Errorf("failed to reload chart after repo update: %w", err) } } } release, err := upgradeClient.RunWithContext(ctx, releaseName, chart, releaseValues) if err != nil { return fmt.Errorf("failed to run upgrade action: %w", err) } logger.Printf("release: %+v", release) return nil } ### Uninstall Action This example uninstalls the given release package main import ( "fmt" "log" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" ) func runUninstall(logger *log.Logger, settings *cli.EnvSettings, releaseName string) error { actionConfig, err := initActionConfig(settings, logger) if err != nil { return fmt.Errorf("failed to init action config: %w", err) } uninstallClient := action.NewUninstall(actionConfig) uninstallClient.DeletionPropagation = "foreground" // "background" or "orphan" result, err := uninstallClient.Run(releaseName) if err != nil { return fmt.Errorf("failed to run uninstall action: %w", err) } if result != nil { logger.Printf("result: %+v\n", *result.Release) } logger.Printf("release \"%s\" uninstalled\n", releaseName) return nil } ### List Action This example lists all released charts (in the currently configured namespace) package main import ( "fmt" "log" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" ) func runList(logger *log.Logger, settings *cli.EnvSettings) error { actionConfig, err := initActionConfigList(settings, logger, false) if err != nil { return fmt.Errorf("failed to init action config: %w", err) } listClient := action.NewList(actionConfig) // Only list deployed //listClient.Deployed = true listClient.All = true listClient.SetStateMask() results, err := listClient.Run() if err != nil { return fmt.Errorf("failed to run list action: %w", err) } for _, rel := range results { logger.Printf("list result: %+v", rel) } return nil } ### Pull Action This example pulls a chart from an OCI repository package main import ( "fmt" "log" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" ) func runPull(logger *log.Logger, settings *cli.EnvSettings, chartRef, chartVersion string) error { actionConfig, err := initActionConfig(settings, logger) if err != nil { return fmt.Errorf("failed to init action config: %w", err) } registryClient, err := newRegistryClient(settings, false) if err != nil { return fmt.Errorf("failed to created registry client: %w", err) } actionConfig.RegistryClient = registryClient pullClient := action.NewPullWithOpts( action.WithConfig(actionConfig)) // client.RepoURL = "" pullClient.DestDir = "./" pullClient.Settings = settings pullClient.Version = chartVersion result, err := pullClient.Run(chartRef) if err != nil { return fmt.Errorf("failed to pull chart: %w", err) } logger.Printf("%+v", result) return nil } Driver ------ The driver here shows the necessary auxillary functions needed for the Helm SDK actions to function. And shows the above examples in action, to pull, install, update, and uninstall the 'podinfo' chart from an OCI repository. package main import ( "bufio" "context" "fmt" "log" "os" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" "helm.sh/helm/v3/pkg/registry" ) var helmDriver string = os.Getenv("HELM_DRIVER") func initActionConfig(settings *cli.EnvSettings, logger *log.Logger) (*action.Configuration, error) { return initActionConfigList(settings, logger, false) } func initActionConfigList(settings *cli.EnvSettings, logger *log.Logger, allNamespaces bool) (*action.Configuration, error) { actionConfig := new(action.Configuration) namespace := func() string { // For list action, you can pass an empty string instead of settings.Namespace() to list // all namespaces if allNamespaces { return "" } return settings.Namespace() }() if err := actionConfig.Init( settings.RESTClientGetter(), namespace, helmDriver, logger.Printf); err != nil { return nil, err } return actionConfig, nil } func newRegistryClient(settings *cli.EnvSettings, plainHTTP bool) (*registry.Client, error) { opts := []registry.ClientOption{ registry.ClientOptDebug(settings.Debug), registry.ClientOptEnableCache(true), registry.ClientOptWriter(os.Stderr), registry.ClientOptCredentialsFile(settings.RegistryConfig), } if plainHTTP { opts = append(opts, registry.ClientOptPlainHTTP()) } // Create a new registry client registryClient, err := registry.NewClient(opts...) if err != nil { return nil, err } return registryClient, nil } func newRegistryClientTLS(settings *cli.EnvSettings, logger *log.Logger, certFile, keyFile, caFile string, insecureSkipTLSverify, plainHTTP bool) (*registry.Client, error) { if certFile != "" && keyFile != "" || caFile != "" || insecureSkipTLSverify { registryClient, err := registry.NewRegistryClientWithTLS( logger.Writer(), certFile, keyFile, caFile, insecureSkipTLSverify, settings.RegistryConfig, settings.Debug) if err != nil { return nil, err } return registryClient, nil } registryClient, err := newRegistryClient(settings, plainHTTP) if err != nil { return nil, err } return registryClient, nil } func main() { logger := log.Default() // For convenience, initialize SDK setting via CLI mechanism settings := cli.New() // Release name, chart and values releaseName := "helm-sdk-example" chartRef := "oci://ghcr.io/stefanprodan/charts/podinfo" releaseValues := map[string]interface{}{ "replicaCount": "2", } // Pull the chart to the local filesystem if err := runPull(logger, settings, chartRef, "6.4.1"); err != nil { fmt.Printf("failed to run pull: %+v", err) os.Exit(1) } // Install the chart (from the pulled chart local archive) if err := runInstall(context.TODO(), logger, settings, releaseName, "./podinfo-6.4.1.tgz", "", releaseValues); err != nil { fmt.Printf("failed to run install: %+v", err) os.Exit(1) } // List installed charts if err := runList(logger, settings); err != nil { fmt.Printf("failed to run list: %+v", err) os.Exit(1) } // fmt.Print("Chart installed. Press 'Return' to continue...") bufio.NewReader(os.Stdin).ReadBytes('\n') // Upgrade to version 6.5.4, updating the replicaCount to three releaseValues["replicaCount"] = "3" if err := runUpgrade(context.TODO(), logger, settings, releaseName, chartRef, "6.5.4", releaseValues); err != nil { fmt.Printf("failed to run upgrade: %+v", err) os.Exit(1) } // List installed charts if err := runList(logger, settings); err != nil { fmt.Printf("failed to run list: %+v", err) os.Exit(1) } // fmt.Print("Chart upgraded. Press 'Return' to continue...") bufio.NewReader(os.Stdin).ReadBytes('\n') // Uninstall the chart if err := runUninstall(logger, settings, releaseName); err != nil { fmt.Printf("failed to run uninstall: %+v", err) os.Exit(1) } } [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs How-to Guides ============= Here you’ll find short answers to “How do I….?” types of questions. These how-to guides don’t cover topics in depth – you’ll find that material in the [Topic Guides](https://helm.sh/docs/topics/) . However, these guides will help you quickly accomplish common tasks. ### Quicklinks [#### Chart Development Tips and Tricks\ \ Covers some of the tips and tricks Helm chart developers have learned while building production-quality charts.](https://helm.sh/docs/howto/charts_tips_and_tricks/) [#### Syncing Your Chart Repository\ \ Describes how to synchronize your local and remote chart repositories.](https://helm.sh/docs/howto/chart_repository_sync_example/) [#### Chart Releaser Action to Automate GitHub Page Charts\ \ Describe how to use Chart Releaser Action to automate releasing charts through GitHub pages.](https://helm.sh/docs/howto/chart_releaser_action/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Installing Helm Installing Helm =============== This guide shows how to install the Helm CLI. Helm can be installed either from source, or from pre-built binary releases. From The Helm Project --------------------- The Helm project provides two ways to fetch and install Helm. These are the official methods to get Helm releases. In addition to that, the Helm community provides methods to install Helm through different package managers. Installation through those methods can be found below the official methods. ### From the Binary Releases Every [release](https://github.com/helm/helm/releases) of Helm provides binary releases for a variety of OSes. These binary versions can be manually downloaded and installed. 1. Download your [desired version](https://github.com/helm/helm/releases) 2. Unpack it (`tar -zxvf helm-v3.0.0-linux-amd64.tar.gz`) 3. Find the `helm` binary in the unpacked directory, and move it to its desired destination (`mv linux-amd64/helm /usr/local/bin/helm`) From there, you should be able to run the client and [add the stable chart repository](https://helm.sh/docs/intro/quickstart/#initialize-a-helm-chart-repository) : `helm help`. **Note:** Helm automated tests are performed for Linux AMD64 only during GitHub Actions builds and releases. Testing of other OSes are the responsibility of the community requesting Helm for the OS in question. ### From Script Helm now has an installer script that will automatically grab the latest version of Helm and [install it locally](https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3) . You can fetch that script, and then execute it locally. It's well documented so that you can read through it and understand what it is doing before you run it. $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 $ chmod 700 get_helm.sh $ ./get_helm.sh Yes, you can `curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash` if you want to live on the edge. Through Package Managers ------------------------ The Helm community provides the ability to install Helm through operating system package managers. These are not supported by the Helm project and are not considered trusted 3rd parties. ### From Homebrew (macOS) Members of the Helm community have contributed a Helm formula build to Homebrew. This formula is generally up to date. brew install helm (Note: There is also a formula for emacs-helm, which is a different project.) ### From Chocolatey (Windows) Members of the Helm community have contributed a [Helm package](https://chocolatey.org/packages/kubernetes-helm) build to [Chocolatey](https://chocolatey.org/) . This package is generally up to date. choco install kubernetes-helm ### From Scoop (Windows) Members of the Helm community have contributed a [Helm package](https://github.com/ScoopInstaller/Main/blob/master/bucket/helm.json) build to [Scoop](https://scoop.sh/) . This package is generally up to date. scoop install helm ### From Winget (Windows) Members of the Helm community have contributed a [Helm package](https://github.com/microsoft/winget-pkgs/tree/master/manifests/h/Helm/Helm) build to [Winget](https://learn.microsoft.com/en-us/windows/package-manager/) . This package is generally up to date. winget install Helm.Helm ### From Apt (Debian/Ubuntu) Members of the Helm community have contributed an Apt package for Debian/Ubuntu. This package is generally up to date. Thanks to [Buildkite](https://buildkite.com/organizations/helm-linux/packages/registries/helm-debian) for hosting the repo. sudo apt-get install curl gpg apt-transport-https --yes curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm ### From dnf/yum (fedora) Since Fedora 35, helm is available on the official repository. You can install helm with invoking: sudo dnf install helm ### From Snap The [Snapcrafters](https://github.com/snapcrafters) community maintains the Snap version of the [Helm package](https://snapcraft.io/helm) : sudo snap install helm --classic ### From pkg (FreeBSD) Members of the FreeBSD community have contributed a [Helm package](https://www.freshports.org/sysutils/helm) build to the [FreeBSD Ports Collection](https://man.freebsd.org/ports) . This package is generally up to date. pkg install helm ### Development Builds In addition to releases you can download or install development snapshots of Helm. ### From Canary Builds "Canary" builds are versions of the Helm software that are built from the latest `main` branch. They are not official releases, and may not be stable. However, they offer the opportunity to test the cutting edge features. Canary Helm binaries are stored at [get.helm.sh](https://get.helm.sh/) . Here are links to the common builds: * [Linux AMD64](https://get.helm.sh/helm-canary-linux-amd64.tar.gz) * [macOS AMD64](https://get.helm.sh/helm-canary-darwin-amd64.tar.gz) * [Experimental Windows AMD64](https://get.helm.sh/helm-canary-windows-amd64.zip) ### From Source (Linux, macOS) Building Helm from source is slightly more work, but is the best way to go if you want to test the latest (pre-release) Helm version. You must have a working Go environment. $ git clone https://github.com/helm/helm.git $ cd helm $ make If required, it will fetch the dependencies and cache them, and validate configuration. It will then compile `helm` and place it in `bin/helm`. Conclusion ---------- In most cases, installation is as simple as getting a pre-built `helm` binary. This document covers additional cases for those who want to do more sophisticated things with Helm. Once you have the Helm Client successfully installed, you can move on to using Helm to manage charts and [add the stable chart repository](https://helm.sh/docs/intro/quickstart/#initialize-a-helm-chart-repository) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Installing Installing ========== Installing ---------- ### Why aren't there native packages of Helm for Fedora and other Linux distros? The Helm project does not maintain packages for operating systems and environments. The Helm community may provide native packages and if the Helm project is made aware of them they will be listed. This is how the Homebrew formula was started and listed. If you're interested in maintaining a package, we'd love it. ### Why do you provide a `curl ...|bash` script? There is a script in our repository (`scripts/get-helm-3`) that can be executed as a `curl ..|bash` script. The transfers are all protected by HTTPS, and the script does some auditing of the packages it fetches. However, the script has all the usual dangers of any shell script. We provide it because it is useful, but we suggest that users carefully read the script first. What we'd really like, though, are better packaged releases of Helm. ### How do I put the Helm client files somewhere other than their defaults? Helm uses the XDG structure for storing files. There are environment variables you can use to override these locations: * `$XDG_CACHE_HOME`: set an alternative location for storing cached files. * `$XDG_CONFIG_HOME`: set an alternative location for storing Helm configuration. * `$XDG_DATA_HOME`: set an alternative location for storing Helm data. Note that if you have existing repositories, you will need to re-add them with `helm repo add...`. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Release Checklist Release Checklist ================= A Maintainer's Guide to Releasing Helm ====================================== Time for a new Helm release! As a Helm maintainer cutting a release, you are the best person to [update this release checklist](https://github.com/helm/helm-www/blob/main/content/en/docs/community/release_checklist.md) should your experiences vary from what's documented here. All releases will be of the form vX.Y.Z where X is the major version number, Y is the minor version number and Z is the patch release number. This project strictly follows [semantic versioning](https://semver.org/) so following this step is critical. Helm announces in advance the date of its next minor release. Every effort should be made to respect the announced date. Furthermore, when starting the release process, the date for the next release should have been selected as it will be used in the release process. These directions will cover initial configuration followed by the release process for three different kinds of releases: * Major Releases - released less frequently - have breaking changes * Minor Releases - released every 3 to 4 months - no breaking changes * Patch Releases - released monthly - do not require all steps in this guide [Initial Configuration](https://helm.sh/docs/community/release_checklist/#initial-configuration) 1. [Create the Release Branch](https://helm.sh/docs/community/release_checklist/#1-create-the-release-branch) 2. [Major/Minor releases: Change the Version Number in Git](https://helm.sh/docs/community/release_checklist/#2-majorminor-releases-change-the-version-number-in-git) 3. [Major/Minor releases: Commit and Push the Release Branch](https://helm.sh/docs/community/release_checklist/#3-majorminor-releases-commit-and-push-the-release-branch) 4. [Major/Minor releases: Create a Release Candidate](https://helm.sh/docs/community/release_checklist/#4-majorminor-releases-create-a-release-candidate) 5. [Major/Minor releases: Iterate on Successive Release Candidates](https://helm.sh/docs/community/release_checklist/#5-majorminor-releases-iterate-on-successive-release-candidates) 6. [Finalize the Release](https://helm.sh/docs/community/release_checklist/#6-finalize-the-release) 7. [Write the Release Notes](https://helm.sh/docs/community/release_checklist/#7-write-the-release-notes) 8. [PGP Sign the downloads](https://helm.sh/docs/community/release_checklist/#8-pgp-sign-the-downloads) 9. [Publish Release](https://helm.sh/docs/community/release_checklist/#9-publish-release) 10. [Update Docs](https://helm.sh/docs/community/release_checklist/#10-update-docs) 11. [Tell the Community](https://helm.sh/docs/community/release_checklist/#11-tell-the-community) Initial Configuration --------------------- ### Set Up Git Remote It is important to note that this document assumes that the git remote in your repository that corresponds to [https://github.com/helm/helm](https://github.com/helm/helm) is named "upstream". If yours is not (for example, if you've chosen to name it "origin" or something similar instead), be sure to adjust the listed snippets for your local environment accordingly. If you are not sure what your upstream remote is named, use a command like `git remote -v` to find out. If you don't have an [upstream remote](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork) , you can add one using something like: git remote add upstream git@github.com:helm/helm.git ### Set Up Environment Variables In this doc, we are going to reference a few environment variables as well, which you may want to set for convenience. For major/minor releases, use the following: export RELEASE_NAME=vX.Y.0 export RELEASE_BRANCH_NAME="release-X.Y" export RELEASE_CANDIDATE_NAME="$RELEASE_NAME-rc.1" If you are creating a patch release, use the following instead: export PREVIOUS_PATCH_RELEASE=vX.Y.Z export RELEASE_NAME=vX.Y.Z+1 export RELEASE_BRANCH_NAME="release-X.Y" ### Set Up Signing Key We are also going to be adding security and verification of the release process by hashing the binaries and providing signature files. We perform this using [GitHub and GPG](https://help.github.com/en/articles/about-commit-signature-verification) . If you do not have GPG already setup you can follow these steps: 1. [Install GPG](https://gnupg.org/) 2. [Generate GPG key](https://help.github.com/en/articles/generating-a-new-gpg-key) 3. [Add key to GitHub account](https://help.github.com/en/articles/adding-a-new-gpg-key-to-your-github-account) 4. [Set signing key in Git](https://help.github.com/en/articles/telling-git-about-your-signing-key) Once you have a signing key you need to add it to the KEYS file at the root of the repository. The instructions for adding it to the KEYS file are in the file. If you have not done so already, you need to add your public key to the keyserver network. If you use GnuPG you can follow the [instructions provided by Debian](https://debian-administration.org/article/451/Submitting_your_GPG_key_to_a_keyserver) . 1\. Create the Release Branch ----------------------------- ### Major/Minor Releases Major releases are for new feature additions and behavioral changes _that break backwards compatibility_. Minor releases are for new feature additions that do not break backwards compatibility. To create a major or minor release, start by creating a `release-X.Y` branch from main. git fetch upstream git checkout upstream/main git checkout -b $RELEASE_BRANCH_NAME This new branch is going to be the base for the release, which we are going to iterate upon later. Verify that a [helm/helm milestone](https://github.com/helm/helm/milestones) for the release exists on GitHub (creating it if necessary). Make sure PRs and issues for this release are in this milestone. For major & minor releases, move on to step 2: [Major/Minor releases: Change the Version Number in Git](https://helm.sh/docs/community/release_checklist/#2-majorminor-releases-change-the-version-number-in-git) . ### Patch releases Patch releases are a few critical cherry-picked fixes to existing releases. Start by creating a `release-X.Y` branch: git fetch upstream git checkout -b $RELEASE_BRANCH_NAME upstream/$RELEASE_BRANCH_NAME From here, we can cherry-pick the commits we want to bring into the patch release: # get the commits ids we want to cherry-pick git log --oneline # cherry-pick the commits starting from the oldest one, without including merge commits git cherry-pick -x After the commits have been cherry picked the release branch needs to be pushed. git push upstream $RELEASE_BRANCH_NAME Pushing the branch will cause the tests to run. Make sure they pass prior to creating the tag. This new tag is going to be the base for the patch release. Creating a [helm/helm milestone](https://github.com/helm/helm/milestones) is optional for patch releases. Make sure to check [GitHub Actions](https://github.com/helm/helm/actions) to see that the release passed CI before proceeding. Patch releases can skip steps 2-5 and proceed to step 6 to [Finalize the Release](https://helm.sh/docs/community/release_checklist/#6-finalize-the-release) . 2\. Major/Minor releases: Change the Version Number in Git ---------------------------------------------------------- When doing a major or minor release, make sure to update `internal/version/version.go` with the new release version. $ git diff internal/version/version.go diff --git a/internal/version/version.go b/internal/version/version.go index 712aae64..c1ed191e 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -30,7 +30,7 @@ var ( // Increment major number for new feature additions and behavioral changes. // Increment minor number for bug fixes and performance enhancements. // Increment patch number for critical fixes to existing releases. - version = "v3.3" + version = "v3.4" // metadata is extra build time data metadata = "" In addition to updating the version within the `version.go` file, you will also need to update corresponding tests that are using that version number. * `cmd/helm/testdata/output/version.txt` * `cmd/helm/testdata/output/version-client.txt` * `cmd/helm/testdata/output/version-client-shorthand.txt` * `cmd/helm/testdata/output/version-short.txt` * `cmd/helm/testdata/output/version-template.txt` * `pkg/chartutil/capabilities_test.go` git add . git commit -m "bump version to $RELEASE_NAME" This will update it for the $RELEASE\_BRANCH\_NAME only. You will also need to pull this change into the main branch for when the next release is being created, as in [this example of 3.2 to 3.3](https://github.com/helm/helm/pull/8411/files) , and add it to the milestone for the next release. # get the last commit id i.e. commit to bump the version git log --format="%H" -n 1 # create new branch off main git checkout main git checkout -b bump-version- # cherry pick the commit using id from first command git cherry-pick -x # commit the change git push origin bump-version- 3\. Major/Minor releases: Commit and Push the Release Branch ------------------------------------------------------------ In order for others to start testing, we can now push the release branch upstream and start the test process. git push upstream $RELEASE_BRANCH_NAME Make sure to check [GitHub Actions](https://github.com/helm/helm/actions) to see that the release passed CI before proceeding. If anyone is available, let others peer-review the branch before continuing to ensure that all the proper changes have been made and all of the commits for the release are there. 4\. Major/Minor releases: Create a Release Candidate ---------------------------------------------------- Now that the release branch is out and ready, it is time to start creating and iterating on release candidates. git tag --sign --annotate "${RELEASE_CANDIDATE_NAME}" --message "Helm release ${RELEASE_CANDIDATE_NAME}" git push upstream $RELEASE_CANDIDATE_NAME GitHub Actions will automatically create a tagged release image and client binary to test with. For testers, the process to start testing after GitHub Actions finishes building the artifacts involves the following steps to grab the client: linux/amd64, using /bin/bash: wget https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-linux-amd64.tar.gz darwin/amd64, using Terminal.app: wget https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-darwin-amd64.tar.gz windows/amd64, using PowerShell: PS C:\> Invoke-WebRequest -Uri "https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-windows-amd64.tar.gz" -OutFile "helm-$ReleaseCandidateName-windows-amd64.tar.gz" Then, unpack and move the binary to somewhere on your $PATH, or move it somewhere and add it to your $PATH (e.g. /usr/local/bin/helm for linux/macOS, C:\\Program Files\\helm\\helm.exe for Windows). 5\. Major/Minor releases: Iterate on Successive Release Candidates ------------------------------------------------------------------ Spend several days explicitly investing time and resources to try and break helm in every possible way, documenting any findings pertinent to the release. This time should be spent testing and finding ways in which the release might have caused various features or upgrade environments to have issues, not coding. During this time, the release is in code freeze, and any additional code changes will be pushed out to the next release. During this phase, the $RELEASE\_BRANCH\_NAME branch will keep evolving as you will produce new release candidates. The frequency of new candidates is up to the release manager: use your best judgement taking into account the severity of reported issues, testers' availability, and the release deadline date. Generally speaking, it is better to let a release roll over the deadline than to ship a broken release. Each time you'll want to produce a new release candidate, you will start by adding commits to the branch by cherry-picking from main: git cherry-pick -x You will also want to push the branch to GitHub and ensure it passes CI. After that, tag it and notify users of the new release candidate: export RELEASE_CANDIDATE_NAME="$RELEASE_NAME-rc.2" git tag --sign --annotate "${RELEASE_CANDIDATE_NAME}" --message "Helm release ${RELEASE_CANDIDATE_NAME}" git push upstream $RELEASE_CANDIDATE_NAME Once pushed to GitHub, check to ensure the branch with this tag builds in CI. From here on just repeat this process, continuously testing until you're happy with the release candidate. For a release candidate, we don't write the full notes, but you can scaffold out some [release notes](https://helm.sh/docs/community/release_checklist/#7-write-the-release-notes) . 6\. Finalize the Release ------------------------ When you're finally happy with the quality of a release candidate, you can move on and create the real thing. Double-check one last time to make sure everything is in order, then finally push the release tag. git checkout $RELEASE_BRANCH_NAME git tag --sign --annotate "${RELEASE_NAME}" --message "Helm release ${RELEASE_NAME}" git push upstream $RELEASE_NAME Verify that the release succeeded in [GitHub Actions](https://github.com/helm/helm/actions) . If not, you will need to fix the release and push the release again. As the CI job will take some time to run, you can move on to writing release notes while you wait for it to complete. 7\. Write the Release Notes --------------------------- We will auto-generate a changelog based on the commits that occurred during a release cycle, but it is usually more beneficial to the end-user if the release notes are hand-written by a human being/marketing team/dog. If you're releasing a major/minor release, listing notable user-facing features is usually sufficient. For patch releases, do the same, but make note of the symptoms and who is affected. The release notes should include the version and planned date of the next release. An example release note for a minor release would look like this: ## vX.Y.Z Helm vX.Y.Z is a feature release. This release, we focused on . Users are encouraged to upgrade for the best experience. The community keeps growing, and we'd love to see you there! - Join the discussion in [Kubernetes Slack](https://kubernetes.slack.com): - `#helm-users` for questions and just to hang out - `#helm-dev` for discussing PRs, code, and bugs - Hang out at the Public Developer Call: Thursday, 9:30 Pacific via [Zoom](https://zoom.us/j/696660622) - Test, debug, and contribute charts: [Artifact Hub helm charts](https://artifacthub.io/packages/search?kind=0) ## Notable Changes - Kubernetes 1.16 is now supported including new manifest apiVersions - Sprig was upgraded to 2.22 ## Installation and Upgrading Download Helm X.Y. The common platform binaries are here: - [MacOS amd64](https://get.helm.sh/helm-vX.Y.Z-darwin-amd64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-darwin-amd64.tar.gz.sha256sum) / CHECKSUM_VAL) - [Linux amd64](https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz.sha256sum) / CHECKSUM_VAL) - [Linux arm](https://get.helm.sh/helm-vX.Y.Z-linux-arm.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-arm.tar.gz.sha256) / CHECKSUM_VAL) - [Linux arm64](https://get.helm.sh/helm-vX.Y.Z-linux-arm64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-arm64.tar.gz.sha256sum) / CHECKSUM_VAL) - [Linux i386](https://get.helm.sh/helm-vX.Y.Z-linux-386.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-386.tar.gz.sha256) / CHECKSUM_VAL) - [Linux ppc64le](https://get.helm.sh/helm-vX.Y.Z-linux-ppc64le.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-ppc64le.tar.gz.sha256sum) / CHECKSUM_VAL) - [Linux s390x](https://get.helm.sh/helm-vX.Y.Z-linux-s390x.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-s390x.tar.gz.sha256sum) / CHECKSUM_VAL) - [Windows amd64](https://get.helm.sh/helm-vX.Y.Z-windows-amd64.zip) ([checksum](https://get.helm.sh/helm-vX.Y.Z-windows-amd64.zip.sha256sum) / CHECKSUM_VAL) The [Quickstart Guide](https://docs.helm.sh/using_helm/#quickstart-guide) will get you going from there. For **upgrade instructions** or detailed installation notes, check the [install guide](https://docs.helm.sh/using_helm/#installing-helm). You can also use a [script to install](https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3) on any system with `bash`. ## What's Next - vX.Y.Z+1 will contain only bug fixes and is planned for . - vX.Y+1.0 is the next feature release and is planned for . This release will focus on ... ## Changelog - chore(*): bump version to v2.7.0 08c1144f5eb3e3b636d9775617287cc26e53dba4 (Adam Reese) - fix circle not building tags f4f932fabd197f7e6d608c8672b33a483b4b76fa (Matthew Fisher) A partially completed set of release notes including the changelog can be created by running the following command: export VERSION="$RELEASE_NAME" export PREVIOUS_RELEASE=vX.Y.Z make clean make fetch-dist make release-notes This will create a good baseline set of release notes to which you should just need to fill out the **Notable Changes** and **What's next** sections. Feel free to add your voice to the release notes; it's nice for people to think we're not all robots. You should also double check the URLs and checksums are correct in the auto-generated release notes. Once finished, go into GitHub to [helm/helm releases](https://github.com/helm/helm/releases) and edit the release notes for the tagged release with the notes written here. For target branch, set to $RELEASE\_BRANCH\_NAME. It is now worth getting other people to take a look at the release notes before the release is published. Send a request out to [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) for review. It is always beneficial as it can be easy to miss something. 8\. PGP Sign the downloads -------------------------- While hashes provide a signature that the content of the downloads is what it was generated, signed packages provide traceability of where the package came from. To do this, run the following `make` commands: export VERSION="$RELEASE_NAME" make clean # if not already run make fetch-dist # if not already run make sign This will generate ascii armored signature files for each of the files pushed by CI. All of the signature files (`*.asc`) need to be uploaded to the release on GitHub (attach binaries). 9\. Publish Release ------------------- Time to make the release official! After the release notes are saved on GitHub, the CI build is completed, and you've added the signature files to the release, you can hit "Publish" on the release. This publishes the release, listing it as "latest", and shows this release on the front page of the [helm/helm](https://github.com/helm/helm) repo. 10\. Update Docs ---------------- The [Helm website docs section](https://helm.sh/docs) lists the Helm versions for the docs. Major, minor, and patch versions need to be updated on the site. The date for the next minor release is also published on the site and must be updated. To do that create a pull request against the [helm-www repository](https://github.com/helm/helm-www) . In the `config.toml` file find the proper `params.versions` section and update the Helm version, like in this example of [updating the current version](https://github.com/helm/helm-www/pull/676/files) . In the same `config.toml` file, update the `params.nextversion` section. Close the [helm/helm milestone](https://github.com/helm/helm/milestones) for the release, if applicable. Update the [version skew](https://github.com/helm/helm-www/blob/main/content/en/docs/topics/version_skew.md) for major and minor releases. Update the release calendar [here](https://helm.sh/calendar/release) : * create an entry for the next minor release with a reminder for that day at 5pm GMT * create an entry for the RC1 of the next minor release on the Monday of the week before the planned release, with a reminder for that day at 5pm GMT 11\. Tell the Community ----------------------- Congratulations! You're done. Go grab yourself a $DRINK\_OF\_CHOICE. You've earned it. After enjoying a nice $DRINK\_OF\_CHOICE, go forth and announce the new release in Slack and on Twitter with a link to the [release on GitHub](https://github.com/helm/helm/releases) . Optionally, write a blog post about the new release and showcase some of the new features on there! [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Syncing Your Chart Repository Syncing Your Chart Repository ============================= _Note: This example is specifically for a Google Cloud Storage (GCS) bucket which serves a chart repository._ Prerequisites ------------- * Install the [gsutil](https://cloud.google.com/storage/docs/gsutil) tool. _We rely heavily on the gsutil rsync functionality_ * Be sure to have access to the Helm binary * _Optional: We recommend you set [object versioning](https://cloud.google.com/storage/docs/gsutil/addlhelp/ObjectVersioningandConcurrencyControl#top_of_page) on your GCS bucket in case you accidentally delete something._ Set up a local chart repository directory ----------------------------------------- Create a local directory like we did in [the chart repository guide](https://helm.sh/docs/topics/chart_repository/) , and place your packaged charts in that directory. For example: $ mkdir fantastic-charts $ mv alpine-0.1.0.tgz fantastic-charts/ Generate an updated index.yaml ------------------------------ Use Helm to generate an updated index.yaml file by passing in the directory path and the url of the remote repository to the `helm repo index` command like this: $ helm repo index fantastic-charts/ --url https://fantastic-charts.storage.googleapis.com This will generate an updated index.yaml file and place it in the `fantastic-charts/` directory. Sync your local and remote chart repositories --------------------------------------------- Upload the contents of the directory to your GCS bucket by running `scripts/sync-repo.sh` and pass in the local directory name and the GCS bucket name. For example: $ pwd /Users/me/code/go/src/helm.sh/helm $ scripts/sync-repo.sh fantastic-charts/ fantastic-charts Getting ready to sync your local directory (fantastic-charts/) to a remote repository at gs://fantastic-charts Verifying Prerequisites.... Thumbs up! Looks like you have gsutil. Let's continue. Building synchronization state... Starting synchronization Would copy file://fantastic-charts/alpine-0.1.0.tgz to gs://fantastic-charts/alpine-0.1.0.tgz Would copy file://fantastic-charts/index.yaml to gs://fantastic-charts/index.yaml Are you sure you would like to continue with these changes?? [y/N]} y Building synchronization state... Starting synchronization Copying file://fantastic-charts/alpine-0.1.0.tgz [Content-Type=application/x-tar]... Uploading gs://fantastic-charts/alpine-0.1.0.tgz: 740 B/740 B Copying file://fantastic-charts/index.yaml [Content-Type=application/octet-stream]... Uploading gs://fantastic-charts/index.yaml: 347 B/347 B Congratulations your remote chart repository now matches the contents of fantastic-charts/ Updating your chart repository ------------------------------ You'll want to keep a local copy of the contents of your chart repository or use `gsutil rsync` to copy the contents of your remote chart repository to a local directory. For example: $ gsutil rsync -d -n gs://bucket-name local-dir/ # the -n flag does a dry run Building synchronization state... Starting synchronization Would copy gs://bucket-name/alpine-0.1.0.tgz to file://local-dir/alpine-0.1.0.tgz Would copy gs://bucket-name/index.yaml to file://local-dir/index.yaml $ gsutil rsync -d gs://bucket-name local-dir/ # performs the copy actions Building synchronization state... Starting synchronization Copying gs://bucket-name/alpine-0.1.0.tgz... Downloading file://local-dir/alpine-0.1.0.tgz: 740 B/740 B Copying gs://bucket-name/index.yaml... Downloading file://local-dir/index.yaml: 346 B/346 B Helpful Links: * Documentation on [gsutil rsync](https://cloud.google.com/storage/docs/gsutil/commands/rsync#description) * [The Chart Repository Guide](https://helm.sh/docs/topics/chart_repository/) * Documentation on [object versioning and concurrency control](https://cloud.google.com/storage/docs/gsutil/addlhelp/ObjectVersioningandConcurrencyControl#overview) in Google Cloud Storage [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Values Values ====== This part of the best practices guide covers using values. In this part of the guide, we provide recommendations on how you should structure and use your values, with focus on designing a chart's `values.yaml` file. Naming Conventions ------------------ Variable names should begin with a lowercase letter, and words should be separated with camelcase: Correct: chicken: true chickenNoodleSoup: true Incorrect: Chicken: true # initial caps may conflict with built-ins chicken-noodle-soup: true # do not use hyphens in the name Note that all of Helm's built-in variables begin with an uppercase letter to easily distinguish them from user-defined values: `.Release.Name`, `.Capabilities.KubeVersion`. Flat or Nested Values --------------------- YAML is a flexible format, and values may be nested deeply or flattened. Nested: server: name: nginx port: 80 Flat: serverName: nginx serverPort: 80 In most cases, flat should be favored over nested. The reason for this is that it is simpler for template developers and users. For optimal safety, a nested value must be checked at every level: {{ if .Values.server }} {{ default "none" .Values.server.name }} {{ end }} For every layer of nesting, an existence check must be done. But for flat configuration, such checks can be skipped, making the template easier to read and use. {{ default "none" .Values.serverName }} When there are a large number of related variables, and at least one of them is non-optional, nested values may be used to improve readability. Make Types Clear ---------------- YAML's type coercion rules are sometimes counterintuitive. For example, `foo: false` is not the same as `foo: "false"`. Large integers like `foo: 12345678` will get converted to scientific notation in some cases. The easiest way to avoid type conversion errors is to be explicit about strings, and implicit about everything else. Or, in short, _quote all strings_. Often, to avoid the integer casting issues, it is advantageous to store your integers as strings as well, and use `{{ int $value }}` in the template to convert from a string back to an integer. In most cases, explicit type tags are respected, so `foo: !!string 1234` should treat `1234` as a string. _However_, the YAML parser consumes tags, so the type data is lost after one parse. Consider How Users Will Use Your Values --------------------------------------- There are three potential sources of values: * A chart's `values.yaml` file * A values file supplied by `helm install -f` or `helm upgrade -f` * The values passed to a `--set` or `--set-string` flag on `helm install` or `helm upgrade` When designing the structure of your values, keep in mind that users of your chart may want to override them via either the `-f` flag or with the `--set` option. Since `--set` is more limited in expressiveness, the first guidelines for writing your `values.yaml` file is _make it easy to override from `--set`_. For this reason, it's often better to structure your values file using maps. Difficult to use with `--set`: servers: - name: foo port: 80 - name: bar port: 81 The above cannot be expressed with `--set` in Helm `<=2.4`. In Helm 2.5, accessing the port on foo is `--set servers[0].port=80`. Not only is it harder for the user to figure out, but it is prone to errors if at some later time the order of the `servers` is changed. Easy to use: servers: foo: port: 80 bar: port: 81 Accessing foo's port is much more obvious: `--set servers.foo.port=80`. Document `values.yaml` ---------------------- Every defined property in `values.yaml` should be documented. The documentation string should begin with the name of the property that it describes, and then give at least a one-sentence description. Incorrect: # the host name for the webserver serverHost: example serverPort: 9191 Correct: # serverHost is the host name for the webserver serverHost: example # serverPort is the HTTP listener port for the webserver serverPort: 9191 Beginning each comment with the name of the parameter it documents makes it easy to grep out documentation, and will enable documentation tools to reliably correlate doc strings with the parameters they describe. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Built-in Objects Built-in Objects ================ Objects are passed into a template from the template engine. And your code can pass objects around (we'll see examples when we look at the `with` and `range` statements). There are even a few ways to create new objects within your templates, like with the `tuple` function we'll see later. Objects can be simple, and have just one value. Or they can contain other objects or functions. For example, the `Release` object contains several objects (like `Release.Name`) and the `Files` object has a few functions. In the previous section, we use `{{ .Release.Name }}` to insert the name of a release into a template. `Release` is one of the top-level objects that you can access in your templates. * `Release`: This object describes the release itself. It has several objects inside of it: * `Release.Name`: The release name * `Release.Namespace`: The namespace to be released into (if the manifest doesn’t override) * `Release.IsUpgrade`: This is set to `true` if the current operation is an upgrade or rollback. * `Release.IsInstall`: This is set to `true` if the current operation is an install. * `Release.Revision`: The revision number for this release. On install, this is 1, and it is incremented with each upgrade and rollback. * `Release.Service`: The service that is rendering the present template. On Helm, this is always `Helm`. * `Values`: Values passed into the template from the `values.yaml` file and from user-supplied files. By default, `Values` is empty. * `Chart`: The contents of the `Chart.yaml` file. Any data in `Chart.yaml` will be accessible here. For example `{{ .Chart.Name }}-{{ .Chart.Version }}` will print out the `mychart-0.1.0`. * The available fields are listed in the [Charts Guide](https://helm.sh/docs/topics/charts/#the-chartyaml-file) * `Subcharts`: This provides access to the scope (.Values, .Charts, .Releases etc.) of subcharts to the parent. For example `.Subcharts.mySubChart.myValue` to access the `myValue` in the `mySubChart` chart. * `Files`: This provides access to all non-special files in a chart. While you cannot use it to access templates, you can use it to access other files in the chart. See the section [Accessing Files](https://helm.sh/docs/chart_template_guide/accessing_files/) for more. * `Files.Get` is a function for getting a file by name (`.Files.Get config.ini`) * `Files.GetBytes` is a function for getting the contents of a file as an array of bytes instead of as a string. This is useful for things like images. * `Files.Glob` is a function that returns a list of files whose names match the given shell glob pattern. * `Files.Lines` is a function that reads a file line-by-line. This is useful for iterating over each line in a file. * `Files.AsSecrets` is a function that returns the file bodies as Base 64 encoded strings. * `Files.AsConfig` is a function that returns file bodies as a YAML map. * `Capabilities`: This provides information about what capabilities the Kubernetes cluster supports. * `Capabilities.APIVersions` is a set of versions. * `Capabilities.APIVersions.Has $version` indicates whether a version (e.g., `batch/v1`) or resource (e.g., `apps/v1/Deployment`) is available on the cluster. * `Capabilities.KubeVersion` and `Capabilities.KubeVersion.Version` is the Kubernetes version. * `Capabilities.KubeVersion.Major` is the Kubernetes major version. * `Capabilities.KubeVersion.Minor` is the Kubernetes minor version. * `Capabilities.HelmVersion` is the object containing the Helm Version details, it is the same output of `helm version`. * `Capabilities.HelmVersion.Version` is the current Helm version in semver format. * `Capabilities.HelmVersion.GitCommit` is the Helm git sha1. * `Capabilities.HelmVersion.GitTreeState` is the state of the Helm git tree. * `Capabilities.HelmVersion.GoVersion` is the version of the Go compiler used. * `Template`: Contains information about the current template that is being executed * `Template.Name`: A namespaced file path to the current template (e.g. `mychart/templates/mytemplate.yaml`) * `Template.BasePath`: The namespaced path to the templates directory of the current chart (e.g. `mychart/templates`). The built-in values always begin with a capital letter. This is in keeping with Go's naming convention. When you create your own names, you are free to use a convention that suits your team. Some teams, like many whose charts you may see on [Artifact Hub](https://artifacthub.io/packages/search?kind=0) , choose to use only initial lower case letters in order to distinguish local names from those built-in. In this guide, we follow that convention. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Chart Releaser Action to Automate GitHub Page Charts Chart Releaser Action to Automate GitHub Page Charts ==================================================== This guide describes how to use [Chart Releaser Action](https://github.com/marketplace/actions/helm-chart-releaser) to automate releasing charts through GitHub pages. Chart Releaser Action is a GitHub Action workflow to turn a GitHub project into a self-hosted Helm chart repo, using [helm/chart-releaser](https://github.com/helm/chart-releaser) CLI tool. Repository Changes ------------------ Create a Git repository under your GitHub organization. You could give the name of the repository as `helm-charts`, though other names are also acceptable. The sources of all the charts can be placed under the `main` branch. The charts should be placed under `/charts` directory at the top-level of the directory tree. There should be another branch named `gh-pages` to publish the charts. The changes to that branch will be automatically created by the Chart Releaser Action described here. However, you can create that `gh-branch` and add `README.md` file, which is going to be visible to the users visiting the page. You can add instruction in the `README.md` for charts installation like this (replace ``, ``, and ``): ## Usage [Helm](https://helm.sh) must be installed to use the charts. Please refer to Helm's [documentation](https://helm.sh/docs) to get started. Once Helm has been set up correctly, add the repo as follows: helm repo add https://.github.io/helm-charts If you had already added this repo earlier, run `helm repo update` to retrieve the latest versions of the packages. You can then run `helm search repo ` to see the charts. To install the chart: helm install my- / To uninstall the chart: helm uninstall my- The charts will be published to a website with URL like this: https://.github.io/helm-charts GitHub Actions Workflow ----------------------- Create GitHub Actions workflow file in the `main` branch at `.github/workflows/release.yml` name: Release Charts on: push: branches: - main jobs: release: permissions: contents: write runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Run chart-releaser uses: helm/chart-releaser-action@v1.6.0 env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" The above configuration uses [@helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) to turn your GitHub project into a self-hosted Helm chart repo. It does this - during every push to main - by checking each chart in your project, and whenever there's a new chart version, creates a corresponding GitHub release named for the chart version, adds Helm chart artifacts to the release, and creates or updates an `index.yaml` file with metadata about those releases, which is then hosted on GitHub pages. The Chart Releaser Action version number used in the above example is `v1.6.0`. You can change it to the [latest available version](https://github.com/helm/chart-releaser-action/releases) . Note: The Chart Releaser Action is almost always used in tandem with the [Helm Testing Action](https://github.com/marketplace/actions/helm-chart-testing) and [Kind Action](https://github.com/marketplace/actions/kind-cluster) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Chart Tests Chart Tests =========== A chart contains a number of Kubernetes resources and components that work together. As a chart author, you may want to write some tests that validate that your chart works as expected when it is installed. These tests also help the chart consumer understand what your chart is supposed to do. A **test** in a helm chart lives under the `templates/` directory and is a job definition that specifies a container with a given command to run. The container should exit successfully (exit 0) for a test to be considered a success. The job definition must contain the helm test hook annotation: `helm.sh/hook: test`. Note that until Helm v3, the job definition needed to contain one of these helm test hook annotations: `helm.sh/hook: test-success` or `helm.sh/hook: test-failure`. `helm.sh/hook: test-success` is still accepted as a backwards-compatible alternative to `helm.sh/hook: test`. Example tests: * Validate that your configuration from the values.yaml file was properly injected. * Make sure your username and password work correctly * Make sure an incorrect username and password does not work * Assert that your services are up and correctly load balancing * etc. You can run the pre-defined tests in Helm on a release using the command `helm test `. For a chart consumer, this is a great way to check that their release of a chart (or application) works as expected. Example Test ------------ The [helm create](https://helm.sh/docs/helm/helm_create/) command will automatically create a number of folders and files. To try the helm test functionality, first create a demo helm chart. $ helm create demo You will now be able to see the following structure in your demo helm chart. demo/ Chart.yaml values.yaml charts/ templates/ templates/tests/test-connection.yaml In `demo/templates/tests/test-connection.yaml` you'll see a test you can try. You can see the helm test pod definition here: apiVersion: v1 kind: Pod metadata: name: "{{ include "demo.fullname" . }}-test-connection" labels: {{- include "demo.labels" . | nindent 4 }} annotations: "helm.sh/hook": test spec: containers: - name: wget image: busybox command: ['wget'] args: ['{{ include "demo.fullname" . }}:{{ .Values.service.port }}'] restartPolicy: Never Steps to Run a Test Suite on a Release -------------------------------------- First, install the chart on your cluster to create a release. You may have to wait for all pods to become active; if you test immediately after this install, it is likely to show a transitive failure, and you will want to re-test. $ helm install demo demo --namespace default $ helm test demo NAME: demo LAST DEPLOYED: Mon Feb 14 20:03:16 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: demo-test-connection Last Started: Mon Feb 14 20:35:19 2022 Last Completed: Mon Feb 14 20:35:23 2022 Phase: Succeeded [...] Notes ----- * You can define as many tests as you would like in a single yaml file or spread across several yaml files in the `templates/` directory. * You are welcome to nest your test suite under a `tests/` directory like `/templates/tests/` for more isolation. * A test is a [Helm hook](https://helm.sh/docs/charts_hooks/) , so annotations like `helm.sh/hook-weight` and `helm.sh/hook-delete-policy` may be used with test resources. * Often the contents in the `tests/` directory does not need to be packaged and published. Consider adding `tests/` to the `.helmignore` file. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Related Projects and Documentation Related Projects and Documentation ================================== The Helm community has produced many extra tools, plugins, and documentation about Helm. We love to hear about these projects. If you have anything you'd like to add to this list, please open an [issue](https://github.com/helm/helm-www/issues) or [pull request](https://github.com/helm/helm-www/pulls) . Helm Plugins ------------ * [helm-adopt](https://github.com/HamzaZo/helm-adopt) - A helm v3 plugin to adopt existing k8s resources into a new generated helm chart. * [helm-cel](https://github.com/idsulik/helm-cel) - Plugin that uses Common Expression Language (CEL) to validate values. * [helm-chartsnap](https://github.com/jlandowner/helm-chartsnap) - Snapshot testing plugin for Helm charts. * [Helm Diff](https://github.com/databus23/helm-diff) - Preview `helm upgrade` as a coloured diff * [Helm Dt](https://github.com/vmware-labs/distribution-tooling-for-helm) - Plugin that helps distributing Helm charts across OCI registries and on Air gap environments * [Helm Dashboard](https://github.com/komodorio/helm-dashboard) - GUI for Helm, visualize releases and repositories, manifest diffs * [helm-gcs](https://github.com/hayorov/helm-gcs) - Plugin to manage repositories on Google Cloud Storage * [helm-git](https://github.com/aslafy-z/helm-git) - Install charts and retrieve values files from your Git repositories * [helm-k8comp](https://github.com/cststack/k8comp) - Plugin to create Helm Charts from hiera using k8comp * [helm-mapkubeapis](https://github.com/helm/helm-mapkubeapis) - Update helm release metadata to replace deprecated or removed Kubernetes APIs * [helm-migrate-values](https://github.com/OctopusDeployLabs/helm-migrate-values) - Plugin to migrate user-specified values across Helm chart versions to handle breaking schema changes in `values.yaml` * [helm-monitor](https://github.com/ContainerSolutions/helm-monitor) - Plugin to monitor a release and rollback based on Prometheus/ElasticSearch query * [helm-release-plugin](https://github.com/JovianX/helm-release-plugin) - Plugin for Release management, Update release values, pulls(re-creates) helm Charts from deployed releases, set helm release TTL. * [helm-s3](https://github.com/hypnoglow/helm-s3) - Helm plugin that allows to use AWS S3 as a \[private\] chart repository * [helm-secrets](https://github.com/jkroepke/helm-secrets) - Plugin to manage and store secrets safely (based on [sops](https://github.com/mozilla/sops) ) * [helm-sigstore](https://github.com/sigstore/helm-sigstore) - Plugin for Helm to integrate the [sigstore](https://sigstore.dev/) ecosystem. Search, upload and verify signed Helm charts. * [helm-tanka](https://github.com/Duologic/helm-tanka) - A Helm plugin for rendering Tanka/Jsonnet inside Helm charts. * [hc-unit](https://github.com/xchapter7x/hcunit) - Plugin for unit testing charts locally using OPA (Open Policy Agent) & Rego * [helm-unittest](https://github.com/helm-unittest/helm-unittest) - Plugin for unit testing chart locally with YAML * [helm-val](https://github.com/HamzaZo/helm-val) - A plugin to get values from a previous release. * [helm-external-val](https://github.com/kuuji/helm-external-val) - A plugin that fetches helm values from external sources (configMaps, Secrets, etc.) * [helm-images](https://github.com/nikhilsbhat/helm-images) - Helm plugin to fetch all possible images from the chart before deployment or from a deployed release * [helm-drift](https://github.com/nikhilsbhat/helm-drift) - Helm plugin that identifies the configuration that has drifted from the Helm chart * [helm-tui](https://github.com/pidanou/helm-tui) - A light UI to manage your Helm assets without leaving the terminal We also encourage GitHub authors to use the [helm-plugin](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories) tag on their plugin repositories. Additional Tools ---------------- Tools layered on top of Helm. * [Aptakube](https://aptakube.com/) - Desktop UI for Kubernetes and Helm Releases * [Armada](https://airshipit.readthedocs.io/projects/armada/en/latest/) - Manage prefixed releases throughout various Kubernetes namespaces, and removes completed jobs for complex deployments * [avionix](https://github.com/zbrookle/avionix) - Python interface for generating Helm charts and Kubernetes yaml, allowing for inheritance and less duplication of code * [Botkube](https://botkube.io/) - Run Helm commands directly from Slack, Discord, Microsoft Teams, and Mattermost. * [Captain](https://github.com/alauda/captain) - A Helm3 Controller using HelmRequest and Release CRD * [Chartify](https://github.com/appscode/chartify) - Generate Helm charts from existing Kubernetes resources. * [ChartMuseum](https://github.com/helm/chartmuseum) - Helm Chart Repository with support for Amazon S3 and Google Cloud Storage * [chart-registry](https://github.com/hangyan/chart-registry) - Helm Charts Hosts on OCI Registry * [Codefresh](https://codefresh.io/) - Kubernetes native CI/CD and management platform with UI dashboards for managing Helm charts and releases * ⁠ [Cyclops](https://cyclops-ui.com/) - Dynamic Kubernetes UI rendering based on Helm charts * [Flux](https://fluxcd.io/docs/components/helm/) - Continuous and progressive delivery from Git to Kubernetes. * [Helmfile](https://github.com/helmfile/helmfile) - Helmfile is a declarative spec for deploying helm charts * [Helmper](https://github.com/ChristofferNissen/helmper) - Helmper helps you import Helm Charts - including all OCI artifacts(images), to your own OCI registries. Helmper also facilitates security scanning and patching of OCI images. Helmper utilizes Helm, Oras, Trivy, Copacetic and Buildkitd. * [Helmsman](https://github.com/Praqma/helmsman) - Helmsman is a helm-charts-as-code tool which enables installing/upgrading/protecting/moving/deleting releases from version controlled desired state files (described in a simple TOML format) * [HULL](https://github.com/vidispine/hull) - This library chart provides a ready-to-use interface for specifying all Kubernetes objects directly in the `values.yaml`. It removes the need to write any templates for your charts and comes with many additional features to simplify Helm chart creation and usage. * [K8Studio](https://k8studio.io/) - Desktop UI for Managing Kubernetes Clusters with Integrated Helm Manager. * [Konveyor Move2Kube](https://konveyor.io/move2kube/) - Generate Helm charts for your existing projects. * [Landscaper](https://github.com/Eneco/landscaper/) - "Landscaper takes a set of Helm Chart references with values (a desired state), and realizes this in a Kubernetes cluster." * [Monocular](https://github.com/helm/monocular) - Web UI for Helm Chart repositories * [Monokle](https://monokle.io/) - Desktop tool for creating, debugging and deploying Kubernetes resources and Helm Charts * [Orkestra](https://azure.github.io/orkestra/) - A cloud-native Release Orchestration and Lifecycle Management (LCM) platform for a related group of Helm releases and their subcharts * [Tanka](https://tanka.dev/helm) - Grafana Tanka configures Kubernetes resources through Jsonnet with the ability to consume Helm Charts * [Terraform Helm Provider](https://github.com/hashicorp/terraform-provider-helm) - The Helm provider for HashiCorp Terraform enables lifecycle management of Helm Charts with a declarative infrastructure-as-code syntax. The Helm provider is often paired the other Terraform providers, like the Kubernetes provider, to create a common workflow across all infrastructure services. * [VIM-Kubernetes](https://github.com/andrewstuart/vim-kubernetes) - VIM plugin for Kubernetes and Helm Helm Included ------------- Platforms, distributions, and services that include Helm support. * [Kubernetic](https://kubernetic.com/) - Kubernetes Desktop Client * [Jenkins X](https://jenkins-x.io/) - open source automated CI/CD for Kubernetes which uses Helm for [promoting](https://jenkins-x.io/docs/getting-started/promotion/) applications through environments via GitOps Misc ---- Grab bag of useful things for Chart authors and Helm users. * [Await](https://github.com/saltside/await) - Docker image to "await" different conditions--especially useful for init containers. [More Info](https://blog.slashdeploy.com/2017/02/16/introducing-await/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Templates Templates ========= This part of the Best Practices Guide focuses on templates. Structure of `templates/` ------------------------- The `templates/` directory should be structured as follows: * Template files should have the extension `.yaml` if they produce YAML output. The extension `.tpl` may be used for template files that produce no formatted content. * Template file names should use dashed notation (`my-example-configmap.yaml`), not camelcase. * Each resource definition should be in its own template file. * Template file names should reflect the resource kind in the name. e.g. `foo-pod.yaml`, `bar-svc.yaml` Names of Defined Templates -------------------------- Defined templates (templates created inside a `{{ define }}` directive) are globally accessible. That means that a chart and all of its subcharts will have access to all of the templates created with `{{ define }}`. For that reason, _all defined template names should be namespaced._ Correct: {{- define "nginx.fullname" }} {{/* ... */}} {{ end -}} Incorrect: {{- define "fullname" -}} {{/* ... */}} {{ end -}} It is highly recommended that new charts are created via `helm create` command as the template names are automatically defined as per this best practice. Formatting Templates -------------------- Templates should be indented using _two spaces_ (never tabs). Template directives should have whitespace after the opening braces and before the closing braces: Correct: {{ .foo }} {{ print "foo" }} {{- print "bar" -}} Incorrect: {{.foo}} {{print "foo"}} {{-print "bar"-}} Templates should chomp whitespace where possible: foo: {{- range .Values.items }} {{ . }} {{ end -}} Blocks (such as control structures) may be indented to indicate flow of the template code. {{ if $foo -}} {{- with .Bar }}Hello{{ end -}} {{- end -}} However, since YAML is a whitespace-oriented language, it is often not possible for code indentation to follow that convention. Whitespace in Generated Templates --------------------------------- It is preferable to keep the amount of whitespace in generated templates to a minimum. In particular, numerous blank lines should not appear adjacent to each other. But occasional empty lines (particularly between logical sections) is fine. This is best: apiVersion: batch/v1 kind: Job metadata: name: example labels: first: first second: second This is okay: apiVersion: batch/v1 kind: Job metadata: name: example labels: first: first second: second But this should be avoided: apiVersion: batch/v1 kind: Job metadata: name: example labels: first: first second: second Comments (YAML Comments vs. Template Comments) ---------------------------------------------- Both YAML and Helm Templates have comment markers. YAML comments: # This is a comment type: sprocket Template Comments: {{- /* This is a comment. */}} type: frobnitz Template comments should be used when documenting features of a template, such as explaining a defined template: {{- /* mychart.shortname provides a 6 char truncated version of the release name. */}} {{ define "mychart.shortname" -}} {{ .Release.Name | trunc 6 }} {{- end -}} Inside of templates, YAML comments may be used when it is useful for Helm users to (possibly) see the comments during debugging. # This may cause problems if the value is more than 100Gi memory: {{ .Values.maxMem | quote }} The comment above is visible when the user runs `helm install --debug`, while comments specified in `{{- /* */}}` sections are not. Beware of adding `#` YAML comments on template sections containing Helm values that may be required by certain template functions. For example, if `required` function is introduced to the above example, and `maxMem` is unset, then a `#` YAML comment will introduce a rendering error. Correct: `helm template` does not render this block {{- /* # This may cause problems if the value is more than 100Gi memory: {{ required "maxMem must be set" .Values.maxMem | quote }} */ -}} Incorrect: `helm template` returns `Error: execution error at (templates/test.yaml:2:13): maxMem must be set` # This may cause problems if the value is more than 100Gi # memory: {{ required .Values.maxMem "maxMem must be set" | quote }} Review [Debugging Templates](https://helm.sh/docs/chart_template_guide/debugging/) for another example of this behavior of how YAML comments are left intact. Use of JSON in Templates and Template Output -------------------------------------------- YAML is a superset of JSON. In some cases, using a JSON syntax can be more readable than other YAML representations. For example, this YAML is closer to the normal YAML method of expressing lists: arguments: - "--dirname" - "/foo" But it is easier to read when collapsed into a JSON list style: arguments: ["--dirname", "/foo"] Using JSON for increased legibility is good. However, JSON syntax should not be used for representing more complex constructs. When dealing with pure JSON embedded inside of YAML (such as init container configuration), it is of course appropriate to use the JSON format. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Topic Guides ============ Here you’ll find introductions to all the key parts of Helm you’ll need or want to know. ### Quicklinks [#### Charts\ \ Explains the chart format, and provides basic guidance for building charts with Helm.](https://helm.sh/docs/topics/charts/) [#### Chart Hooks\ \ Describes how to work with chart hooks.](https://helm.sh/docs/topics/charts_hooks/) [#### Chart Tests\ \ Describes how to run and test your charts.](https://helm.sh/docs/topics/chart_tests/) [#### Library Charts\ \ Explains library charts and examples of usage](https://helm.sh/docs/topics/library_charts/) [#### Helm Provenance and Integrity\ \ Describes how to verify the integrity and origin of a Chart.](https://helm.sh/docs/topics/provenance/) [#### The Chart Repository Guide\ \ How to create and work with Helm chart repositories.](https://helm.sh/docs/topics/chart_repository/) [#### Use OCI-based registries\ \ Describes how to use OCI for Chart distribution.](https://helm.sh/docs/topics/registries/) [#### Helm Architecture\ \ Describes the Helm architecture at a high level.](https://helm.sh/docs/topics/architecture/) [#### Advanced Helm Techniques\ \ Explains various advanced features for Helm power users](https://helm.sh/docs/topics/advanced/) [#### Kubernetes Distribution Guide\ \ Captures information about using Helm in specific Kubernetes environments.](https://helm.sh/docs/topics/kubernetes_distros/) [#### Role-based Access Control\ \ Explains how Helm interacts with Kubernetes' Role-Based Access Control.](https://helm.sh/docs/topics/rbac/) [#### The Helm Plugins Guide\ \ Introduces how to use and create plugins to extend Helm's functionality.](https://helm.sh/docs/topics/plugins/) [#### Migrating Helm v2 to v3\ \ Learn how to migrate Helm v2 to v3.](https://helm.sh/docs/topics/v2_v3_migration/) [#### Deprecated Kubernetes APIs\ \ Explains deprecated Kubernetes APIs in Helm](https://helm.sh/docs/topics/kubernetes_apis/) [#### Helm Version Support Policy\ \ Describes Helm's patch release policy as well as the maximum version skew supported between Helm and Kubernetes.](https://helm.sh/docs/topics/version_skew/) [#### Permissions management for SQL storage backend\ \ Get to know how to setup permissions when using SQL storage backend.](https://helm.sh/docs/topics/permissions_sql_storage_backend/) [#### Release schedule policy\ \ Describes Helm's release schedule policy.](https://helm.sh/docs/topics/release_policy/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Uninstalling Uninstalling ============ Uninstalling ------------ ### I want to delete my local Helm. Where are all its files? Along with the `helm` binary, Helm stores some files in the following locations: * $XDG\_CACHE\_HOME * $XDG\_CONFIG\_HOME * $XDG\_DATA\_HOME The following table gives the default folder for each of these, by OS: | Operating System | Cache Path | Configuration Path | Data Path | | --- | --- | --- | --- | | Linux | `$HOME/.cache/helm` | `$HOME/.config/helm` | `$HOME/.local/share/helm` | | macOS | `$HOME/Library/Caches/helm` | `$HOME/Library/Preferences/helm` | `$HOME/Library/helm` | | Windows | `%TEMP%\helm` | `%APPDATA%\helm` | `%APPDATA%\helm` | [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Using Helm Using Helm ========== This guide explains the basics of using Helm to manage packages on your Kubernetes cluster. It assumes that you have already [installed](https://helm.sh/docs/intro/install/) the Helm client. If you are simply interested in running a few quick commands, you may wish to begin with the [Quickstart Guide](https://helm.sh/docs/intro/quickstart/) . This chapter covers the particulars of Helm commands, and explains how to use Helm. Three Big Concepts ------------------ A _Chart_ is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file. A _Repository_ is the place where charts can be collected and shared. It's like Perl's [CPAN archive](https://www.cpan.org/) or the [Fedora Package Database](https://src.fedoraproject.org/) , but for Kubernetes packages. A _Release_ is an instance of a chart running in a Kubernetes cluster. One chart can often be installed many times into the same cluster. And each time it is installed, a new _release_ is created. Consider a MySQL chart. If you want two databases running in your cluster, you can install that chart twice. Each one will have its own _release_, which will in turn have its own _release name_. With these concepts in mind, we can now explain Helm like this: Helm installs _charts_ into Kubernetes, creating a new _release_ for each installation. And to find new charts, you can search Helm chart _repositories_. 'helm search': Finding Charts ----------------------------- Helm comes with a powerful search command. It can be used to search two different types of source: * `helm search hub` searches [the Artifact Hub](https://artifacthub.io/) , which lists helm charts from dozens of different repositories. * `helm search repo` searches the repositories that you have added to your local helm client (with `helm repo add`). This search is done over local data, and no public network connection is needed. You can find publicly available charts by running `helm search hub`: $ helm search hub wordpress URL CHART VERSION APP VERSION DESCRIPTION https://hub.helm.sh/charts/bitnami/wordpress 7.6.7 5.2.4 Web publishing platform for building blogs and ... https://hub.helm.sh/charts/presslabs/wordpress-... v0.6.3 v0.6.3 Presslabs WordPress Operator Helm Chart https://hub.helm.sh/charts/presslabs/wordpress-... v0.7.1 v0.7.1 A Helm chart for deploying a WordPress site on ... The above searches for all `wordpress` charts on Artifact Hub. With no filter, `helm search hub` shows you all of the available charts. `helm search hub` exposes the URL to the location on [artifacthub.io](https://artifacthub.io/) but not the actual Helm repo. `helm search hub --list-repo-url` exposes the actual Helm repo URL which comes in handy when you are looking to add a new repo: `helm repo add [NAME] [URL]`. Using `helm search repo`, you can find the names of the charts in repositories you have already added: $ helm repo add brigade https://brigadecore.github.io/charts "brigade" has been added to your repositories $ helm search repo brigade NAME CHART VERSION APP VERSION DESCRIPTION brigade/brigade 1.3.2 v1.2.1 Brigade provides event-driven scripting of Kube... brigade/brigade-github-app 0.4.1 v0.2.1 The Brigade GitHub App, an advanced gateway for... brigade/brigade-github-oauth 0.2.0 v0.20.0 The legacy OAuth GitHub Gateway for Brigade brigade/brigade-k8s-gateway 0.1.0 A Helm chart for Kubernetes brigade/brigade-project 1.0.0 v1.0.0 Create a Brigade project brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes Helm search uses a fuzzy string matching algorithm, so you can type parts of words or phrases: $ helm search repo kash NAME CHART VERSION APP VERSION DESCRIPTION brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes Search is a good way to find available packages. Once you have found a package you want to install, you can use `helm install` to install it. 'helm install': Installing a Package ------------------------------------ To install a new package, use the `helm install` command. At its simplest, it takes two arguments: A release name that you pick, and the name of the chart you want to install. $ helm install happy-panda bitnami/wordpress NAME: happy-panda LAST DEPLOYED: Tue Jan 26 10:27:17 2021 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ** Please be patient while the chart is being deployed ** Your WordPress site can be accessed through the following DNS name from within your cluster: happy-panda-wordpress.default.svc.cluster.local (port 80) To access your WordPress site from outside the cluster follow the steps below: 1. Get the WordPress URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress' export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}") echo "WordPress URL: http://$SERVICE_IP/" echo "WordPress Admin URL: http://$SERVICE_IP/admin" 2. Open a browser and access WordPress using the obtained URL. 3. Login with the following credentials below to see your blog: echo Username: user echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) Now the `wordpress` chart is installed. Note that installing a chart creates a new _release_ object. The release above is named `happy-panda`. (If you want Helm to generate a name for you, leave off the release name and use `--generate-name`.) During installation, the `helm` client will print useful information about which resources were created, what the state of the release is, and also whether there are additional configuration steps you can or should take. Helm installs resources in the following order: * Namespace * NetworkPolicy * ResourceQuota * LimitRange * PodSecurityPolicy * PodDisruptionBudget * ServiceAccount * Secret * SecretList * ConfigMap * StorageClass * PersistentVolume * PersistentVolumeClaim * CustomResourceDefinition * ClusterRole * ClusterRoleList * ClusterRoleBinding * ClusterRoleBindingList * Role * RoleList * RoleBinding * RoleBindingList * Service * DaemonSet * Pod * ReplicationController * ReplicaSet * Deployment * HorizontalPodAutoscaler * StatefulSet * Job * CronJob * Ingress * APIService Helm does not wait until all of the resources are running before it exits. Many charts require Docker images that are over 600MB in size, and may take a long time to install into the cluster. To keep track of a release's state, or to re-read configuration information, you can use `helm status`: $ helm status happy-panda NAME: happy-panda LAST DEPLOYED: Tue Jan 26 10:27:17 2021 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ** Please be patient while the chart is being deployed ** Your WordPress site can be accessed through the following DNS name from within your cluster: happy-panda-wordpress.default.svc.cluster.local (port 80) To access your WordPress site from outside the cluster follow the steps below: 1. Get the WordPress URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress' export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}") echo "WordPress URL: http://$SERVICE_IP/" echo "WordPress Admin URL: http://$SERVICE_IP/admin" 2. Open a browser and access WordPress using the obtained URL. 3. Login with the following credentials below to see your blog: echo Username: user echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) The above shows the current state of your release. ### Customizing the Chart Before Installing Installing the way we have here will only use the default configuration options for this chart. Many times, you will want to customize the chart to use your preferred configuration. To see what options are configurable on a chart, use `helm show values`: $ helm show values bitnami/wordpress ## Global Docker image parameters ## Please, note that this will override the image parameters, including dependencies, configured to use the global value ## Current available global Docker image parameters: imageRegistry and imagePullSecrets ## # global: # imageRegistry: myRegistryName # imagePullSecrets: # - myRegistryKeySecretName # storageClass: myStorageClass ## Bitnami WordPress image version ## ref: https://hub.docker.com/r/bitnami/wordpress/tags/ ## image: registry: docker.io repository: bitnami/wordpress tag: 5.6.0-debian-10-r35 [..] You can then override any of these settings in a YAML formatted file, and then pass that file during installation. $ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml $ helm install -f values.yaml bitnami/wordpress --generate-name The above will create a default MariaDB user with the name `user0`, and grant this user access to a newly created `user0db` database, but will accept all the rest of the defaults for that chart. There are two ways to pass configuration data during install: * `--values` (or `-f`): Specify a YAML file with overrides. This can be specified multiple times and the rightmost file will take precedence * `--set`: Specify overrides on the command line. If both are used, `--set` values are merged into `--values` with higher precedence. Overrides specified with `--set` are persisted in a Secret. Values that have been `--set` can be viewed for a given release with `helm get values `. Values that have been `--set` can be cleared by running `helm upgrade` with `--reset-values` specified. #### The Format and Limitations of `--set` The `--set` option takes zero or more name/value pairs. At its simplest, it is used like this: `--set name=value`. The YAML equivalent of that is: name: value Multiple values are separated by `,` characters. So `--set a=b,c=d` becomes: a: b c: d More complex expressions are supported. For example, `--set outer.inner=value` is translated into this: outer: inner: value Lists can be expressed by enclosing values in `{` and `}`. For example, `--set name={a, b, c}` translates to: name: - a - b - c Certain name/key can be set to be `null` or to be an empty array `[]`. For example, `--set name=[],a=null` translates name: - a - b - c a: b to name: [] a: null As of Helm 2.5.0, it is possible to access list items using an array index syntax. For example, `--set servers[0].port=80` becomes: servers: - port: 80 Multiple values can be set this way. The line `--set servers[0].port=80,servers[0].host=example` becomes: servers: - port: 80 host: example Sometimes you need to use special characters in your `--set` lines. You can use a backslash to escape the characters; `--set name=value1\,value2` will become: name: "value1,value2" Similarly, you can escape dot sequences as well, which may come in handy when charts use the `toYaml` function to parse annotations, labels and node selectors. The syntax for `--set nodeSelector."kubernetes\.io/role"=master` becomes: nodeSelector: kubernetes.io/role: master Deeply nested data structures can be difficult to express using `--set`. Chart designers are encouraged to consider the `--set` usage when designing the format of a `values.yaml` file (read more about [Values Files](https://helm.sh/docs/chart_template_guide/values_files/) ). ### More Installation Methods The `helm install` command can install from several sources: * A chart repository (as we've seen above) * A local chart archive (`helm install foo foo-0.1.1.tgz`) * An unpacked chart directory (`helm install foo path/to/foo`) * A full URL (`helm install foo https://example.com/charts/foo-1.2.3.tgz`) 'helm upgrade' and 'helm rollback': Upgrading a Release, and Recovering on Failure ---------------------------------------------------------------------------------- When a new version of a chart is released, or when you want to change the configuration of your release, you can use the `helm upgrade` command. An upgrade takes an existing release and upgrades it according to the information you provide. Because Kubernetes charts can be large and complex, Helm tries to perform the least invasive upgrade. It will only update things that have changed since the last release. $ helm upgrade -f panda.yaml happy-panda bitnami/wordpress In the above case, the `happy-panda` release is upgraded with the same chart, but with a new YAML file: mariadb.auth.username: user1 We can use `helm get values` to see whether that new setting took effect. $ helm get values happy-panda mariadb: auth: username: user1 The `helm get` command is a useful tool for looking at a release in the cluster. And as we can see above, it shows that our new values from `panda.yaml` were deployed to the cluster. Now, if something does not go as planned during a release, it is easy to roll back to a previous release using `helm rollback [RELEASE] [REVISION]`. $ helm rollback happy-panda 1 The above rolls back our happy-panda to its very first release version. A release version is an incremental revision. Every time an install, upgrade, or rollback happens, the revision number is incremented by 1. The first revision number is always 1. And we can use `helm history [RELEASE]` to see revision numbers for a certain release. Helpful Options for Install/Upgrade/Rollback -------------------------------------------- There are several other helpful options you can specify for customizing the behavior of Helm during an install/upgrade/rollback. Please note that this is not a full list of cli flags. To see a description of all flags, just run `helm --help`. * `--timeout`: A [Go duration](https://golang.org/pkg/time/#ParseDuration) value to wait for Kubernetes commands to complete. This defaults to `5m0s`. * `--wait`: Waits until all Pods are in a ready state, PVCs are bound, Deployments have minimum (`Desired` minus `maxUnavailable`) Pods in ready state and Services have an IP address (and Ingress if a `LoadBalancer`) before marking the release as successful. It will wait for as long as the `--timeout` value. If timeout is reached, the release will be marked as `FAILED`. Note: In scenarios where Deployment has `replicas` set to 1 and `maxUnavailable` is not set to 0 as part of rolling update strategy, `--wait` will return as ready as it has satisfied the minimum Pod in ready condition. * `--no-hooks`: This skips running hooks for the command * `--recreate-pods` (only available for `upgrade` and `rollback`): This flag will cause all pods to be recreated (with the exception of pods belonging to deployments). (DEPRECATED in Helm 3) 'helm uninstall': Uninstalling a Release ---------------------------------------- When it is time to uninstall a release from the cluster, use the `helm uninstall` command: $ helm uninstall happy-panda This will remove the release from the cluster. You can see all of your currently deployed releases with the `helm list` command: $ helm list NAME VERSION UPDATED STATUS CHART inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 From the output above, we can see that the `happy-panda` release was uninstalled. In previous versions of Helm, when a release was deleted, a record of its deletion would remain. In Helm 3, deletion removes the release record as well. If you wish to keep a deletion release record, use `helm uninstall --keep-history`. Using `helm list --uninstalled` will only show releases that were uninstalled with the `--keep-history` flag. The `helm list --all` flag will show you all release records that Helm has retained, including records for failed or deleted items (if `--keep-history` was specified): $ helm list --all NAME VERSION UPDATED STATUS CHART happy-panda 2 Wed Sep 28 12:47:54 2016 UNINSTALLED wordpress-10.4.5.6.0 inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 kindred-angelf 2 Tue Sep 27 16:16:10 2016 UNINSTALLED alpine-0.1.0 Note that because releases are now deleted by default, it is no longer possible to rollback an uninstalled resource. 'helm repo': Working with Repositories -------------------------------------- Helm 3 no longer ships with a default chart repository. The `helm repo` command group provides commands to add, list, and remove repositories. You can see which repositories are configured using `helm repo list`: $ helm repo list NAME URL stable https://charts.helm.sh/stable mumoshu https://mumoshu.github.io/charts And new repositories can be added with `helm repo add [NAME] [URL]`: $ helm repo add dev https://example.com/dev-charts Because chart repositories change frequently, at any point you can make sure your Helm client is up to date by running `helm repo update`. Repositories can be removed with `helm repo remove`. Creating Your Own Charts ------------------------ The [Chart Development Guide](https://helm.sh/docs/topics/charts/) explains how to develop your own charts. But you can get started quickly by using the `helm create` command: $ helm create deis-workflow Creating deis-workflow Now there is a chart in `./deis-workflow`. You can edit it and create your own templates. As you edit your chart, you can validate that it is well-formed by running `helm lint`. When it's time to package the chart up for distribution, you can run the `helm package` command: $ helm package deis-workflow deis-workflow-0.1.0.tgz And that chart can now easily be installed by `helm install`: $ helm install deis-workflow ./deis-workflow-0.1.0.tgz ... Charts that are packaged can be loaded into chart repositories. See the documentation for [Helm chart repositories](https://helm.sh/docs/topics/chart_repository/) for more details. Conclusion ---------- This chapter has covered the basic usage patterns of the `helm` client, including searching, installation, upgrading, and uninstalling. It has also covered useful utility commands like `helm status`, `helm get`, and `helm repo`. For more information on these commands, take a look at Helm's built-in help: `helm help`. In the [next chapter](https://helm.sh/docs/howto/charts_tips_and_tricks/) , we look at the process of developing charts. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Cheat Sheet Cheat Sheet =========== Helm cheatsheet featuring all the necessary commands required to manage an application through Helm. * * * ### Basic interpretations/context Chart: * It is the name of your chart in case it has been pulled and untarred. * It is / in case the repository has been added but chart not pulled. * It is the URL/Absolute path to the chart. Name: * It is the name you want to give to your current helm chart installation. Release: * Is the name you assigned to an installation instance. Revision: * Is the value from the Helm history command Repo-name: * The name of a repository. DIR: * Directory name/path * * * ### Chart Management helm create # Creates a chart directory along with the common files and directories used in a chart. helm package # Packages a chart into a versioned chart archive file. helm lint # Run tests to examine a chart and identify possible issues: helm show all # Inspect a chart and list its contents: helm show values # Displays the contents of the values.yaml file helm pull # Download/pull chart helm pull --untar=true # If set to true, will untar the chart after downloading it helm pull --verify # Verify the package before using it helm pull --version # Default-latest is used, specify a version constraint for the chart version to use helm dependency list # Display a list of a chart’s dependencies: * * * ### Install and Uninstall Apps helm install # Install the chart with a name helm install --namespace # Install the chart in a specific namespace helm install --set key1=val1,key2=val2 # Set values on the command line (can specify multiple or separate values with commas) helm install --values # Install the chart with your specified values helm install --dry-run --debug # Run a test installation to validate chart (p) helm install --verify # Verify the package before using it helm install --dependency-update # update dependencies if they are missing before installing the chart helm uninstall # Uninstall a release * * * ### Perform App Upgrade and Rollback helm upgrade # Upgrade a release helm upgrade --atomic # If set, upgrade process rolls back changes made in case of failed upgrade. helm upgrade --dependency-update # update dependencies if they are missing before installing the chart helm upgrade --version # specify a version constraint for the chart version to use helm upgrade --values # specify values in a YAML file or a URL (can specify multiple) helm upgrade --set key1=val1,key2=val2 # Set values on the command line (can specify multiple or separate valuese) helm upgrade --force # Force resource updates through a replacement strategy helm rollback # Roll back a release to a specific revision helm rollback --cleanup-on-fail # Allow deletion of new resources created in this rollback when rollback fails * * * ### List, Add, Remove, and Update Repositories helm repo add # Add a repository from the internet: helm repo list # List added chart repositories helm repo update # Update information of available charts locally from chart repositories helm repo remove # Remove one or more chart repositories helm repo index # Read the current directory and generate an index file based on the charts found. helm repo index --merge # Merge the generated index with an existing index file helm search repo # Search repositories for a keyword in charts helm search hub # Search for charts in the Artifact Hub or your own hub instance * * * ### Helm Release monitoring helm list # Lists all of the releases for a specified namespace, uses current namespace context if namespace not specified helm list --all # Show all releases without any filter applied, can use -a helm list --all-namespaces # List releases across all namespaces, we can use -A helm list -l key1=value1,key2=value2 # Selector (label query) to filter on, supports '=', '==', and '!=' helm list --date # Sort by release date helm list --deployed # Show deployed releases. If no other is specified, this will be automatically enabled helm list --pending # Show pending releases helm list --failed # Show failed releases helm list --uninstalled # Show uninstalled releases (if 'helm uninstall --keep-history' was used) helm list --superseded # Show superseded releases helm list -o yaml # Prints the output in the specified format. Allowed values: table, json, yaml (default table) helm status # This command shows the status of a named release. helm status --revision # if set, display the status of the named release with revision helm history # Historical revisions for a given release. helm env # Env prints out all the environment information in use by Helm. * * * ### Download Release Information helm get all # A human readable collection of information about the notes, hooks, supplied values, and generated manifest file of the given release. helm get hooks # This command downloads hooks for a given release. Hooks are formatted in YAML and separated by the YAML '---\n' separator. helm get manifest # A manifest is a YAML-encoded representation of the Kubernetes resources that were generated from this release's chart(s). If a chart is dependent on other charts, those resources will also be included in the manifest. helm get notes # Shows notes provided by the chart of a named release. helm get values # Downloads a values file for a given release. use -o to format output * * * ### Plugin Management helm plugin install # Install plugins helm plugin list # View a list of all installed plugins helm plugin update # Update plugins helm plugin uninstall # Uninstall a plugin * * * [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs The Chart Best Practices Guide ============================== This guide covers the Helm Team's considered best practices for creating charts. It focuses on how charts should be structured. We focus primarily on best practices for charts that may be publicly deployed. We know that many charts are for internal-use only, and authors of such charts may find that their internal interests override our suggestions here. ### Quicklinks [#### General Conventions\ \ General conventions for charts.](https://helm.sh/docs/chart_best_practices/conventions/) [#### Values\ \ Focuses on how you should structure and use your values.](https://helm.sh/docs/chart_best_practices/values/) [#### Templates\ \ A closer look at best practices surrounding templates.](https://helm.sh/docs/chart_best_practices/templates/) [#### Dependencies\ \ Covers best practices for Chart dependencies.](https://helm.sh/docs/chart_best_practices/dependencies/) [#### Labels and Annotations\ \ Covers best practices for using labels and annotations in your Chart.](https://helm.sh/docs/chart_best_practices/labels/) [#### Pods and PodTemplates\ \ Discusses formatting the Pod and PodTemplate portions in Chart manifests.](https://helm.sh/docs/chart_best_practices/pods/) [#### Custom Resource Definitions\ \ How to handle creating and using CRDs.](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) [#### Role-Based Access Control\ \ Discusses the creation and formatting of RBAC resources in Chart manifests.](https://helm.sh/docs/chart_best_practices/rbac/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Dependencies Dependencies ============ This section of the guide covers best practices for `dependencies` declared in `Chart.yaml`. Versions -------- Where possible, use version ranges instead of pinning to an exact version. The suggested default is to use a patch-level version match: version: ~1.2.3 This will match version `1.2.3` and any patches to that release. In other words, `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` For the complete version matching syntax, please see the [semver documentation](https://github.com/Masterminds/semver#checking-version-constraints) . ### Prerelease versions The above versioning constraints will not match on pre-release versions. For example `version: ~1.2.3` will match `version: ~1.2.4` but not `version: ~1.2.3-1`. The following provides a pre-release as well as patch-level matching: version: ~1.2.3-0 ### Repository URLs Where possible, use `https://` repository URLs, followed by `http://` URLs. If the repository has been added to the repository index file, the repository name can be used as an alias of URL. Use `alias:` or `@` followed by repository names. File URLs (`file://...`) are considered a "special case" for charts that are assembled by a fixed deployment pipeline. When using [downloader plugins](https://helm.sh/docs/topics/plugins/#downloader-plugins) the URL scheme will be specific to the plugin. Note, a user of the chart will need to have a plugin supporting the scheme installed to update or build the dependency. Helm cannot perform dependency management operations on the dependency when the `repository` field is left blank. In that case Helm will assume the dependency is in a sub-directory of the `charts` folder with the name being the same as the `name` property for the dependency. Conditions and Tags ------------------- Conditions or tags should be added to any dependencies that _are optional_. The preferred form of a condition is: condition: somechart.enabled Where `somechart` is the chart name of the dependency. When multiple subcharts (dependencies) together provide an optional or swappable feature, those charts should share the same tags. For example, if both `nginx` and `memcached` together provide performance optimizations for the main app in the chart, and are required to both be present when that feature is enabled, then they should both have a tags section like this: tags: - webaccelerator This allows a user to turn that feature on and off with one tag. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Library Charts Library Charts ============== A library chart is a type of [Helm chart](https://helm.sh/docs/topics/charts/) that defines chart primitives or definitions which can be shared by Helm templates in other charts. This allows users to share snippets of code that can be re-used across charts, avoiding repetition and keeping charts [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) . The library chart was introduced in Helm 3 to formally recognize common or helper charts that have been used by chart maintainers since Helm 2. By including it as a chart type, it provides: * A means to explicitly distinguish between common and application charts * Logic to prevent installation of a common chart * No rendering of templates in a common chart which may contain release artifacts * Allow for dependent charts to use the importer's context A chart maintainer can define a common chart as a library chart and now be confident that Helm will handle the chart in a standard consistent fashion. It also means that definitions in an application chart can be shared by changing the chart type. Create a Simple Library Chart ----------------------------- As mentioned previously, a library chart is a type of [Helm chart](https://helm.sh/docs/topics/charts/) . This means that you can start off by creating a scaffold chart: $ helm create mylibchart Creating mylibchart You will first remove all the files in `templates` directory as we will create our own templates definitions in this example. $ rm -rf mylibchart/templates/* The values file will not be required either. $ rm -f mylibchart/values.yaml Before we jump into creating common code, lets do a quick review of some relevant Helm concepts. A [named template](https://helm.sh/docs/chart_template_guide/named_templates/) (sometimes called a partial or a subtemplate) is simply a template defined inside of a file, and given a name. In the `templates/` directory, any file that begins with an underscore(\_) is not expected to output a Kubernetes manifest file. So by convention, helper templates and partials are placed in a `_*.tpl` or `_*.yaml` files. In this example, we will code a common ConfigMap which creates an empty ConfigMap resource. We will define the common ConfigMap in file `mylibchart/templates/_configmap.yaml` as follows: {{- define "mylibchart.configmap.tpl" -}} apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name | printf "%s-%s" .Chart.Name }} data: {} {{- end -}} {{- define "mylibchart.configmap" -}} {{- include "mylibchart.util.merge" (append . "mylibchart.configmap.tpl") -}} {{- end -}} The ConfigMap construct is defined in named template `mylibchart.configmap.tpl`. It is a simple ConfigMap with an empty resource, `data`. Within this file there is another named template called `mylibchart.configmap`. This named template includes another named template `mylibchart.util.merge` which will take 2 named templates as arguments, the template calling `mylibchart.configmap` and `mylibchart.configmap.tpl`. The helper function `mylibchart.util.merge` is a named template in `mylibchart/templates/_util.yaml`. It is a handy util from [The Common Helm Helper Chart](https://helm.sh/docs/topics/library_charts/#the-common-helm-helper-chart) because it merges the 2 templates and overrides any common parts in both: {{- /* mylibchart.util.merge will merge two YAML templates and output the result. This takes an array of three values: - the top context - the template name of the overrides (destination) - the template name of the base (source) */}} {{- define "mylibchart.util.merge" -}} {{- $top := first . -}} {{- $overrides := fromYaml (include (index . 1) $top) | default (dict ) -}} {{- $tpl := fromYaml (include (index . 2) $top) | default (dict ) -}} {{- toYaml (merge $overrides $tpl) -}} {{- end -}} This is important when a chart wants to use common code that it needs to customize with its configuration. Finally, lets change the chart type to `library`. This requires editing `mylibchart/Chart.yaml` as follows: apiVersion: v2 name: mylibchart description: A Helm chart for Kubernetes # A chart can be either an 'application' or a 'library' chart. # # Application charts are a collection of templates that can be packaged into versioned archives # to be deployed. # # Library charts provide useful utilities or functions for the chart developer. They're included as # a dependency of application charts to inject those utilities and functions into the rendering # pipeline. Library charts do not define any templates and therefore cannot be deployed. # type: application type: library # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. version: 0.1.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application and it is recommended to use it with quotes. appVersion: "1.16.0" The library chart is now ready to be shared and its ConfigMap definition to be re-used. Before moving on, it is worth checking if Helm recognizes the chart as a library chart: $ helm install mylibchart mylibchart/ Error: library charts are not installable Use the Simple Library Chart ---------------------------- It is time to use the library chart. This means creating a scaffold chart again: $ helm create mychart Creating mychart Lets clean out the template files again as we want to create a ConfigMap only: $ rm -rf mychart/templates/* When we want to create a simple ConfigMap in a Helm template, it could look similar to the following: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name | printf "%s-%s" .Chart.Name }} data: myvalue: "Hello World" We are however going to re-use the common code already created in `mylibchart`. The ConfigMap can be created in the file `mychart/templates/configmap.yaml` as follows: {{- include "mylibchart.configmap" (list . "mychart.configmap") -}} {{- define "mychart.configmap" -}} data: myvalue: "Hello World" {{- end -}} You can see that it simplifies the work we have to do by inheriting the common ConfigMap definition which adds standard properties for ConfigMap. In our template we add the configuration, in this case the data key `myvalue` and its value. The configuration override the empty resource of the common ConfigMap. This is feasible because of the helper function `mylibchart.util.merge` we mentioned in the previous section. To be able to use the common code, we need to add `mylibchart` as a dependency. Add the following to the end of the file `mychart/Chart.yaml`: # My common code in my library chart dependencies: - name: mylibchart version: 0.1.0 repository: file://../mylibchart This includes the library chart as a dynamic dependency from the filesystem which is at the same parent path as our application chart. As we are including the library chart as a dynamic dependency, we need to run `helm dependency update`. It will copy the library chart into your `charts/` directory. $ helm dependency update mychart/ Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "stable" chart repository Update Complete. ⎈Happy Helming!⎈ Saving 1 charts Deleting outdated charts We are now ready to deploy our chart. Before installing, it is worth checking the rendered template first. $ helm install mydemo mychart/ --debug --dry-run install.go:159: [debug] Original chart version: "" install.go:176: [debug] CHART PATH: /root/test/helm-charts/mychart NAME: mydemo LAST DEPLOYED: Tue Mar 3 17:48:47 2020 NAMESPACE: default STATUS: pending-install REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: {} COMPUTED VALUES: affinity: {} fullnameOverride: "" image: pullPolicy: IfNotPresent repository: nginx imagePullSecrets: [] ingress: annotations: {} enabled: false hosts: - host: chart-example.local paths: [] tls: [] mylibchart: global: {} nameOverride: "" nodeSelector: {} podSecurityContext: {} replicaCount: 1 resources: {} securityContext: {} service: port: 80 type: ClusterIP serviceAccount: annotations: {} create: true name: null tolerations: [] HOOKS: MANIFEST: --- # Source: mychart/templates/configmap.yaml apiVersion: v1 data: myvalue: Hello World kind: ConfigMap metadata: labels: app: mychart chart: mychart-0.1.0 release: mydemo name: mychart-mydemo This looks like the ConfigMap we want with data override of `myvalue: Hello World`. Lets install it: $ helm install mydemo mychart/ NAME: mydemo LAST DEPLOYED: Tue Mar 3 17:52:40 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None We can retrieve the release and see that the actual template was loaded. $ helm get manifest mydemo --- # Source: mychart/templates/configmap.yaml apiVersion: v1 data: myvalue: Hello World kind: ConfigMap metadata: labels: app: mychart chart: mychart-0.1.0 release: mydemo name: mychart-mydemo Library Chart Benefits ---------------------- Because of their inability to act as standalone charts, library charts can leverage the following functionality: * The `.Files` object references the file paths on the parent chart, rather than the path local to the library chart * The `.Values` object is the same as the parent chart, in contrast to application [subcharts](https://helm.sh/docs/chart_template_guide/subcharts_and_globals/) which receive the section of values configured under their header in the parent. The Common Helm Helper Chart ---------------------------- Note: The Common Helm Helper Chart repo on Github is no longer actively maintained, and the repo has been deprecated and archived. This [chart](https://github.com/helm/charts/tree/master/incubator/common) was the original pattern for common charts. It provides utilities that reflect best practices of Kubernetes chart development. Best of all it can be used off the bat by you when developing your charts to give you handy shared code. Here is a quick way to use it. For more details, have a look at the [README](https://github.com/helm/charts/blob/master/incubator/common/README.md) . Create a scaffold chart again: $ helm create demo Creating demo Lets use the common code from the helper chart. First, edit deployment `demo/templates/deployment.yaml` as follows: {{- template "common.deployment" (list . "demo.deployment") -}} {{- define "demo.deployment" -}} ## Define overrides for your Deployment resource here, e.g. apiVersion: apps/v1 spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{- include "demo.selectorLabels" . | nindent 6 }} template: metadata: labels: {{- include "demo.selectorLabels" . | nindent 8 }} {{- end -}} And now the service file, `demo/templates/service.yaml` as follows: {{- template "common.service" (list . "demo.service") -}} {{- define "demo.service" -}} ## Define overrides for your Service resource here, e.g. # metadata: # labels: # custom: label # spec: # ports: # - port: 8080 {{- end -}} These templates show how inheriting the common code from the helper chart simplifies your coding down to your configuration or customization of the resources. To be able to use the common code, we need to add `common` as a dependency. Add the following to the end of the file `demo/Chart.yaml`: dependencies: - name: common version: "^0.0.5" repository: "https://charts.helm.sh/incubator/" Note: You will need to add the `incubator` repo to the Helm repository list (`helm repo add`). As we are including the chart as a dynamic dependency, we need to run `helm dependency update`. It will copy the helper chart into your `charts/` directory. As helper chart is using some Helm 2 constructs, you will need to add the following to `demo/values.yaml` to enable the `nginx` image to be loaded as this was updated in Helm 3 scaffold chart: image: tag: 1.16.0 You can test that the chart templates are correct prior to deploying using the `helm lint` and `helm template` commands. If it's good to go, deploy away using `helm install`! [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | The History of the Project The History of the Project ========================== Helm is a [graduated](https://helm.sh/blog/celebrating-helms-cncf-graduation/) [CNCF project](https://www.cncf.io/projects/) . Helm began as what is now known as [Helm Classic](https://github.com/helm/helm-classic) , a Deis project begun in 2015 and introduced at the inaugural KubeCon. In January of 2016, the project merged with a GCS tool called Kubernetes Deployment Manager, and the project was moved under [Kubernetes](https://kubernetes.io/) . As a result of the merging of codebases, Helm 2.0 was released later that year. The key feature of Deployment Manager that survived in Helm 2 was the server-side component, renamed from DM to Tiller for the final Helm 2.0 release. Helm was promoted from a Kubernetes subproject to a full-fledged CNCF project in June, 2018. Helm formed a top-level governing body and several projects were subsumed under the Helm project, including Monocular, the Helm Chart Repo, Chart Museum, and later the Helm Hub. When the Helm 3 development cycle began, Tiller was removed, bringing Helm closer to its original vision of being a client tool. But Helm 3 continues to track releases inside of the Kubernetes cluster, making it possible for teams to work together on a common set of Helm releases. Helm 3 was released in November 2019. Helm [graduated as a CNCF project in April 2020](https://www.cncf.io/announcement/2020/04/30/cloud-native-computing-foundation-announces-helm-graduation/) . The CNCF [Artifact Hub](https://artifacthub.io/) replaced the [Helm Hub](https://hub.helm.sh/) in October 2020. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Troubleshooting Troubleshooting =============== Troubleshooting --------------- ### I am getting a warning about "Unable to get an update from the "stable" chart repository" Run `helm repo list`. If it shows your `stable` repository pointing to a `storage.googleapis.com` URL, you will need to update that repository. On November 13, 2020, the Helm Charts repo [became unsupported](https://github.com/helm/charts#deprecation-timeline) after a year-long deprecation. An archive has been made available at `https://charts.helm.sh/stable` but will no longer receive updates. You can run the following command to fix your repository: $ helm repo add stable https://charts.helm.sh/stable --force-update The same goes for the `incubator` repository, which has an archive available at [https://charts.helm.sh/incubator](https://charts.helm.sh/incubator) . You can run the following command to repair it: $ helm repo add incubator https://charts.helm.sh/incubator --force-update ### I am getting the warning 'WARNING: "kubernetes-charts.storage.googleapis.com" is deprecated for "stable" and will be deleted Nov. 13, 2020.' The old Google helm chart repository has been replaced by a new Helm chart repository. Run the following command to permanently fix this: $ helm repo add stable https://charts.helm.sh/stable --force-update If you get a similar error for `incubator`, run this command: $ helm repo add incubator https://charts.helm.sh/incubator --force-update ### When I add a Helm repo, I get the error 'Error: Repo "https://kubernetes-charts.storage.googleapis.com" is no longer available' The Helm Chart repositories are no longer supported after [a year-long deprecation period](https://github.com/helm/charts#deprecation-timeline) . Archives for these repositories are available at `https://charts.helm.sh/stable` and `https://charts.helm.sh/incubator`, however they will no longer receive updates. The command `helm repo add` will not let you add the old URLs unless you specify `--use-deprecated-repos`. ### On GKE (Google Container Engine) I get "No SSH tunnels currently open" Error: Error forwarding ports: error upgrading connection: No SSH tunnels currently open. Were the targets able to accept an ssh-key for user "gke-[redacted]"? Another variation of the error message is: Unable to connect to the server: x509: certificate signed by unknown authority The issue is that your local Kubernetes config file must have the correct credentials. When you create a cluster on GKE, it will give you credentials, including SSL certificates and certificate authorities. These need to be stored in a Kubernetes config file (Default: `~/.kube/config`) so that `kubectl` and `helm` can access them. ### After migration from Helm 2, `helm list` shows only some (or none) of my releases It is likely that you have missed the fact that Helm 3 now uses cluster namespaces throughout to scope releases. This means that for all commands referencing a release you must either: * rely on the current namespace in the active kubernetes context (as described by the `kubectl config view --minify` command), * specify the correct namespace using the `--namespace`/`-n` flag, or * for the `helm list` command, specify the `--all-namespaces`/`-A` flag This applies to `helm ls`, `helm uninstall`, and all other `helm` commands referencing a release. ### On macOS, the file `/etc/.mdns_debug` is accessed. Why? We are aware of a case on macOS where Helm will try to access a file named `/etc/.mdns_debug`. If the file exists, Helm holds the file handle open while it executes. This is caused by macOS's MDNS library. It attempts to load that file to read debugging settings (if enabled). The file handle probably should not be held open, and this issue has been reported to Apple. However, it is macOS, not Helm, that causes this behavior. If you do not want Helm to load this file, you may be able to compile Helm to as a static library that does not use the host network stack. Doing so will inflate the binary size of Helm, but will prevent the file from being open. This issue was originally flagged as a potential security problem. But it has since been determined that there is no flaw or vulnerability caused by this behavior. ### helm repo add fails when it used to work In helm 3.3.1 and before, the command `helm repo add ` will give no output if you attempt to add a repo which already exists. The flag `--no-update` would raise an error if the repo was already registered. In helm 3.3.2 and beyond, an attempt to add an existing repo will error: `Error: repository name (reponame) already exists, please specify a different name` The default behavior is now reversed. `--no-update` is now ignored, while if you want to replace (overwrite) an existing repo, you can use `--force-update`. This is due to a breaking change for a security fix as explained in the [Helm 3.3.2 release notes](https://github.com/helm/helm/releases/tag/v3.3.2) . ### Enabling Kubernetes client logging Printing log messages for debugging the Kubernetes client can be enabled using the [klog](https://pkg.go.dev/k8s.io/klog) flags. Using the `-v` flag to set verbosity level will be enough for most cases. For example: helm list -v 6 ### Tiller installations stopped working and access is denied Helm releases used to be available from [https://storage.googleapis.com/kubernetes-helm/](https://storage.googleapis.com/kubernetes-helm/) . As explained in ["Announcing get.helm.sh"](https://helm.sh/blog/get-helm-sh/) , the official location changed in June 2019. [GitHub Container Registry](https://github.com/orgs/helm/packages/container/package/tiller) makes all the old Tiller images available. If you are trying to download older versions of Helm from the storage bucket you used in the past, you may find that they are missing: AccessDenied Access denied.
Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.
The [legacy Tiller image location](https://gcr.io/kubernetes-helm/tiller) began the removal of images in August 2021. We have made these images available at the [GitHub Container Registry](https://github.com/orgs/helm/packages/container/package/tiller) location. For example, to download version v2.17.0, replace: `https://storage.googleapis.com/kubernetes-helm/helm-v2.17.0-linux-amd64.tar.gz` with: `https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz` To initialize with Helm v2.17.0: `helm init —upgrade` Or if a different version is needed, use the --tiller-image flag to override the default location and install a specific Helm v2 version: `helm init --tiller-image ghcr.io/helm/tiller:v2.16.9` **Note:** The Helm maintainers recommend migration to a currently-supported version of Helm. Helm v2.17.0 was the final release of Helm v2; Helm v2 is unsupported since November 2020, as detailed in [Helm 2 and the Charts Project Are Now Unsupported](https://helm.sh/blog/helm-2-becomes-unsupported/) . Many CVEs have been flagged against Helm since then, and those exploits are patched in Helm v3 but will never be patched in Helm v2. See the [current list of published Helm advisories](https://github.com/helm/helm/security/advisories?state=published) and make a plan to [migrate to Helm v3](https://helm.sh/docs/topics/v2_v3_migration/#helm) today. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Values Files Values Files ============ In the previous section we looked at the built-in objects that Helm templates offer. One of the built-in objects is `Values`. This object provides access to values passed into the chart. Its contents come from multiple sources: * The `values.yaml` file in the chart * If this is a subchart, the `values.yaml` file of a parent chart * A values file is passed into `helm install` or `helm upgrade` with the `-f` flag (`helm install -f myvals.yaml ./mychart`) * Individual parameters are passed with `--set` (such as `helm install --set foo=bar ./mychart`) The list above is in order of specificity: `values.yaml` is the default, which can be overridden by a parent chart's `values.yaml`, which can in turn be overridden by a user-supplied values file, which can in turn be overridden by `--set` parameters. Values files are plain YAML files. Let's edit `mychart/values.yaml` and then edit our ConfigMap template. Removing the defaults in `values.yaml`, we'll set just one parameter: favoriteDrink: coffee Now we can use this inside of a template: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favoriteDrink }} Notice on the last line we access `favoriteDrink` as an attribute of `Values`: `{{ .Values.favoriteDrink }}`. Let's see how this renders. $ helm install geared-marsupi ./mychart --dry-run --debug install.go:158: [debug] Original chart version: "" install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart NAME: geared-marsupi LAST DEPLOYED: Wed Feb 19 23:21:13 2020 NAMESPACE: default STATUS: pending-install REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: {} COMPUTED VALUES: favoriteDrink: coffee HOOKS: MANIFEST: --- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: geared-marsupi-configmap data: myvalue: "Hello World" drink: coffee Because `favoriteDrink` is set in the default `values.yaml` file to `coffee`, that's the value displayed in the template. We can easily override that by adding a `--set` flag in our call to `helm install`: $ helm install solid-vulture ./mychart --dry-run --debug --set favoriteDrink=slurm install.go:158: [debug] Original chart version: "" install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart NAME: solid-vulture LAST DEPLOYED: Wed Feb 19 23:25:54 2020 NAMESPACE: default STATUS: pending-install REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: favoriteDrink: slurm COMPUTED VALUES: favoriteDrink: slurm HOOKS: MANIFEST: --- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: solid-vulture-configmap data: myvalue: "Hello World" drink: slurm Since `--set` has a higher precedence than the default `values.yaml` file, our template generates `drink: slurm`. Values files can contain more structured content, too. For example, we could create a `favorite` section in our `values.yaml` file, and then add several keys there: favorite: drink: coffee food: pizza Now we would have to modify the template slightly: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink }} food: {{ .Values.favorite.food }} While structuring data this way is possible, the recommendation is that you keep your values trees shallow, favoring flatness. When we look at assigning values to subcharts, we'll see how values are named using a tree structure. Deleting a default key ---------------------- If you need to delete a key from the default values, you may override the value of the key to be `null`, in which case Helm will remove the key from the overridden values merge. For example, the stable Drupal chart allows configuring the liveness probe, in case you configure a custom image. Here are the default values: livenessProbe: httpGet: path: /user/login port: http initialDelaySeconds: 120 If you try to override the livenessProbe handler to `exec` instead of `httpGet` using `--set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt]`, Helm will coalesce the default and overridden keys together, resulting in the following YAML: livenessProbe: httpGet: path: /user/login port: http exec: command: - cat - docroot/CHANGELOG.txt initialDelaySeconds: 120 However, Kubernetes would then fail because you can not declare more than one livenessProbe handler. To overcome this, you may instruct Helm to delete the `livenessProbe.httpGet` by setting it to null: helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null At this point, we've seen several built-in objects, and used them to inject information into a template. Now we will take a look at another aspect of the template engine: functions and pipelines. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs The Chart Template Developer's Guide ==================================== This guide provides an introduction to Helm's chart templates, with emphasis on the template language. Templates generate manifest files, which are YAML-formatted resource descriptions that Kubernetes can understand. We'll look at how templates are structured, how they can be used, how to write Go templates, and how to debug your work. This guide focuses on the following concepts: * The Helm template language * Using values * Techniques for working with templates This guide is oriented toward learning the ins and outs of the Helm template language. Other guides provide introductory material, examples, and best practices. ### Quicklinks [#### Getting Started\ \ A quick guide on Chart templates.](https://helm.sh/docs/chart_template_guide/getting_started/) [#### Built-in Objects\ \ Built-in objects available to templates.](https://helm.sh/docs/chart_template_guide/builtin_objects/) [#### Values Files\ \ Instructions on how to use the --values flag.](https://helm.sh/docs/chart_template_guide/values_files/) [#### Template Functions and Pipelines\ \ Using functions in templates.](https://helm.sh/docs/chart_template_guide/functions_and_pipelines/) [#### Template Function List\ \ A list of template functions available in Helm](https://helm.sh/docs/chart_template_guide/function_list/) [#### Flow Control\ \ A quick overview on the flow structure within templates.](https://helm.sh/docs/chart_template_guide/control_structures/) [#### Variables\ \ Using variables in templates.](https://helm.sh/docs/chart_template_guide/variables/) [#### Named Templates\ \ How to define named templates.](https://helm.sh/docs/chart_template_guide/named_templates/) [#### Accessing Files Inside Templates\ \ How to access files from within a template.](https://helm.sh/docs/chart_template_guide/accessing_files/) [#### Creating a NOTES.txt File\ \ How to provide instructions to your Chart users.](https://helm.sh/docs/chart_template_guide/notes_files/) [#### Subcharts and Global Values\ \ Interacting with a subchart's and global values.](https://helm.sh/docs/chart_template_guide/subcharts_and_globals/) [#### The .helmignore file\ \ The \`.helmignore\` file is used to specify files you don't want to include in your helm chart.](https://helm.sh/docs/chart_template_guide/helm_ignore_file/) [#### Debugging Templates\ \ Troubleshooting charts that are failing to deploy.](https://helm.sh/docs/chart_template_guide/debugging/) [#### Next Steps\ \ Wrapping up - some useful pointers to other documentation that will help you.](https://helm.sh/docs/chart_template_guide/wrapping_up/) [#### Appendix: YAML Techniques\ \ A closer look at the YAML specification and how it applies to Helm.](https://helm.sh/docs/chart_template_guide/yaml_techniques/) [#### Appendix: Go Data Types and Templates\ \ A quick overview on variables in templates.](https://helm.sh/docs/chart_template_guide/data_types/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Provenance and Integrity Helm Provenance and Integrity ============================= Helm has provenance tools which help chart users verify the integrity and origin of a package. Using industry-standard tools based on PKI, GnuPG, and well-respected package managers, Helm can generate and verify signature files. Overview -------- Integrity is established by comparing a chart to a provenance record. Provenance records are stored in _provenance files_, which are stored alongside a packaged chart. For example, if a chart is named `myapp-1.2.3.tgz`, its provenance file will be `myapp-1.2.3.tgz.prov`. Provenance files are generated at packaging time (`helm package --sign ...`), and can be checked by multiple commands, notably `helm install --verify`. The Workflow ------------ This section describes a potential workflow for using provenance data effectively. Prerequisites: * A valid PGP keypair in a binary (not ASCII-armored) format * The `helm` command line tool * GnuPG command line tools (optional) * Keybase command line tools (optional) **NOTE:** If your PGP private key has a passphrase, you will be prompted to enter that passphrase for any commands that support the `--sign` option. Creating a new chart is the same as before: $ helm create mychart Creating mychart Once ready to package, add the `--sign` flag to `helm package`. Also, specify the name under which the signing key is known and the keyring containing the corresponding private key: $ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart **Note:** The value of the `--key` argument must be a substring of the desired key's `uid` (in the output of `gpg --list-keys`), for example the name or email. **The fingerprint _cannot_ be used.** **TIP:** for GnuPG users, your secret keyring is in `~/.gnupg/secring.gpg`. You can use `gpg --list-secret-keys` to list the keys you have. **Warning:** the GnuPG v2 store your secret keyring using a new format `kbx` on the default location `~/.gnupg/pubring.kbx`. Please use the following command to convert your keyring to the legacy gpg format: $ gpg --export >~/.gnupg/pubring.gpg $ gpg --export-secret-keys >~/.gnupg/secring.gpg At this point, you should see both `mychart-0.1.0.tgz` and `mychart-0.1.0.tgz.prov`. Both files should eventually be uploaded to your desired chart repository. You can verify a chart using `helm verify`: $ helm verify mychart-0.1.0.tgz A failed verification looks like this: $ helm verify topchart-0.1.0.tgz Error: sha256 sum does not match for topchart-0.1.0.tgz: "sha256:1939fbf7c1023d2f6b865d137bbb600e0c42061c3235528b1e8c82f4450c12a7" != "sha256:5a391a90de56778dd3274e47d789a2c84e0e106e1a37ef8cfa51fd60ac9e623a" To verify during an install, use the `--verify` flag. $ helm install --generate-name --verify mychart-0.1.0.tgz If the keyring containing the public key associated with the signed chart is not in the default location, you may need to point to the keyring with `--keyring PATH` as in the `helm package` example. If verification fails, the install will be aborted before the chart is even rendered. ### Using Keybase.io credentials The [Keybase.io](https://keybase.io/) service makes it easy to establish a chain of trust for a cryptographic identity. Keybase credentials can be used to sign charts. Prerequisites: * A configured Keybase.io account * GnuPG installed locally * The `keybase` CLI installed locally #### Signing packages The first step is to import your keybase keys into your local GnuPG keyring: $ keybase pgp export -s | gpg --import This will convert your Keybase key into the OpenPGP format, and then import it locally into your `~/.gnupg/secring.gpg` file. You can double check by running `gpg --list-secret-keys`. $ gpg --list-secret-keys /Users/mattbutcher/.gnupg/secring.gpg ------------------------------------- sec 2048R/1FC18762 2016-07-25 uid technosophos (keybase.io/technosophos) ssb 2048R/D125E546 2016-07-25 Note that your secret key will have an identifier string: technosophos (keybase.io/technosophos) That is the full name of your key. Next, you can package and sign a chart with `helm package`. Make sure you use at least part of that name string in `--key`. $ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart As a result, the `package` command should produce both a `.tgz` file and a `.tgz.prov` file. #### Verifying packages You can also use a similar technique to verify a chart signed by someone else's Keybase key. Say you want to verify a package signed by `keybase.io/technosophos`. To do this, use the `keybase` tool: $ keybase follow technosophos $ keybase pgp pull The first command above tracks the user `technosophos`. Next `keybase pgp pull` downloads the OpenPGP keys of all of the accounts you follow, placing them in your GnuPG keyring (`~/.gnupg/pubring.gpg`). At this point, you can now use `helm verify` or any of the commands with a `--verify` flag: $ helm verify somechart-1.2.3.tgz ### Reasons a chart may not verify These are common reasons for failure. * The `.prov` file is missing or corrupt. This indicates that something is misconfigured or that the original maintainer did not create a provenance file. * The key used to sign the file is not in your keyring. This indicate that the entity who signed the chart is not someone you've already signaled that you trust. * The verification of the `.prov` file failed. This indicates that something is wrong with either the chart or the provenance data. * The file hashes in the provenance file do not match the hash of the archive file. This indicates that the archive has been tampered with. If a verification fails, there is reason to distrust the package. The Provenance File ------------------- The provenance file contains a chart’s YAML file plus several pieces of verification information. Provenance files are designed to be automatically generated. The following pieces of provenance data are added: * The chart file (`Chart.yaml`) is included to give both humans and tools an easy view into the contents of the chart. * The signature (SHA256, just like Docker) of the chart package (the `.tgz` file) is included, and may be used to verify the integrity of the chart package. * The entire body is signed using the algorithm used by OpenPGP (see [Keybase.io](https://keybase.io/) for an emerging way of making crypto signing and verification easy). The combination of this gives users the following assurances: * The package itself has not been tampered with (checksum package `.tgz`). * The entity who released this package is known (via the GnuPG/PGP signature). The format of the file looks something like this: Hash: SHA512 apiVersion: v2 appVersion: "1.16.0" description: Sample chart name: mychart type: application version: 0.1.0 ... files: mychart-0.1.0.tgz: sha256:d31d2f08b885ec696c37c7f7ef106709aaf5e8575b6d3dc5d52112ed29a9cb92 -----BEGIN PGP SIGNATURE----- wsBcBAEBCgAQBQJdy0ReCRCEO7+YH8GHYgAAfhUIADx3pHHLLINv0MFkiEYpX/Kd nvHFBNps7hXqSocsg0a9Fi1LRAc3OpVh3knjPfHNGOy8+xOdhbqpdnB+5ty8YopI mYMWp6cP/Mwpkt7/gP1ecWFMevicbaFH5AmJCBihBaKJE4R1IX49/wTIaLKiWkv2 cR64bmZruQPSW83UTNULtdD7kuTZXeAdTMjAK0NECsCz9/eK5AFggP4CDf7r2zNi hZsNrzloIlBZlGGns6mUOTO42J/+JojnOLIhI3Psd0HBD2bTlsm/rSfty4yZUs7D qtgooNdohoyGSzR5oapd7fEvauRQswJxOA0m0V+u9/eyLR0+JcYB8Udi1prnWf8= =aHfz -----END PGP SIGNATURE----- Note that the YAML section contains two documents (separated by `...\n`). The first file is the content of `Chart.yaml`. The second is the checksums, a map of filenames to SHA-256 digests of that file's content at packaging time. The signature block is a standard PGP signature, which provides [tamper resistance](https://www.rossde.com/PGP/pgp_signatures.html) . Chart Repositories ------------------ Chart repositories serve as a centralized collection of Helm charts. Chart repositories must make it possible to serve provenance files over HTTP via a specific request, and must make them available at the same URI path as the chart. For example, if the base URL for a package is `https://example.com/charts/mychart-1.2.3.tgz`, the provenance file, if it exists, MUST be accessible at `https://example.com/charts/mychart-1.2.3.tgz.prov`. From the end user's perspective, `helm install --verify myrepo/mychart-1.2.3` should result in the download of both the chart and the provenance file with no additional user configuration or action. ### Signatures in OCI-based registries When publishing charts to an [OCI-based registry](https://helm.sh/docs/topics/registries/) , the [`helm-sigstore` plugin](https://github.com/sigstore/helm-sigstore/) can be used to publish provenance to [sigstore](https://sigstore.dev/) . [As described in the documentation](https://github.com/sigstore/helm-sigstore/blob/main/USAGE.md) , the process of creating provenance and signing with a GPG key are common, but the `helm sigstore upload` command can be used to publish the provenance to an immutable transparency log. Establishing Authority and Authenticity --------------------------------------- When dealing with chain-of-trust systems, it is important to be able to establish the authority of a signer. Or, to put this plainly, the system above hinges on the fact that you trust the person who signed the chart. That, in turn, means you need to trust the public key of the signer. One of the design decisions with Helm has been that the Helm project would not insert itself into the chain of trust as a necessary party. We don't want to be "the certificate authority" for all chart signers. Instead, we strongly favor a decentralized model, which is part of the reason we chose OpenPGP as our foundational technology. So when it comes to establishing authority, we have left this step more-or-less undefined in Helm 2 (a decision carried forward in Helm 3). However, we have some pointers and recommendations for those interested in using the provenance system: * The [Keybase](https://keybase.io/) platform provides a public centralized repository for trust information. * You can use Keybase to store your keys or to get the public keys of others. * Keybase also has fabulous documentation available * While we haven't tested it, Keybase's "secure website" feature could be used to serve Helm charts. * The basic idea is that an official "chart reviewer" signs charts with her or his key, and the resulting provenance file is then uploaded to the chart repository. * There has been some work on the idea that a list of valid signing keys may be included in the `index.yaml` file of a repository. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Template Functions and Pipelines Template Functions and Pipelines ================================ So far, we've seen how to place information into a template. But that information is placed into the template unmodified. Sometimes we want to transform the supplied data in a way that makes it more useable to us. Let's start with a best practice: When injecting strings from the `.Values` object into the template, we ought to quote these strings. We can do that by calling the `quote` function in the template directive: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ quote .Values.favorite.drink }} food: {{ quote .Values.favorite.food }} Template functions follow the syntax `functionName arg1 arg2...`. In the snippet above, `quote .Values.favorite.drink` calls the `quote` function and passes it a single argument. Helm has over 60 available functions. Some of them are defined by the [Go template language](https://godoc.org/text/template) itself. Most of the others are part of the [Sprig template library](https://masterminds.github.io/sprig/) . We'll see many of them as we progress through the examples. > While we talk about the "Helm template language" as if it is Helm-specific, it is actually a combination of the Go template language, some extra functions, and a variety of wrappers to expose certain objects to the templates. Many resources on Go templates may be helpful as you learn about templating. Pipelines --------- One of the powerful features of the template language is its concept of _pipelines_. Drawing on a concept from UNIX, pipelines are a tool for chaining together a series of template commands to compactly express a series of transformations. In other words, pipelines are an efficient way of getting several things done in sequence. Let's rewrite the above example using a pipeline. apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | quote }} food: {{ .Values.favorite.food | quote }} In this example, instead of calling `quote ARGUMENT`, we inverted the order. We "sent" the argument to the function using a pipeline (`|`): `.Values.favorite.drink | quote`. Using pipelines, we can chain several functions together: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | quote }} food: {{ .Values.favorite.food | upper | quote }} > Inverting the order is a common practice in templates. You will see `.val | quote` more often than `quote .val`. Either practice is fine. When evaluated, that template will produce this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: trendsetting-p-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" Note that our original `pizza` has now been transformed to `"PIZZA"`. When pipelining arguments like this, the result of the first evaluation (`.Values.favorite.drink`) is sent as the _last argument to the function_. We can modify the drink example above to illustrate with a function that takes two arguments: `repeat COUNT STRING`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | repeat 5 | quote }} food: {{ .Values.favorite.food | upper | quote }} The `repeat` function will echo the given string the given number of times, so we will get this for output: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: melting-porcup-configmap data: myvalue: "Hello World" drink: "coffeecoffeecoffeecoffeecoffee" food: "PIZZA" Using the `default` function ---------------------------- One function frequently used in templates is the `default` function: `default DEFAULT_VALUE GIVEN_VALUE`. This function allows you to specify a default value inside of the template, in case the value is omitted. Let's use it to modify the drink example above: drink: {{ .Values.favorite.drink | default "tea" | quote }} If we run this as normal, we'll get our `coffee`: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: virtuous-mink-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" Now, we will remove the favorite drink setting from `values.yaml`: favorite: #drink: coffee food: pizza Now re-running `helm install --dry-run --debug fair-worm ./mychart` will produce this YAML: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: fair-worm-configmap data: myvalue: "Hello World" drink: "tea" food: "PIZZA" In an actual chart, all static default values should live in the `values.yaml`, and should not be repeated using the `default` command (otherwise they would be redundant). However, the `default` command is perfect for computed values, which cannot be declared inside `values.yaml`. For example: drink: {{ .Values.favorite.drink | default (printf "%s-tea" (include "fullname" .)) }} In some places, an `if` conditional guard may be better suited than `default`. We'll see those in the next section. Template functions and pipelines are a powerful way to transform information and then insert it into your YAML. But sometimes it's necessary to add some template logic that is a little more sophisticated than just inserting a string. In the next section we will look at the control structures provided by the template language. Using the `lookup` function --------------------------- The `lookup` function can be used to _look up_ resources in a running cluster. The synopsis of the lookup function is `lookup apiVersion, kind, namespace, name -> resource or resource list`. | parameter | type | | --- | --- | | apiVersion | string | | kind | string | | namespace | string | | name | string | Both `name` and `namespace` are optional and can be passed as an empty string (`""`). However, if you're working with a namespace-scoped resource, both `name` and `namespace` must be specified. The following combination of parameters are possible: | Behavior | Lookup function | | --- | --- | | `kubectl get pod mypod -n mynamespace` | `lookup "v1" "Pod" "mynamespace" "mypod"` | | `kubectl get pods -n mynamespace` | `lookup "v1" "Pod" "mynamespace" ""` | | `kubectl get pods --all-namespaces` | `lookup "v1" "Pod" "" ""` | | `kubectl get namespace mynamespace` | `lookup "v1" "Namespace" "" "mynamespace"` | | `kubectl get namespaces` | `lookup "v1" "Namespace" "" ""` | When `lookup` returns an object, it will return a dictionary. This dictionary can be further navigated to extract specific values. The following example will return the annotations present for the `mynamespace` object: (lookup "v1" "Namespace" "" "mynamespace").metadata.annotations When `lookup` returns a list of objects, it is possible to access the object list via the `items` field: {{ range $index, $service := (lookup "v1" "Service" "mynamespace" "").items }} {{/* do something with each service */}} {{ end }} When no object is found, an empty value is returned. This can be used to check for the existence of an object. The `lookup` function uses Helm's existing Kubernetes connection configuration to query Kubernetes. If any error is returned when interacting with calling the API server (for example due to lack of permission to access a resource), Helm's template processing will fail. Keep in mind that Helm is not supposed to contact the Kubernetes API Server during a `helm template|install|upgrade|delete|rollback --dry-run` operation. To test `lookup` against a running cluster, `helm template|install|upgrade|delete|rollback --dry-run=server` should be used instead to allow cluster connection. Operators are functions ----------------------- For templates, the operators (`eq`, `ne`, `lt`, `gt`, `and`, `or` and so on) are all implemented as functions. In pipelines, operations can be grouped with parentheses (`(`, and `)`). Now we can turn from functions and pipelines to flow control with conditions, loops, and scope modifiers. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Pods and PodTemplates Pods and PodTemplates ===================== This part of the Best Practices Guide discusses formatting the Pod and PodTemplate portions in chart manifests. The following (non-exhaustive) list of resources use PodTemplates: * Deployment * ReplicationController * ReplicaSet * DaemonSet * StatefulSet Images ------ A container image should use a fixed tag or the SHA of the image. It should not use the tags `latest`, `head`, `canary`, or other tags that are designed to be "floating". Images _may_ be defined in the `values.yaml` file to make it easy to swap out images. image: {{ .Values.redisImage | quote }} An image and a tag _may_ be defined in `values.yaml` as two separate fields: image: "{{ .Values.redisImage }}:{{ .Values.redisTag }}" ImagePullPolicy --------------- `helm create` sets the `imagePullPolicy` to `IfNotPresent` by default by doing the following in your `deployment.yaml`: imagePullPolicy: {{ .Values.image.pullPolicy }} And `values.yaml`: image: pullPolicy: IfNotPresent Similarly, Kubernetes defaults the `imagePullPolicy` to `IfNotPresent` if it is not defined at all. If you want a value other than `IfNotPresent`, simply update the value in `values.yaml` to your desired value. PodTemplates Should Declare Selectors ------------------------------------- All PodTemplate sections should specify a selector. For example: selector: matchLabels: app.kubernetes.io/name: MyName template: metadata: labels: app.kubernetes.io/name: MyName This is a good practice because it makes the relationship between the set and the pod. But this is even more important for sets like Deployment. Without this, the _entire_ set of labels is used to select matching pods, and this will break if you use labels that change, like version or release date. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Labels and Annotations Labels and Annotations ====================== This part of the Best Practices Guide discusses the best practices for using labels and annotations in your chart. Is it a Label or an Annotation? ------------------------------- An item of metadata should be a label under the following conditions: * It is used by Kubernetes to identify this resource * It is useful to expose to operators for the purpose of querying the system. For example, we suggest using `helm.sh/chart: NAME-VERSION` as a label so that operators can conveniently find all of the instances of a particular chart to use. If an item of metadata is not used for querying, it should be set as an annotation instead. Helm hooks are always annotations. Standard Labels --------------- The following table defines common labels that Helm charts use. Helm itself never requires that a particular label be present. Labels that are marked REC are recommended, and _should_ be placed onto a chart for global consistency. Those marked OPT are optional. These are idiomatic or commonly in use, but are not relied upon frequently for operational purposes. | Name | Status | Description | | --- | --- | --- | | `app.kubernetes.io/name` | REC | This should be the app name, reflecting the entire app. Usually `{{ template "name" . }}` is used for this. This is used by many Kubernetes manifests, and is not Helm-specific. | | `helm.sh/chart` | REC | This should be the chart name and version: `{{ .Chart.Name }}-{{ .Chart.Version \| replace "+" "_" }}`. | | `app.kubernetes.io/managed-by` | REC | This should always be set to `{{ .Release.Service }}`. It is for finding all things managed by Helm. | | `app.kubernetes.io/instance` | REC | This should be the `{{ .Release.Name }}`. It aids in differentiating between different instances of the same application. | | `app.kubernetes.io/version` | OPT | The version of the app and can be set to `{{ .Chart.AppVersion }}`. | | `app.kubernetes.io/component` | OPT | This is a common label for marking the different roles that pieces may play in an application. For example, `app.kubernetes.io/component: frontend`. | | `app.kubernetes.io/part-of` | OPT | When multiple charts or pieces of software are used together to make one application. For example, application software and a database to produce a website. This can be set to the top level application being supported. | You can find more information on the Kubernetes labels, prefixed with `app.kubernetes.io`, in the [Kubernetes documentation](https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | The Chart Repository Guide The Chart Repository Guide ========================== This section explains how to create and work with Helm chart repositories. At a high level, a chart repository is a location where packaged charts can be stored and shared. The distributed community Helm chart repository is located at [Artifact Hub](https://artifacthub.io/packages/search?kind=0) and welcomes participation. But Helm also makes it possible to create and run your own chart repository. This guide explains how to do so. If you are considering creating a chart repository, you may want to consider using an [OCI registry](https://helm.sh/docs/topics/registries/) instead. Prerequisites ------------- * Go through the [Quickstart](https://helm.sh/docs/intro/quickstart/) Guide * Read through the [Charts](https://helm.sh/docs/topics/charts/) document Create a chart repository ------------------------- A _chart repository_ is an HTTP server that houses an `index.yaml` file and optionally some packaged charts. When you're ready to share your charts, the preferred way to do so is by uploading them to a chart repository. As of Helm 2.2.0, client-side SSL auth to a repository is supported. Other authentication protocols may be available as plugins. Because a chart repository can be any HTTP server that can serve YAML and tar files and can answer GET requests, you have a plethora of options when it comes down to hosting your own chart repository. For example, you can use a Google Cloud Storage (GCS) bucket, Amazon S3 bucket, GitHub Pages, or even create your own web server. ### The chart repository structure A chart repository consists of packaged charts and a special file called `index.yaml` which contains an index of all of the charts in the repository. Frequently, the charts that `index.yaml` describes are also hosted on the same server, as are the [provenance files](https://helm.sh/docs/topics/provenance/) . For example, the layout of the repository `https://example.com/charts` might look like this: charts/ | |- index.yaml | |- alpine-0.1.2.tgz | |- alpine-0.1.2.tgz.prov In this case, the index file would contain information about one chart, the Alpine chart, and provide the download URL `https://example.com/charts/alpine-0.1.2.tgz` for that chart. It is not required that a chart package be located on the same server as the `index.yaml` file. However, doing so is often the easiest. ### The index file The index file is a yaml file called `index.yaml`. It contains some metadata about the package, including the contents of a chart's `Chart.yaml` file. A valid chart repository must have an index file. The index file contains information about each chart in the chart repository. The `helm repo index` command will generate an index file based on a given local directory that contains packaged charts. This is an example of an index file: apiVersion: v1 entries: alpine: - created: 2016-10-06T16:23:20.499814565-06:00 description: Deploy a basic Alpine Linux pod digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd home: https://helm.sh/helm name: alpine sources: - https://github.com/helm/helm urls: - https://technosophos.github.io/tscharts/alpine-0.2.0.tgz version: 0.2.0 - created: 2016-10-06T16:23:20.499543808-06:00 description: Deploy a basic Alpine Linux pod digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727 home: https://helm.sh/helm name: alpine sources: - https://github.com/helm/helm urls: - https://technosophos.github.io/tscharts/alpine-0.1.0.tgz version: 0.1.0 nginx: - created: 2016-10-06T16:23:20.499543808-06:00 description: Create a basic nginx HTTP server digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff home: https://helm.sh/helm name: nginx sources: - https://github.com/helm/charts urls: - https://technosophos.github.io/tscharts/nginx-1.1.0.tgz version: 1.1.0 generated: 2016-10-06T16:23:20.499029981-06:00 Hosting Chart Repositories -------------------------- This part shows several ways to serve a chart repository. ### Google Cloud Storage The first step is to **create your GCS bucket**. We'll call ours `fantastic-charts`. ![Create a GCS Bucket](https://helm.sh/img/create-a-bucket.png) Next, make your bucket public by **editing the bucket permissions**. ![Edit Permissions](https://helm.sh/img/edit-permissions.png) Insert this line item to **make your bucket public**: ![Make Bucket Public](https://helm.sh/img/make-bucket-public.png) Congratulations, now you have an empty GCS bucket ready to serve charts! You may upload your chart repository using the Google Cloud Storage command line tool, or using the GCS web UI. A public GCS bucket can be accessed via simple HTTPS at this address: `https://bucket-name.storage.googleapis.com/`. ### Cloudsmith You can also set up chart repositories using Cloudsmith. Read more about chart repositories with Cloudsmith [here](https://help.cloudsmith.io/docs/helm-chart-repository) ### JFrog Artifactory Similarly, you can also set up chart repositories using JFrog Artifactory. Read more about chart repositories with JFrog Artifactory [here](https://www.jfrog.com/confluence/display/RTF/Helm+Chart+Repositories) ### GitHub Pages example In a similar way you can create charts repository using GitHub Pages. GitHub allows you to serve static web pages in two different ways: * By configuring a project to serve the contents of its `docs/` directory * By configuring a project to serve a particular branch We'll take the second approach, though the first is just as easy. The first step will be to **create your gh-pages branch**. You can do that locally as. $ git checkout -b gh-pages Or via web browser using **Branch** button on your GitHub repository: ![Create GitHub Pages branch](https://helm.sh/img/create-a-gh-page-button.png) Next, you'll want to make sure your **gh-pages branch** is set as GitHub Pages, click on your repo **Settings** and scroll down to **GitHub pages** section and set as per below: ![Create GitHub Pages branch](https://helm.sh/img/set-a-gh-page.png) By default **Source** usually gets set to **gh-pages branch**. If this is not set by default, then select it. You can use a **custom domain** there if you wish so. And check that **Enforce HTTPS** is ticked, so the **HTTPS** will be used when charts are served. In such setup you can use your default branch to store your charts code, and **gh-pages branch** as charts repository, e.g.: `https://USERNAME.github.io/REPONAME`. The demonstration [TS Charts](https://github.com/technosophos/tscharts) repository is accessible at `https://technosophos.github.io/tscharts/`. If you have decided to use GitHub pages to host the chart repository, check out [Chart Releaser Action](https://helm.sh/docs/howto/chart_releaser_action/) . Chart Releaser Action is a GitHub Action workflow to turn a GitHub project into a self-hosted Helm chart repo, using [helm/chart-releaser](https://github.com/helm/chart-releaser) CLI tool. ### Ordinary web servers To configure an ordinary web server to serve Helm charts, you merely need to do the following: * Put your index and charts in a directory that the server can serve * Make sure the `index.yaml` file can be accessed with no authentication requirement * Make sure `yaml` files are served with the correct content type (`text/yaml` or `text/x-yaml`) For example, if you want to serve your charts out of `$WEBROOT/charts`, make sure there is a `charts/` directory in your web root, and put the index file and charts inside of that folder. ### ChartMuseum Repository Server ChartMuseum is an open-source Helm Chart Repository server written in Go (Golang), with support for cloud storage backends, including [Google Cloud Storage](https://cloud.google.com/storage/) , [Amazon S3](https://aws.amazon.com/s3/) , [Microsoft Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/) , [Alibaba Cloud OSS Storage](https://www.alibabacloud.com/product/oss) , [Openstack Object Storage](https://developer.openstack.org/api-ref/object-store/) , [Oracle Cloud Infrastructure Object Storage](https://cloud.oracle.com/storage) , [Baidu Cloud BOS Storage](https://cloud.baidu.com/product/bos.html) , [Tencent Cloud Object Storage](https://intl.cloud.tencent.com/product/cos) , [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces/) , [Minio](https://min.io/) , and [etcd](https://etcd.io/) . You can also use the [ChartMuseum](https://chartmuseum.com/docs/#using-with-local-filesystem-storage) server to host a chart repository from a local file system. ### GitLab Package Registry With GitLab you can publish Helm charts in your project’s Package Registry. Read more about setting up a helm package repository with GitLab [here](https://docs.gitlab.com/ee/user/packages/helm_repository/) . Managing Chart Repositories --------------------------- Now that you have a chart repository, the last part of this guide explains how to maintain charts in that repository. ### Store charts in your chart repository Now that you have a chart repository, let's upload a chart and an index file to the repository. Charts in a chart repository must be packaged (`helm package chart-name/`) and versioned correctly (following [SemVer 2](https://semver.org/) guidelines). These next steps compose an example workflow, but you are welcome to use whatever workflow you fancy for storing and updating charts in your chart repository. Once you have a packaged chart ready, create a new directory, and move your packaged chart to that directory. $ helm package docs/examples/alpine/ $ mkdir fantastic-charts $ mv alpine-0.1.0.tgz fantastic-charts/ $ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com The last command takes the path of the local directory that you just created and the URL of your remote chart repository and composes an `index.yaml` file inside the given directory path. Now you can upload the chart and the index file to your chart repository using a sync tool or manually. If you're using Google Cloud Storage, check out this [example workflow](https://helm.sh/docs/howto/chart_repository_sync_example/) using the gsutil client. For GitHub, you can simply put the charts in the appropriate destination branch. ### Add new charts to an existing repository Each time you want to add a new chart to your repository, you must regenerate the index. The `helm repo index` command will completely rebuild the `index.yaml` file from scratch, including only the charts that it finds locally. However, you can use the `--merge` flag to incrementally add new charts to an existing `index.yaml` file (a great option when working with a remote repository like GCS). Run `helm repo index --help` to learn more, Make sure that you upload both the revised `index.yaml` file and the chart. And if you generated a provenance file, upload that too. ### Share your charts with others When you're ready to share your charts, simply let someone know what the URL of your repository is. From there, they will add the repository to their helm client via the `helm repo add [NAME] [URL]` command with any name they would like to use to reference the repository. $ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com $ helm repo list fantastic-charts https://fantastic-charts.storage.googleapis.com If the charts are backed by HTTP basic authentication, you can also supply the username and password here: $ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password $ helm repo list fantastic-charts https://fantastic-charts.storage.googleapis.com **Note:** A repository will not be added if it does not contain a valid `index.yaml`. **Note:** If your helm repository is e.g. using a self signed certificate, you can use `helm repo add --insecure-skip-tls-verify ...` in order to skip the CA verification. After that, your users will be able to search through your charts. After you've updated the repository, they can use the `helm repo update` command to get the latest chart information. _Under the hood, the `helm repo add` and `helm repo update` commands are fetching the index.yaml file and storing them in the `$XDG_CACHE_HOME/helm/repository/cache/` directory. This is where the `helm search` function finds information about charts._ [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs ### Quicklinks [#### Introduction\ \ Introduces the Helm Go SDK](https://helm.sh/docs/sdk/gosdk/) [#### Examples\ \ Examples various features if the Helm SDK](https://helm.sh/docs/sdk/examples/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Helm Commands ============= Here you’ll find the list of CLI commands for Helm, with help info on their usage. ### Quicklinks [](https://helm.sh/docs/helm/helm_delete/) [](https://helm.sh/docs/helm/helm_init/) [](https://helm.sh/docs/helm/helm_inspect/) [#### Helm](https://helm.sh/docs/helm/helm/) [#### Helm Completion](https://helm.sh/docs/helm/helm_completion/) [#### Helm Completion Bash](https://helm.sh/docs/helm/helm_completion_bash/) [#### Helm Completion Fish](https://helm.sh/docs/helm/helm_completion_fish/) [#### Helm Completion Powershell](https://helm.sh/docs/helm/helm_completion_powershell/) [#### Helm Completion Zsh](https://helm.sh/docs/helm/helm_completion_zsh/) [#### Helm Create](https://helm.sh/docs/helm/helm_create/) [#### Helm Dependency](https://helm.sh/docs/helm/helm_dependency/) [#### Helm Dependency Build](https://helm.sh/docs/helm/helm_dependency_build/) [#### Helm Dependency List](https://helm.sh/docs/helm/helm_dependency_list/) [#### Helm Dependency Update](https://helm.sh/docs/helm/helm_dependency_update/) [#### Helm Env](https://helm.sh/docs/helm/helm_env/) [#### Helm Get](https://helm.sh/docs/helm/helm_get/) [#### Helm Get All](https://helm.sh/docs/helm/helm_get_all/) [#### Helm Get Hooks](https://helm.sh/docs/helm/helm_get_hooks/) [#### Helm Get Manifest](https://helm.sh/docs/helm/helm_get_manifest/) [#### Helm Get Metadata](https://helm.sh/docs/helm/helm_get_metadata/) [#### Helm Get Notes](https://helm.sh/docs/helm/helm_get_notes/) [#### Helm Get Values](https://helm.sh/docs/helm/helm_get_values/) [#### Helm History](https://helm.sh/docs/helm/helm_history/) [#### Helm Install](https://helm.sh/docs/helm/helm_install/) [#### Helm Lint](https://helm.sh/docs/helm/helm_lint/) [#### Helm List](https://helm.sh/docs/helm/helm_list/) [#### Helm Package](https://helm.sh/docs/helm/helm_package/) [#### Helm Plugin](https://helm.sh/docs/helm/helm_plugin/) [#### Helm Plugin Install](https://helm.sh/docs/helm/helm_plugin_install/) [#### Helm Plugin List](https://helm.sh/docs/helm/helm_plugin_list/) [#### Helm Plugin Uninstall](https://helm.sh/docs/helm/helm_plugin_uninstall/) [#### Helm Plugin Update](https://helm.sh/docs/helm/helm_plugin_update/) [#### Helm Pull](https://helm.sh/docs/helm/helm_pull/) [#### Helm Push](https://helm.sh/docs/helm/helm_push/) [#### Helm Registry](https://helm.sh/docs/helm/helm_registry/) [#### Helm Registry Login](https://helm.sh/docs/helm/helm_registry_login/) [#### Helm Registry Logout](https://helm.sh/docs/helm/helm_registry_logout/) [#### Helm Repo](https://helm.sh/docs/helm/helm_repo/) [#### Helm Repo Add](https://helm.sh/docs/helm/helm_repo_add/) [#### Helm Repo Index](https://helm.sh/docs/helm/helm_repo_index/) [#### Helm Repo List](https://helm.sh/docs/helm/helm_repo_list/) [#### Helm Repo Remove](https://helm.sh/docs/helm/helm_repo_remove/) [#### Helm Repo Update](https://helm.sh/docs/helm/helm_repo_update/) [#### Helm Rollback](https://helm.sh/docs/helm/helm_rollback/) [#### Helm Search](https://helm.sh/docs/helm/helm_search/) [#### Helm Search Hub](https://helm.sh/docs/helm/helm_search_hub/) [#### Helm Search Repo](https://helm.sh/docs/helm/helm_search_repo/) [#### Helm Show](https://helm.sh/docs/helm/helm_show/) [#### Helm Show All](https://helm.sh/docs/helm/helm_show_all/) [#### Helm Show Chart](https://helm.sh/docs/helm/helm_show_chart/) [#### Helm Show Crds](https://helm.sh/docs/helm/helm_show_crds/) [#### Helm Show Readme](https://helm.sh/docs/helm/helm_show_readme/) [#### Helm Show Values](https://helm.sh/docs/helm/helm_show_values/) [#### Helm Status](https://helm.sh/docs/helm/helm_status/) [#### Helm Template](https://helm.sh/docs/helm/helm_template/) [#### Helm Test](https://helm.sh/docs/helm/helm_test/) [#### Helm Uninstall](https://helm.sh/docs/helm/helm_uninstall/) [#### Helm Upgrade](https://helm.sh/docs/helm/helm_upgrade/) [#### Helm Verify](https://helm.sh/docs/helm/helm_verify/) [#### Helm Version](https://helm.sh/docs/helm/helm_version/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Localizing Helm Documentation Localizing Helm Documentation ============================= This guide explains how to localize the Helm documentation. Getting Started --------------- Contributions for translations use the same process as contributions for documentation. Translations are supplied through [pull requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) to the [helm-www](https://github.com/helm/helm-www) git repository and pull requests are reviewed by the team that manages the website. ### Two-letter Language Code Documentation is organized by the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) for the language codes. For example, the two-letter code for Korean is `ko`. In content and configuration you will find the language code in use. Here are 3 examples: * In the `content` directory the language codes are the subdirectories and the localized content for the language is in each directory. Primarily in the `docs` subdirectory of each language code directory. * The `i18n` directory contains a configuration file for each language with phrases used on the website. The files are named with the pattern `[LANG].toml` where `[LANG]` is the two letter language code. * In the top level `config.toml` file there is configuration for navigation and other details organized by language code. English, with a language code of `en`, is the default language and source for translations. ### Fork, Branch, Change, Pull Request To contribute translations start by [creating a fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) of the [helm-www repository](https://github.com/helm/helm-www) on GitHub. You will start by committing the changes to your fork. By default your fork will be set to work on the default branch known as `main`. Please use branches to develop your changes and create pull requests. If you are unfamiliar with branches you can [read about them in the GitHub documentation](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-branches) . Once you have a branch make changes to add translations and localize the content to a language. Note, Helm uses a [Developers Certificate of Origin](https://developercertificate.org/) . All commits need to have signoff. When making a commit you can use the `-s` or `--signoff` flag to use your Git configured name and email address to signoff on the commit. More details are available in the [CONTRIBUTING.md](https://github.com/helm/helm-www/blob/main/CONTRIBUTING.md#sign-your-work) file. When you are ready, create a [pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) with the translation back to the helm-www repository. Once a pull request has been created one of the maintainers will review it. Details on that process are in the [CONTRIBUTING.md](https://github.com/helm/helm-www/blob/main/CONTRIBUTING.md) file. Translating Content ------------------- Localizing all of the Helm content is a large task. It is ok to start small. The translations can be expanded over time. ### Starting A New Language When starting a new language there is a minimum needed. This includes: * Adding a `content/[LANG]/docs` directory containing an `_index.md` file. This is the top level documentation landing page. * Creating a `[LANG].toml` file in the `i18n` directory. Initially you can copy the `en.toml` file as a starting point. * Adding a section for the language to the `config.toml` file to expose the new language. An existing language section can serve as a starting point. ### Translating Translated content needs to reside in the `content/[LANG]/docs` directory. It should have the same URL as the English source. For example, to translate the intro into Korean it can be useful to copy the english source like: mkdir -p content/ko/docs/intro cp content/en/docs/intro/install.md content/ko/docs/intro/install.md The content in the new file can then be translated into the other language. Do not add an untranslated copy of an English file to `content/[LANG]/`. Once a language exists on the site, any untranslated pages will redirect to English automatically. Translation takes time, and you always want to be translating the most current version of the docs, not an outdated fork. Make sure you remove any `aliases` lines from the header section. A line like `aliases: ["/docs/using_helm/"]` does not belong in the translations. Those are redirections for old links which don't exist for new pages. Note, translation tools can help with the process. This includes machine generated translations. Machine generated translations should be edited or otherwise reviewing for grammar and meaning by a native language speaker before publishing. Navigating Between Languages ---------------------------- ![Screen Shot 2020-05-11 at 11 24 22\nAM](https://user-images.githubusercontent.com/686194/81597103-035de600-937a-11ea-9834-cd9dcef4e914.png) The site global [config.toml](https://github.com/helm/helm-www/blob/main/config.toml#L83L89) file is where language navigation is configured. To add a new language, add a new set of parameters using the [two-letter language code](https://helm.sh/docs/community/localization/#two-letter-language-code) defined above. Example: # Korean [languages.ko] title = "Helm" description = "Helm - The Kubernetes Package Manager." contentDir = "content/ko" languageName = "한국어 Korean" weight = 1 Resolving Internal Links ------------------------ Translated content will sometimes include links to pages that only exist in another language. This will result in site [build errors](https://app.netlify.com/sites/helm-merge/deploys) . Example: 12:45:31 PM: htmltest started at 12:45:30 on app 12:45:31 PM: ======================================================================== 12:45:31 PM: ko/docs/chart_template_guide/accessing_files/index.html 12:45:31 PM: hash does not exist --- ko/docs/chart_template_guide/accessing_files/index.html --> #basic-example 12:45:31 PM: ✘✘✘ failed in 197.566561ms 12:45:31 PM: 1 error in 212 documents To resolve this, you need to check your content for internal links. * anchor links need to reflect the translated `id` value * internal page links need to be fixed For internal pages that do not exist _(or have not been translated yet)_, the site will not build until a correction is made. As a fallback, the url can point to another language where that content _does_ exist as follows: `< relref path="/docs/topics/library_charts.md" lang="en" >` See the [Hugo Docs on cross references between languages](https://gohugo.io/content-management/cross-references/#link-to-another-language-version) for more info. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Template Function List Template Function List ====================== Helm includes many template functions you can take advantage of in templates. They are listed here and broken down by the following categories: * [Cryptographic and Security](https://helm.sh/docs/chart_template_guide/function_list/#cryptographic-and-security-functions) * [Date](https://helm.sh/docs/chart_template_guide/function_list/#date-functions) * [Dictionaries](https://helm.sh/docs/chart_template_guide/function_list/#dictionaries-and-dict-functions) * [Encoding](https://helm.sh/docs/chart_template_guide/function_list/#encoding-functions) * [File Path](https://helm.sh/docs/chart_template_guide/function_list/#file-path-functions) * [Kubernetes and Chart](https://helm.sh/docs/chart_template_guide/function_list/#kubernetes-and-chart-functions) * [Logic and Flow Control](https://helm.sh/docs/chart_template_guide/function_list/#logic-and-flow-control-functions) * [Lists](https://helm.sh/docs/chart_template_guide/function_list/#lists-and-list-functions) * [Math](https://helm.sh/docs/chart_template_guide/function_list/#math-functions) * [Float Math](https://helm.sh/docs/chart_template_guide/function_list/#float-math-functions) * [Network](https://helm.sh/docs/chart_template_guide/function_list/#network-functions) * [Reflection](https://helm.sh/docs/chart_template_guide/function_list/#reflection-functions) * [Regular Expressions](https://helm.sh/docs/chart_template_guide/function_list/#regular-expressions) * [Semantic Versions](https://helm.sh/docs/chart_template_guide/function_list/#semantic-version-functions) * [String](https://helm.sh/docs/chart_template_guide/function_list/#string-functions) * [Type Conversion](https://helm.sh/docs/chart_template_guide/function_list/#type-conversion-functions) * [URL](https://helm.sh/docs/chart_template_guide/function_list/#url-functions) * [UUID](https://helm.sh/docs/chart_template_guide/function_list/#uuid-functions) Logic and Flow Control Functions -------------------------------- Helm includes numerous logic and control flow functions including [and](https://helm.sh/docs/chart_template_guide/function_list/#and) , [coalesce](https://helm.sh/docs/chart_template_guide/function_list/#coalesce) , [default](https://helm.sh/docs/chart_template_guide/function_list/#default) , [empty](https://helm.sh/docs/chart_template_guide/function_list/#empty) , [eq](https://helm.sh/docs/chart_template_guide/function_list/#eq) , [fail](https://helm.sh/docs/chart_template_guide/function_list/#fail) , [ge](https://helm.sh/docs/chart_template_guide/function_list/#ge) , [gt](https://helm.sh/docs/chart_template_guide/function_list/#gt) , [le](https://helm.sh/docs/chart_template_guide/function_list/#le) , [lt](https://helm.sh/docs/chart_template_guide/function_list/#lt) , [ne](https://helm.sh/docs/chart_template_guide/function_list/#ne) , [not](https://helm.sh/docs/chart_template_guide/function_list/#not) , [or](https://helm.sh/docs/chart_template_guide/function_list/#or) , and [required](https://helm.sh/docs/chart_template_guide/function_list/#required) . ### and Returns the boolean AND of two or more arguments (the first empty argument, or the last argument). and .Arg1 .Arg2 ### or Returns the boolean OR of two or more arguments (the first non-empty argument, or the last argument). or .Arg1 .Arg2 ### not Returns the boolean negation of its argument. not .Arg ### eq Returns the boolean equality of the arguments (e.g., Arg1 == Arg2). eq .Arg1 .Arg2 ### ne Returns the boolean inequality of the arguments (e.g., Arg1 != Arg2) ne .Arg1 .Arg2 ### lt Returns a boolean true if the first argument is less than the second. False is returned otherwise (e.g., Arg1 < Arg2). lt .Arg1 .Arg2 ### le Returns a boolean true if the first argument is less than or equal to the second. False is returned otherwise (e.g., Arg1 <= Arg2). le .Arg1 .Arg2 ### gt Returns a boolean true if the first argument is greater than the second. False is returned otherwise (e.g., Arg1 > Arg2). gt .Arg1 .Arg2 ### ge Returns a boolean true if the first argument is greater than or equal to the second. False is returned otherwise (e.g., Arg1 >= Arg2). ge .Arg1 .Arg2 ### default To set a simple default value, use `default`: default "foo" .Bar In the above, if `.Bar` evaluates to a non-empty value, it will be used. But if it is empty, `foo` will be returned instead. The definition of "empty" depends on type: * Numeric: 0 * String: "" * Lists: `[]` * Dicts: `{}` * Boolean: `false` * And always `nil` (aka null) For structs, there is no definition of empty, so a struct will never return the default. ### required Specify values that must be set with `required`: required "A valid foo is required!" .Bar If `.Bar` is empty or not defined (see [default](https://helm.sh/docs/chart_template_guide/function_list/#default) on how this is evaluated), the template will not render and will return the error message supplied instead. ### empty The `empty` function returns `true` if the given value is considered empty, and `false` otherwise. The empty values are listed in the `default` section. empty .Foo Note that in Go template conditionals, emptiness is calculated for you. Thus, you rarely need `if not empty .Foo`. Instead, just use `if .Foo`. ### fail Unconditionally returns an empty `string` and an `error` with the specified text. This is useful in scenarios where other conditionals have determined that template rendering should fail. fail "Please accept the end user license agreement" ### coalesce The `coalesce` function takes a list of values and returns the first non-empty one. coalesce 0 1 2 The above returns `1`. This function is useful for scanning through multiple variables or values: coalesce .name .parent.name "Matt" The above will first check to see if `.name` is empty. If it is not, it will return that value. If it _is_ empty, `coalesce` will evaluate `.parent.name` for emptiness. Finally, if both `.name` and `.parent.name` are empty, it will return `Matt`. ### ternary The `ternary` function takes two values, and a test value. If the test value is true, the first value will be returned. If the test value is empty, the second value will be returned. This is similar to the ternary operator in C and other programming languages. #### true test value ternary "foo" "bar" true or true | ternary "foo" "bar" The above returns `"foo"`. #### false test value ternary "foo" "bar" false or false | ternary "foo" "bar" The above returns `"bar"`. String Functions ---------------- Helm includes the following string functions: [abbrev](https://helm.sh/docs/chart_template_guide/function_list/#abbrev) , [abbrevboth](https://helm.sh/docs/chart_template_guide/function_list/#abbrevboth) , [camelcase](https://helm.sh/docs/chart_template_guide/function_list/#camelcase) , [cat](https://helm.sh/docs/chart_template_guide/function_list/#cat) , [contains](https://helm.sh/docs/chart_template_guide/function_list/#contains) , [hasPrefix](https://helm.sh/docs/chart_template_guide/function_list/#hasprefix-and-hassuffix) , [hasSuffix](https://helm.sh/docs/chart_template_guide/function_list/#hasprefix-and-hassuffix) , [indent](https://helm.sh/docs/chart_template_guide/function_list/#indent) , [initials](https://helm.sh/docs/chart_template_guide/function_list/#initials) , [kebabcase](https://helm.sh/docs/chart_template_guide/function_list/#kebabcase) , [lower](https://helm.sh/docs/chart_template_guide/function_list/#lower) , [nindent](https://helm.sh/docs/chart_template_guide/function_list/#nindent) , [nospace](https://helm.sh/docs/chart_template_guide/function_list/#nospace) , [plural](https://helm.sh/docs/chart_template_guide/function_list/#plural) , [print](https://helm.sh/docs/chart_template_guide/function_list/#print) , [printf](https://helm.sh/docs/chart_template_guide/function_list/#printf) , [println](https://helm.sh/docs/chart_template_guide/function_list/#println) , [quote](https://helm.sh/docs/chart_template_guide/function_list/#quote-and-squote) , [randAlpha](https://helm.sh/docs/chart_template_guide/function_list/#randalphanum-randalpha-randnumeric-and-randascii) , [randAlphaNum](https://helm.sh/docs/chart_template_guide/function_list/#randalphanum-randalpha-randnumeric-and-randascii) , [randAscii](https://helm.sh/docs/chart_template_guide/function_list/#randalphanum-randalpha-randnumeric-and-randascii) , [randNumeric](https://helm.sh/docs/chart_template_guide/function_list/#randalphanum-randalpha-randnumeric-and-randascii) , [repeat](https://helm.sh/docs/chart_template_guide/function_list/#repeat) , [replace](https://helm.sh/docs/chart_template_guide/function_list/#replace) , [shuffle](https://helm.sh/docs/chart_template_guide/function_list/#shuffle) , [snakecase](https://helm.sh/docs/chart_template_guide/function_list/#snakecase) , [squote](https://helm.sh/docs/chart_template_guide/function_list/#quote-and-squote) , [substr](https://helm.sh/docs/chart_template_guide/function_list/#substr) , [swapcase](https://helm.sh/docs/chart_template_guide/function_list/#swapcase) , [title](https://helm.sh/docs/chart_template_guide/function_list/#title) , [trim](https://helm.sh/docs/chart_template_guide/function_list/#trim) , [trimAll](https://helm.sh/docs/chart_template_guide/function_list/#trimall) , [trimPrefix](https://helm.sh/docs/chart_template_guide/function_list/#trimprefix) , [trimSuffix](https://helm.sh/docs/chart_template_guide/function_list/#trimsuffix) , [trunc](https://helm.sh/docs/chart_template_guide/function_list/#trunc) , [untitle](https://helm.sh/docs/chart_template_guide/function_list/#untitle) , [upper](https://helm.sh/docs/chart_template_guide/function_list/#upper) , [wrap](https://helm.sh/docs/chart_template_guide/function_list/#wrap) , and [wrapWith](https://helm.sh/docs/chart_template_guide/function_list/#wrapwith) . ### print Returns a string from the combination of its parts. print "Matt has " .Dogs " dogs" Types that are not strings are converted to strings where possible. Note, when two arguments next to each other are not strings a space is added between them. ### println Works the same way as [print](https://helm.sh/docs/chart_template_guide/function_list/#print) but adds a new line at the end. ### printf Returns a string based on a formatting string and the arguments to pass to it in order. printf "%s has %d dogs." .Name .NumberDogs The placeholder to use depends on the type for the argument being passed in. This includes: General purpose: * `%v` the value in a default format * when printing dicts, the plus flag (%+v) adds field names * `%%` a literal percent sign; consumes no value Boolean: * `%t` the word true or false Integer: * `%b` base 2 * `%c` the character represented by the corresponding Unicode code point * `%d` base 10 * `%o` base 8 * `%O` base 8 with 0o prefix * `%q` a single-quoted character literal safely escaped * `%x` base 16, with lower-case letters for a-f * `%X` base 16, with upper-case letters for A-F * `%U` Unicode format: U+1234; same as "U+%04X" Floating-point and complex constituents: * `%b` decimal less scientific notation with exponent a power of two, e.g. -123456p-78 * `%e` scientific notation, e.g. -1.234456e+78 * `%E` scientific notation, e.g. -1.234456E+78 * `%f` decimal point but no exponent, e.g. 123.456 * `%F` synonym for %f * `%g` %e for large exponents, %f otherwise. * `%G` %E for large exponents, %F otherwise * `%x` hexadecimal notation (with decimal power of two exponent), e.g. -0x1.23abcp+20 * `%X` upper-case hexadecimal notation, e.g. -0X1.23ABCP+20 String and slice of bytes (treated equivalently with these verbs): * `%s` the uninterpreted bytes of the string or slice * `%q` a double-quoted string safely escaped * `%x` base 16, lower-case, two characters per byte * `%X` base 16, upper-case, two characters per byte Slice: * `%p` address of 0th element in base 16 notation, with leading 0x ### trim The `trim` function removes white space from both sides of a string: trim " hello " The above produces `hello` ### trimAll Removes the given characters from the front and back of a string: trimAll "$" "$5.00" The above returns `5.00` (as a string). ### trimPrefix Trim just the prefix from a string: trimPrefix "-" "-hello" The above returns `hello` ### trimSuffix Trim just the suffix from a string: trimSuffix "-" "hello-" The above returns `hello` ### lower Convert the entire string to lowercase: lower "HELLO" The above returns `hello` ### upper Convert the entire string to uppercase: upper "hello" The above returns `HELLO` ### title Convert to title case: title "hello world" The above returns `Hello World` ### untitle Remove title casing. `untitle "Hello World"` produces `hello world`. ### repeat Repeat a string multiple times: repeat 3 "hello" The above returns `hellohellohello` ### substr Get a substring from a string. It takes three parameters: * start (int) * end (int) * string (string) substr 0 5 "hello world" The above returns `hello` ### nospace Remove all whitespace from a string. nospace "hello w o r l d" The above returns `helloworld` ### trunc Truncate a string trunc 5 "hello world" The above produces `hello`. trunc -5 "hello world" The above produces `world`. ### abbrev Truncate a string with ellipses (`...`) Parameters: * max length * the string abbrev 5 "hello world" The above returns `he...`, since it counts the width of the ellipses against the maximum length. ### abbrevboth Abbreviate both sides: abbrevboth 5 10 "1234 5678 9123" the above produces `...5678...` It takes: * left offset * max length * the string ### initials Given multiple words, take the first letter of each word and combine. initials "First Try" The above returns `FT` ### randAlphaNum, randAlpha, randNumeric, and randAscii These four functions generate cryptographically secure (uses `crypto/rand`) random strings, but with different base character sets: * `randAlphaNum` uses `0-9a-zA-Z` * `randAlpha` uses `a-zA-Z` * `randNumeric` uses `0-9` * `randAscii` uses all printable ASCII characters Each of them takes one parameter: the integer length of the string. randNumeric 3 The above will produce a random string with three digits. ### wrap Wrap text at a given column count: wrap 80 $someText The above will wrap the string in `$someText` at 80 columns. ### wrapWith `wrapWith` works as `wrap`, but lets you specify the string to wrap with. (`wrap` uses `\n`) wrapWith 5 "\t" "Hello World" The above produces `Hello World` (where the whitespace is an ASCII tab character) ### contains Test to see if one string is contained inside of another: contains "cat" "catch" The above returns `true` because `catch` contains `cat`. ### hasPrefix and hasSuffix The `hasPrefix` and `hasSuffix` functions test whether a string has a given prefix or suffix: hasPrefix "cat" "catch" The above returns `true` because `catch` has the prefix `cat`. ### quote and squote These functions wrap a string in double quotes (`quote`) or single quotes (`squote`). ### cat The `cat` function concatenates multiple strings together into one, separating them with spaces: cat "hello" "beautiful" "world" The above produces `hello beautiful world` ### indent The `indent` function indents every line in a given string to the specified indent width. This is useful when aligning multi-line strings: indent 4 $lots_of_text The above will indent every line of text by 4 space characters. ### nindent The `nindent` function is the same as the indent function, but prepends a new line to the beginning of the string. nindent 4 $lots_of_text The above will indent every line of text by 4 space characters and add a new line to the beginning. ### replace Perform simple string replacement. It takes three arguments: * string to replace * string to replace with * source string "I Am Henry VIII" | replace " " "-" The above will produce `I-Am-Henry-VIII` ### plural Pluralize a string. len $fish | plural "one anchovy" "many anchovies" In the above, if the length of the string is 1, the first argument will be printed (`one anchovy`). Otherwise, the second argument will be printed (`many anchovies`). The arguments are: * singular string * plural string * length integer NOTE: Helm does not currently support languages with more complex pluralization rules. And `0` is considered a plural because the English language treats it as such (`zero anchovies`). ### snakecase Convert string from camelCase to snake\_case. snakecase "FirstName" This above will produce `first_name`. ### camelcase Convert string from snake\_case to CamelCase camelcase "http_server" This above will produce `HttpServer`. ### kebabcase Convert string from camelCase to kebab-case. kebabcase "FirstName" This above will produce `first-name`. ### swapcase Swap the case of a string using a word based algorithm. Conversion algorithm: * Upper case character converts to Lower case * Title case character converts to Lower case * Lower case character after Whitespace or at start converts to Title case * Other Lower case character converts to Upper case * Whitespace is defined by unicode.IsSpace(char) swapcase "This Is A.Test" This above will produce `tHIS iS a.tEST`. ### shuffle Shuffle a string. shuffle "hello" The above will randomize the letters in `hello`, perhaps producing `oelhl`. Type Conversion Functions ------------------------- The following type conversion functions are provided by Helm: * `atoi`: Convert a string to an integer. * `float64`: Convert to a `float64`. * `int`: Convert to an `int` at the system's width. * `int64`: Convert to an `int64`. * `toDecimal`: Convert a unix octal to a `int64`. * `toString`: Convert to a string. * `toStrings`: Convert a list, slice, or array to a list of strings. * `toJson` (`mustToJson`): Convert list, slice, array, dict, or object to JSON. * `toPrettyJson` (`mustToPrettyJson`): Convert list, slice, array, dict, or object to indented JSON. * `toRawJson` (`mustToRawJson`): Convert list, slice, array, dict, or object to JSON with HTML characters unescaped. * `fromYaml`: Convert a YAML string to an object. * `fromJson`: Convert a JSON string to an object. * `fromJsonArray`: Convert a JSON array to a list. * `toYaml`: Convert list, slice, array, dict, or object to indented yaml, can be used to copy chunks of yaml from any source. This function is equivalent to GoLang yaml.Marshal function, see docs here: [https://pkg.go.dev/gopkg.in/yaml.v2#Marshal](https://pkg.go.dev/gopkg.in/yaml.v2#Marshal) * `toYamlPretty`: Convert list, slice, array, dict, or object to indented yaml. Equivalent to `toYaml` but will additionally indent lists by 2 spaces. * `toToml`: Convert list, slice, array, dict, or object to toml, can be used to copy chunks of toml from any source. * `fromYamlArray`: Convert a YAML array to a list. Only `atoi` requires that the input be a specific type. The others will attempt to convert from any type to the destination type. For example, `int64` can convert floats to ints, and it can also convert strings to ints. ### toStrings Given a list-like collection, produce a slice of strings. list 1 2 3 | toStrings The above converts `1` to `"1"`, `2` to `"2"`, and so on, and then returns them as a list. ### toDecimal Given a unix octal permission, produce a decimal. "0777" | toDecimal The above converts `0777` to `511` and returns the value as an int64. ### toJson, mustToJson The `toJson` function encodes an item into a JSON string. If the item cannot be converted to JSON the function will return an empty string. `mustToJson` will return an error in case the item cannot be encoded in JSON. toJson .Item The above returns JSON string representation of `.Item`. ### toPrettyJson, mustToPrettyJson The `toPrettyJson` function encodes an item into a pretty (indented) JSON string. toPrettyJson .Item The above returns indented JSON string representation of `.Item`. ### toRawJson, mustToRawJson The `toRawJson` function encodes an item into JSON string with HTML characters unescaped. toRawJson .Item The above returns unescaped JSON string representation of `.Item`. ### fromYaml The `fromYaml` function takes a YAML string and returns an object that can be used in templates. `File at: yamls/person.yaml` name: Bob age: 25 hobbies: - hiking - fishing - cooking {{- $person := .Files.Get "yamls/person.yaml" | fromYaml }} greeting: | Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old. My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}. ### fromJson The `fromJson` function takes a JSON string and returns an object that can be used in templates. `File at: jsons/person.json` { "name": "Bob", "age": 25, "hobbies": [\ "hiking",\ "fishing",\ "cooking"\ ] } {{- $person := .Files.Get "jsons/person.json" | fromJson }} greeting: | Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old. My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}. ### fromJsonArray The `fromJsonArray` function takes a JSON Array and returns a list that can be used in templates. `File at: jsons/people.json` [\ { "name": "Bob","age": 25 },\ { "name": "Ram","age": 16 }\ ] {{- $people := .Files.Get "jsons/people.json" | fromJsonArray }} {{- range $person := $people }} greeting: | Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old. {{ end }} ### toYaml, toYamlPretty The `toYaml` and `toYamlPretty` functions encode an object (list, slice, array, dict, or object) into an indented YAML string. > Note that `toYamlPretty` is functionally equivalent but will output YAML with additional indents for list elements # toYaml - name: bob age: 25 hobbies: - hiking - fishing - cooking # toYamlPretty - name: bob age: 25 hobbies: - hiking - fishing - cooking ### fromYamlArray The `fromYamlArray` function takes a YAML Array and returns a list that can be used in templates. `File at: yamls/people.yml` - name: Bob age: 25 - name: Ram age: 16 {{- $people := .Files.Get "yamls/people.yml" | fromYamlArray }} {{- range $person := $people }} greeting: | Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old. {{ end }} Regular Expressions ------------------- Helm includes the following regular expression functions: [regexFind (mustRegexFind)](https://helm.sh/docs/chart_template_guide/function_list/#regexfindall-mustregexfindall) , [regexFindAll (mustRegexFindAll)](https://helm.sh/docs/chart_template_guide/function_list/#regexfind-mustregexfind) , [regexMatch (mustRegexMatch)](https://helm.sh/docs/chart_template_guide/function_list/#regexmatch-mustregexmatch) , [regexReplaceAll (mustRegexReplaceAll)](https://helm.sh/docs/chart_template_guide/function_list/#regexreplaceall-mustregexreplaceall) , [regexReplaceAllLiteral (mustRegexReplaceAllLiteral)](https://helm.sh/docs/chart_template_guide/function_list/#regexreplaceallliteral-mustregexreplaceallliteral) , [regexSplit (mustRegexSplit)](https://helm.sh/docs/chart_template_guide/function_list/#regexsplit-mustregexsplit) . ### regexMatch, mustRegexMatch Returns true if the input string contains any match of the regular expression. regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com" The above produces `true` `regexMatch` panics if there is a problem and `mustRegexMatch` returns an error to the template engine if there is a problem. ### regexFindAll, mustRegexFindAll Returns a slice of all matches of the regular expression in the input string. The last parameter n determines the number of substrings to return, where -1 means return all matches regexFindAll "[2,4,6,8]" "123456789" -1 The above produces `[2 4 6 8]` `regexFindAll` panics if there is a problem and `mustRegexFindAll` returns an error to the template engine if there is a problem. ### regexFind, mustRegexFind Return the first (left most) match of the regular expression in the input string regexFind "[a-zA-Z][1-9]" "abcd1234" The above produces `d1` `regexFind` panics if there is a problem and `mustRegexFind` returns an error to the template engine if there is a problem. ### regexReplaceAll, mustRegexReplaceAll Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement. Inside string replacement, $ signs are interpreted as in Expand, so for instance $1 represents the text of the first submatch regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W" The above produces `-W-xxW-` `regexReplaceAll` panics if there is a problem and `mustRegexReplaceAll` returns an error to the template engine if there is a problem. ### regexReplaceAllLiteral, mustRegexReplaceAllLiteral Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement. The replacement string is substituted directly, without using Expand regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}" The above produces `-${1}-${1}-` `regexReplaceAllLiteral` panics if there is a problem and `mustRegexReplaceAllLiteral` returns an error to the template engine if there is a problem. ### regexSplit, mustRegexSplit Slices the input string into substrings separated by the expression and returns a slice of the substrings between those expression matches. The last parameter `n` determines the number of substrings to return, where `-1` means return all matches regexSplit "z+" "pizza" -1 The above produces `[pi a]` `regexSplit` panics if there is a problem and `mustRegexSplit` returns an error to the template engine if there is a problem. Cryptographic and Security Functions ------------------------------------ Helm provides some advanced cryptographic functions. They include [adler32sum](https://helm.sh/docs/chart_template_guide/function_list/#adler32sum) , [buildCustomCert](https://helm.sh/docs/chart_template_guide/function_list/#buildcustomcert) , [decryptAES](https://helm.sh/docs/chart_template_guide/function_list/#decryptaes) , [derivePassword](https://helm.sh/docs/chart_template_guide/function_list/#derivepassword) , [encryptAES](https://helm.sh/docs/chart_template_guide/function_list/#encryptaes) , [genCA](https://helm.sh/docs/chart_template_guide/function_list/#genca) , [genPrivateKey](https://helm.sh/docs/chart_template_guide/function_list/#genprivatekey) , [genSelfSignedCert](https://helm.sh/docs/chart_template_guide/function_list/#genselfsignedcert) , [genSignedCert](https://helm.sh/docs/chart_template_guide/function_list/#gensignedcert) , [htpasswd](https://helm.sh/docs/chart_template_guide/function_list/#htpasswd) , [randBytes](https://helm.sh/docs/chart_template_guide/function_list/#randbytes) , [sha1sum](https://helm.sh/docs/chart_template_guide/function_list/#sha1sum) , and [sha256sum](https://helm.sh/docs/chart_template_guide/function_list/#sha256sum) . ### sha1sum The `sha1sum` function receives a string, and computes it's SHA1 digest. sha1sum "Hello world!" ### sha256sum The `sha256sum` function receives a string, and computes it's SHA256 digest. sha256sum "Hello world!" The above will compute the SHA 256 sum in an "ASCII armored" format that is safe to print. ### adler32sum The `adler32sum` function receives a string, and computes its Adler-32 checksum. adler32sum "Hello world!" ### htpasswd The `htpasswd` function takes a `username` and `password` and generates a `bcrypt` hash of the password. The result can be used for basic authentication on an [Apache HTTP Server](https://httpd.apache.org/docs/2.4/misc/password_encryptions.html#basic) . htpasswd "myUser" "myPassword" Note that it is insecure to store the password directly in the template. ### randBytes The randBytes function accepts a count N and generates a cryptographically secure (uses crypto/rand) random sequence of N bytes. The sequence is returned as a base64 encoded string. randBytes 24 ### derivePassword The `derivePassword` function can be used to derive a specific password based on some shared "master password" constraints. The algorithm for this is [well specified](https://web.archive.org/web/20211019121301/https://masterpassword.app/masterpassword-algorithm.pdf) . derivePassword 1 "long" "password" "user" "example.com" Note that it is considered insecure to store the parts directly in the template. ### genPrivateKey The `genPrivateKey` function generates a new private key encoded into a PEM block. It takes one of the values for its first param: * `ecdsa`: Generate an elliptic curve DSA key (P256) * `dsa`: Generate a DSA key (L2048N256) * `rsa`: Generate an RSA 4096 key ### buildCustomCert The `buildCustomCert` function allows customizing the certificate. It takes the following string parameters: * A base64 encoded PEM format certificate * A base64 encoded PEM format private key It returns a certificate object with the following attributes: * `Cert`: A PEM-encoded certificate * `Key`: A PEM-encoded private key Example: $ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key" Note that the returned object can be passed to the `genSignedCert` function to sign a certificate using this CA. ### genCA The `genCA` function generates a new, self-signed x509 certificate authority. It takes the following parameters: * Subject's common name (cn) * Cert validity duration in days It returns an object with the following attributes: * `Cert`: A PEM-encoded certificate * `Key`: A PEM-encoded private key Example: $ca := genCA "foo-ca" 365 Note that the returned object can be passed to the `genSignedCert` function to sign a certificate using this CA. ### genSelfSignedCert The `genSelfSignedCert` function generates a new, self-signed x509 certificate. It takes the following parameters: * Subject's common name (cn) * Optional list of IPs; may be nil * Optional list of alternate DNS names; may be nil * Cert validity duration in days It returns an object with the following attributes: * `Cert`: A PEM-encoded certificate * `Key`: A PEM-encoded private key Example: $cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 ### genSignedCert The `genSignedCert` function generates a new, x509 certificate signed by the specified CA. It takes the following parameters: * Subject's common name (cn) * Optional list of IPs; may be nil * Optional list of alternate DNS names; may be nil * Cert validity duration in days * CA (see `genCA`) Example: $ca := genCA "foo-ca" 365 $cert := genSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 $ca ### encryptAES The `encryptAES` function encrypts text with AES-256 CBC and returns a base64 encoded string. encryptAES "secretkey" "plaintext" ### decryptAES The `decryptAES` function receives a base64 string encoded by the AES-256 CBC algorithm and returns the decoded text. "30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey" Date Functions -------------- Helm includes the following date functions you can use in templates: [ago](https://helm.sh/docs/chart_template_guide/function_list/#ago) , [date](https://helm.sh/docs/chart_template_guide/function_list/#date) , [dateInZone](https://helm.sh/docs/chart_template_guide/function_list/#dateinzone) , [dateModify (mustDateModify)](https://helm.sh/docs/chart_template_guide/function_list/#datemodify-mustdatemodify) , [duration](https://helm.sh/docs/chart_template_guide/function_list/#duration) , [durationRound](https://helm.sh/docs/chart_template_guide/function_list/#durationround) , [htmlDate](https://helm.sh/docs/chart_template_guide/function_list/#htmldate) , [htmlDateInZone](https://helm.sh/docs/chart_template_guide/function_list/#htmldateinzone) , [now](https://helm.sh/docs/chart_template_guide/function_list/#now) , [toDate (mustToDate)](https://helm.sh/docs/chart_template_guide/function_list/#todate-musttodate) , and [unixEpoch](https://helm.sh/docs/chart_template_guide/function_list/#unixepoch) . ### now The current date/time. Use this in conjunction with other date functions. ### ago The `ago` function returns duration from time. Now in seconds resolution. ago .CreatedAt returns in `time.Duration` String() format 2h34m7s ### date The `date` function formats a date. Format the date to YEAR-MONTH-DAY: now | date "2006-01-02" Date formatting in Go is a [little bit different](https://pauladamsmith.com/blog/2011/05/go_time.html) . In short, take this as the base date: Mon Jan 2 15:04:05 MST 2006 Write it in the format you want. Above, `2006-01-02` is the same date, but in the format we want. ### dateInZone Same as `date`, but with a timezone. dateInZone "2006-01-02" (now) "UTC" ### duration Formats a given amount of seconds as a `time.Duration`. This returns 1m35s duration "95" ### durationRound Rounds a given duration to the most significant unit. Strings and `time.Duration` gets parsed as a duration, while a `time.Time` is calculated as the duration since. This return 2h durationRound "2h10m5s" This returns 3mo durationRound "2400h10m5s" ### unixEpoch Returns the seconds since the unix epoch for a `time.Time`. now | unixEpoch ### dateModify, mustDateModify The `dateModify` takes a modification and a date and returns the timestamp. Subtract an hour and thirty minutes from the current time: now | dateModify "-1.5h" If the modification format is wrong `dateModify` will return the date unmodified. `mustDateModify` will return an error otherwise. ### htmlDate The `htmlDate` function formats a date for inserting into an HTML date picker input field. now | htmlDate ### htmlDateInZone Same as htmlDate, but with a timezone. htmlDateInZone (now) "UTC" ### toDate, mustToDate `toDate` converts a string to a date. The first argument is the date layout and the second the date string. If the string can't be convert it returns the zero value. `mustToDate` will return an error in case the string cannot be converted. This is useful when you want to convert a string date to another format (using pipe). The example below converts "2017-12-31" to "31/12/2017". toDate "2006-01-02" "2017-12-31" | date "02/01/2006" Dictionaries and Dict Functions ------------------------------- Helm provides a key/value storage type called a `dict` (short for "dictionary", as in Python). A `dict` is an _unordered_ type. The key to a dictionary **must be a string**. However, the value can be any type, even another `dict` or `list`. Unlike `list`s, `dict`s are not immutable. The `set` and `unset` functions will modify the contents of a dictionary. Helm provides the following functions to support working with dicts: [deepCopy (mustDeepCopy)](https://helm.sh/docs/chart_template_guide/function_list/#deepcopy-mustdeepcopy) , [dict](https://helm.sh/docs/chart_template_guide/function_list/#dict) , [dig](https://helm.sh/docs/chart_template_guide/function_list/#dig) , [get](https://helm.sh/docs/chart_template_guide/function_list/#get) , [hasKey](https://helm.sh/docs/chart_template_guide/function_list/#haskey) , [keys](https://helm.sh/docs/chart_template_guide/function_list/#keys) , [merge (mustMerge)](https://helm.sh/docs/chart_template_guide/function_list/#merge-mustmerge) , [mergeOverwrite (mustMergeOverwrite)](https://helm.sh/docs/chart_template_guide/function_list/#mergeoverwrite-mustmergeoverwrite) , [omit](https://helm.sh/docs/chart_template_guide/function_list/#omit) , [pick](https://helm.sh/docs/chart_template_guide/function_list/#pick) , [pluck](https://helm.sh/docs/chart_template_guide/function_list/#pluck) , [set](https://helm.sh/docs/chart_template_guide/function_list/#set) , [unset](https://helm.sh/docs/chart_template_guide/function_list/#unset) , and [values](https://helm.sh/docs/chart_template_guide/function_list/#values) . ### dict Creating dictionaries is done by calling the `dict` function and passing it a list of pairs. The following creates a dictionary with three items: $myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3" ### get Given a map and a key, get the value from the map. get $myDict "name1" The above returns `"value1"` Note that if the key is not found, this operation will simply return `""`. No error will be generated. ### set Use `set` to add a new key/value pair to a dictionary. $_ := set $myDict "name4" "value4" Note that `set` _returns the dictionary_ (a requirement of Go template functions), so you may need to trap the value as done above with the `$_` assignment. ### unset Given a map and a key, delete the key from the map. $_ := unset $myDict "name4" As with `set`, this returns the dictionary. Note that if the key is not found, this operation will simply return. No error will be generated. ### hasKey The `hasKey` function returns `true` if the given dict contains the given key. hasKey $myDict "name1" If the key is not found, this returns `false`. ### pluck The `pluck` function makes it possible to give one key and multiple maps, and get a list of all of the matches: pluck "name1" $myDict $myOtherDict The above will return a `list` containing every found value (`[value1 otherValue1]`). If the given key is _not found_ in a map, that map will not have an item in the list (and the length of the returned list will be less than the number of dicts in the call to `pluck`). If the key is _found_ but the value is an empty value, that value will be inserted. A common idiom in Helm templates is to use `pluck... | first` to get the first matching key out of a collection of dictionaries. ### dig The `dig` function traverses a nested set of dicts, selecting keys from a list of values. It returns a default value if any of the keys are not found at the associated dict. dig "user" "role" "humanName" "guest" $dict Given a dict structured like { user: { role: { humanName: "curator" } } } the above would return `"curator"`. If the dict lacked even a `user` field, the result would be `"guest"`. Dig can be very useful in cases where you'd like to avoid guard clauses, especially since Go's template package's `and` doesn't shortcut. For instance `and a.maybeNil a.maybeNil.iNeedThis` will always evaluate `a.maybeNil.iNeedThis`, and panic if `a` lacks a `maybeNil` field.) `dig` accepts its dict argument last in order to support pipelining. For instance: merge a b c | dig "one" "two" "three" "" ### merge, mustMerge Merge two or more dictionaries into one, giving precedence to the dest dictionary: Given: dst: default: default overwrite: me key: true src: overwrite: overwritten key: false will result in: newdict: default: default overwrite: me key: true $newdict := merge $dest $source1 $source2 This is a deep merge operation but not a deep copy operation. Nested objects that are merged are the same instance on both dicts. If you want a deep copy along with the merge, then use the `deepCopy` function along with merging. For example, deepCopy $source | merge $dest `mustMerge` will return an error in case of unsuccessful merge. ### mergeOverwrite, mustMergeOverwrite Merge two or more dictionaries into one, giving precedence from **right to left**, effectively overwriting values in the dest dictionary: Given: dst: default: default overwrite: me key: true src: overwrite: overwritten key: false will result in: newdict: default: default overwrite: overwritten key: false $newdict := mergeOverwrite $dest $source1 $source2 This is a deep merge operation but not a deep copy operation. Nested objects that are merged are the same instance on both dicts. If you want a deep copy along with the merge then use the `deepCopy` function along with merging. For example, deepCopy $source | mergeOverwrite $dest `mustMergeOverwrite` will return an error in case of unsuccessful merge. ### keys The `keys` function will return a `list` of all of the keys in one or more `dict` types. Since a dictionary is _unordered_, the keys will not be in a predictable order. They can be sorted with `sortAlpha`. keys $myDict | sortAlpha When supplying multiple dictionaries, the keys will be concatenated. Use the `uniq` function along with `sortAlpha` to get a unique, sorted list of keys. keys $myDict $myOtherDict | uniq | sortAlpha ### pick The `pick` function selects just the given keys out of a dictionary, creating a new `dict`. $new := pick $myDict "name1" "name2" The above returns `{name1: value1, name2: value2}` ### omit The `omit` function is similar to `pick`, except it returns a new `dict` with all the keys that _do not_ match the given keys. $new := omit $myDict "name1" "name3" The above returns `{name2: value2}` ### values The `values` function is similar to `keys`, except it returns a new `list` with all the values of the source `dict` (only one dictionary is supported). $vals := values $myDict The above returns `list["value1", "value2", "value 3"]`. Note that the `values` function gives no guarantees about the result ordering; if you care about this, then use `sortAlpha`. ### deepCopy, mustDeepCopy The `deepCopy` and `mustDeepCopy` functions take a value and make a deep copy of the value. This includes dicts and other structures. `deepCopy` panics when there is a problem, while `mustDeepCopy` returns an error to the template system when there is an error. dict "a" 1 "b" 2 | deepCopy ### A Note on Dict Internals A `dict` is implemented in Go as a `map[string]interface{}`. Go developers can pass `map[string]interface{}` values into the context to make them available to templates as `dict`s. Encoding Functions ------------------ Helm has the following encoding and decoding functions: * `b64enc`/`b64dec`: Encode or decode with Base64 * `b32enc`/`b32dec`: Encode or decode with Base32 Lists and List Functions ------------------------ Helm provides a simple `list` type that can contain arbitrary sequential lists of data. This is similar to arrays or slices, but lists are designed to be used as immutable data types. Create a list of integers: $myList := list 1 2 3 4 5 The above creates a list of `[1 2 3 4 5]`. Helm provides the following list functions: [append (mustAppend)](https://helm.sh/docs/chart_template_guide/function_list/#append-mustappend) , [chunk](https://helm.sh/docs/chart_template_guide/function_list/#chunk) , [compact (mustCompact)](https://helm.sh/docs/chart_template_guide/function_list/#compact-mustcompact) , [concat](https://helm.sh/docs/chart_template_guide/function_list/#concat) , [first (mustFirst)](https://helm.sh/docs/chart_template_guide/function_list/#first-mustfirst) , [has (mustHas)](https://helm.sh/docs/chart_template_guide/function_list/#has-musthas) , [initial (mustInitial)](https://helm.sh/docs/chart_template_guide/function_list/#initial-mustinitial) , [last (mustLast)](https://helm.sh/docs/chart_template_guide/function_list/#last-mustlast) , [prepend (mustPrepend)](https://helm.sh/docs/chart_template_guide/function_list/#prepend-mustprepend) , [rest (mustRest)](https://helm.sh/docs/chart_template_guide/function_list/#rest-mustrest) , [reverse (mustReverse)](https://helm.sh/docs/chart_template_guide/function_list/#reverse-mustreverse) , [seq](https://helm.sh/docs/chart_template_guide/function_list/#seq) , [index](https://helm.sh/docs/chart_template_guide/function_list/#index) , [slice (mustSlice)](https://helm.sh/docs/chart_template_guide/function_list/#slice-mustslice) , [uniq (mustUniq)](https://helm.sh/docs/chart_template_guide/function_list/#uniq-mustuniq) , [until](https://helm.sh/docs/chart_template_guide/function_list/#until) , [untilStep](https://helm.sh/docs/chart_template_guide/function_list/#untilstep) , and [without (mustWithout)](https://helm.sh/docs/chart_template_guide/function_list/#without-mustwithout) . ### first, mustFirst To get the head item on a list, use `first`. `first $myList` returns `1` `first` panics if there is a problem, while `mustFirst` returns an error to the template engine if there is a problem. ### rest, mustRest To get the tail of the list (everything but the first item), use `rest`. `rest $myList` returns `[2 3 4 5]` `rest` panics if there is a problem, while `mustRest` returns an error to the template engine if there is a problem. ### last, mustLast To get the last item on a list, use `last`: `last $myList` returns `5`. This is roughly analogous to reversing a list and then calling `first`. ### initial, mustInitial This compliments `last` by returning all _but_ the last element. `initial $myList` returns `[1 2 3 4]`. `initial` panics if there is a problem, while `mustInitial` returns an error to the template engine if there is a problem. ### append, mustAppend Append a new item to an existing list, creating a new list. $new = append $myList 6 The above would set `$new` to `[1 2 3 4 5 6]`. `$myList` would remain unaltered. `append` panics if there is a problem, while `mustAppend` returns an error to the template engine if there is a problem. ### prepend, mustPrepend Push an element onto the front of a list, creating a new list. prepend $myList 0 The above would produce `[0 1 2 3 4 5]`. `$myList` would remain unaltered. `prepend` panics if there is a problem, while `mustPrepend` returns an error to the template engine if there is a problem. ### concat Concatenate arbitrary number of lists into one. concat $myList ( list 6 7 ) ( list 8 ) The above would produce `[1 2 3 4 5 6 7 8]`. `$myList` would remain unaltered. ### reverse, mustReverse Produce a new list with the reversed elements of the given list. reverse $myList The above would generate the list `[5 4 3 2 1]`. `reverse` panics if there is a problem, while `mustReverse` returns an error to the template engine if there is a problem. ### uniq, mustUniq Generate a list with all of the duplicates removed. list 1 1 1 2 | uniq The above would produce `[1 2]` `uniq` panics if there is a problem, while `mustUniq` returns an error to the template engine if there is a problem. ### without, mustWithout The `without` function filters items out of a list. without $myList 3 The above would produce `[1 2 4 5]` `without` can take more than one filter: without $myList 1 3 5 That would produce `[2 4]` `without` panics if there is a problem, while `mustWithout` returns an error to the template engine if there is a problem. ### has, mustHas Test to see if a list has a particular element. has 4 $myList The above would return `true`, while `has "hello" $myList` would return false. `has` panics if there is a problem, while `mustHas` returns an error to the template engine if there is a problem. ### compact, mustCompact Accepts a list and removes entries with empty values. $list := list 1 "a" "foo" "" $copy := compact $list `compact` will return a new list with the empty (i.e., "") item removed. `compact` panics if there is a problem and `mustCompact` returns an error to the template engine if there is a problem. ### index To get the nth element of a list, use `index list [n]`. To index into multi-dimensional lists, use `index list [n] [m] ...` * `index $myList 0` returns `1`. It is the same as `myList[0]` * `index $myList 0 1` would be the same as `myList[0][1]` ### slice, mustSlice To get partial elements of a list, use `slice list [n] [m]`. It is equivalent of `list[n:m]`. * `slice $myList` returns `[1 2 3 4 5]`. It is same as `myList[:]`. * `slice $myList 3` returns `[4 5]`. It is same as `myList[3:]`. * `slice $myList 1 3` returns `[2 3]`. It is same as `myList[1:3]`. * `slice $myList 0 3` returns `[1 2 3]`. It is same as `myList[:3]`. `slice` panics if there is a problem, while `mustSlice` returns an error to the template engine if there is a problem. ### until The `until` function builds a range of integers. until 5 The above generates the list `[0, 1, 2, 3, 4]`. This is useful for looping with `range $i, $e := until 5`. ### untilStep Like `until`, `untilStep` generates a list of counting integers. But it allows you to define a start, stop, and step: untilStep 3 6 2 The above will produce `[3 5]` by starting with 3, and adding 2 until it is equal or greater than 6. This is similar to Python's `range` function. ### seq Works like the bash `seq` command. * 1 parameter (end) - will generate all counting integers between 1 and `end` inclusive. * 2 parameters (start, end) - will generate all counting integers between `start` and `end` inclusive incrementing or decrementing by 1. * 3 parameters (start, step, end) - will generate all counting integers between `start` and `end` inclusive incrementing or decrementing by `step`. seq 5 => 1 2 3 4 5 seq -3 => 1 0 -1 -2 -3 seq 0 2 => 0 1 2 seq 2 -2 => 2 1 0 -1 -2 seq 0 2 10 => 0 2 4 6 8 10 seq 0 -2 -5 => 0 -2 -4 ### chunk To split a list into chunks of given size, use `chunk size list`. This is useful for pagination. chunk 3 (list 1 2 3 4 5 6 7 8) This produces list of lists `[ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ]`. Math Functions -------------- All math functions operate on `int64` values unless specified otherwise. The following math functions are available: [add](https://helm.sh/docs/chart_template_guide/function_list/#add) , [add1](https://helm.sh/docs/chart_template_guide/function_list/#add1) , [ceil](https://helm.sh/docs/chart_template_guide/function_list/#ceil) , [div](https://helm.sh/docs/chart_template_guide/function_list/#div) , [floor](https://helm.sh/docs/chart_template_guide/function_list/#floor) , [len](https://helm.sh/docs/chart_template_guide/function_list/#len) , [max](https://helm.sh/docs/chart_template_guide/function_list/#max) , [min](https://helm.sh/docs/chart_template_guide/function_list/#min) , [mod](https://helm.sh/docs/chart_template_guide/function_list/#mod) , [mul](https://helm.sh/docs/chart_template_guide/function_list/#mul) , [round](https://helm.sh/docs/chart_template_guide/function_list/#round) , and [sub](https://helm.sh/docs/chart_template_guide/function_list/#sub) . ### add Sum numbers with `add`. Accepts two or more inputs. add 1 2 3 ### add1 To increment by 1, use `add1`. ### sub To subtract, use `sub`. ### div Perform integer division with `div`. ### mod Modulo with `mod`. ### mul Multiply with `mul`. Accepts two or more inputs. mul 1 2 3 ### max Return the largest of a series of integers. This will return `3`: max 1 2 3 ### min Return the smallest of a series of integers. `min 1 2 3` will return `1`. ### len Returns the length of the argument as an integer. len .Arg Float Math Functions -------------------- All math functions operate on `float64` values. ### addf Sum numbers with `addf` This will return `5.5`: addf 1.5 2 2 ### add1f To increment by 1, use `add1f` ### subf To subtract, use `subf` This is equivalent to `7.5 - 2 - 3` and will return `2.5`: subf 7.5 2 3 ### divf Perform integer division with `divf` This is equivalent to `10 / 2 / 4` and will return `1.25`: divf 10 2 4 ### mulf Multiply with `mulf` This will return `6`: mulf 1.5 2 2 ### maxf Return the largest of a series of floats: This will return `3`: maxf 1 2.5 3 ### minf Return the smallest of a series of floats. This will return `1.5`: minf 1.5 2 3 ### floor Returns the greatest float value less than or equal to input value. `floor 123.9999` will return `123.0`. ### ceil Returns the greatest float value greater than or equal to input value. `ceil 123.001` will return `124.0`. ### round Returns a float value with the remainder rounded to the given number to digits after the decimal point. `round 123.555555 3` will return `123.556`. Network Functions ----------------- Helm has a single network function, `getHostByName`. The `getHostByName` receives a domain name and returns the ip address. `getHostByName "www.google.com"` would return the corresponding ip address of `www.google.com`. File Path Functions ------------------- While Helm template functions do not grant access to the filesystem, they do provide functions for working with strings that follow file path conventions. Those include [base](https://helm.sh/docs/chart_template_guide/function_list/#base) , [clean](https://helm.sh/docs/chart_template_guide/function_list/#clean) , [dir](https://helm.sh/docs/chart_template_guide/function_list/#dir) , [ext](https://helm.sh/docs/chart_template_guide/function_list/#ext) , and [isAbs](https://helm.sh/docs/chart_template_guide/function_list/#isabs) . ### base Return the last element of a path. base "foo/bar/baz" The above prints "baz". ### dir Return the directory, stripping the last part of the path. So `dir "foo/bar/baz"` returns `foo/bar`. ### clean Clean up a path. clean "foo/bar/../baz" The above resolves the `..` and returns `foo/baz`. ### ext Return the file extension. ext "foo.bar" The above returns `.bar`. ### isAbs To check whether a file path is absolute, use `isAbs`. Reflection Functions -------------------- Helm provides rudimentary reflection tools. These help advanced template developers understand the underlying Go type information for a particular value. Helm is written in Go and is strongly typed. The type system applies within templates. Go has several primitive _kinds_, like `string`, `slice`, `int64`, and `bool`. Go has an open _type_ system that allows developers to create their own types. Helm provides a set of functions for each via [kind functions](https://helm.sh/docs/chart_template_guide/function_list/#kind-functions) and [type functions](https://helm.sh/docs/chart_template_guide/function_list/#type-functions) . A [deepEqual](https://helm.sh/docs/chart_template_guide/function_list/#deepequal) function is also provided to compare to values. ### Kind Functions There are two Kind functions: `kindOf` returns the kind of an object. kindOf "hello" The above would return `string`. For simple tests (like in `if` blocks), the `kindIs` function will let you verify that a value is a particular kind: kindIs "int" 123 The above will return `true`. ### Type Functions Types are slightly harder to work with, so there are three different functions: * `typeOf` returns the underlying type of a value: `typeOf $foo` * `typeIs` is like `kindIs`, but for types: `typeIs "*io.Buffer" $myVal` * `typeIsLike` works as `typeIs`, except that it also dereferences pointers **Note:** None of these can test whether or not something implements a given interface, since doing so would require compiling the interface in ahead of time. ### deepEqual `deepEqual` returns true if two values are ["deeply equal"](https://golang.org/pkg/reflect/#DeepEqual) Works for non-primitive types as well (compared to the built-in `eq`). deepEqual (list 1 2 3) (list 1 2 3) The above will return `true`. Semantic Version Functions -------------------------- Some version schemes are easily parseable and comparable. Helm provides functions for working with [SemVer 2](http://semver.org/) versions. These include [semver](https://helm.sh/docs/chart_template_guide/function_list/#semver) and [semverCompare](https://helm.sh/docs/chart_template_guide/function_list/#semvercompare) . Below you will also find details on using ranges for comparisons. ### semver The `semver` function parses a string into a Semantic Version: $version := semver "1.2.3-alpha.1+123" _If the parser fails, it will cause template execution to halt with an error._ At this point, `$version` is a pointer to a `Version` object with the following properties: * `$version.Major`: The major number (`1` above) * `$version.Minor`: The minor number (`2` above) * `$version.Patch`: The patch number (`3` above) * `$version.Prerelease`: The prerelease (`alpha.1` above) * `$version.Metadata`: The build metadata (`123` above) * `$version.Original`: The original version as a string Additionally, you can compare a `Version` to another `version` using the `Compare` function: semver "1.4.3" | (semver "1.2.3").Compare The above will return `-1`. The return values are: * `-1` if the given semver is greater than the semver whose `Compare` method was called * `1` if the version who's `Compare` function was called is greater. * `0` if they are the same version (Note that in SemVer, the `Metadata` field is not compared during version comparison operations.) ### semverCompare A more robust comparison function is provided as `semverCompare`. This version supports version ranges: * `semverCompare "1.2.3" "1.2.3"` checks for an exact match * `semverCompare "~1.2.0" "1.2.3"` checks that the major and minor versions match, and that the patch number of the second version is _greater than or equal to_ the first parameter. The SemVer functions use the [Masterminds semver library](https://github.com/Masterminds/semver) , from the creators of Sprig. ### Basic Comparisons There are two elements to the comparisons. First, a comparison string is a list of space or comma separated AND comparisons. These are then separated by || (OR) comparisons. For example, `">= 1.2 < 3.0.0 || >= 4.2.3"` is looking for a comparison that's greater than or equal to 1.2 and less than 3.0.0 or is greater than or equal to 4.2.3. The basic comparisons are: * `=`: equal (aliased to no operator) * `!=`: not equal * `>`: greater than * `<`: less than * `>=`: greater than or equal to * `<=`: less than or equal to ### Working With Prerelease Versions Pre-releases, for those not familiar with them, are used for software releases prior to stable or generally available releases. Examples of prereleases include development, alpha, beta, and release candidate releases. A prerelease may be a version such as `1.2.3-beta.1`, while the stable release would be `1.2.3`. In the order of precedence, prereleases come before their associated releases. In this example `1.2.3-beta.1 < 1.2.3`. According to the Semantic Version specification prereleases may not be API compliant with their release counterpart. It says, > A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version. SemVer comparisons using constraints without a prerelease comparator will skip prerelease versions. For example, `>=1.2.3` will skip prereleases when looking at a list of releases, while `>=1.2.3-0` will evaluate and find prereleases. The reason for the `0` as a pre-release version in the example comparison is because pre-releases can only contain ASCII alphanumerics and hyphens (along with `.` separators), per the spec. Sorting happens in ASCII sort order, again per the spec. The lowest character is a `0` in ASCII sort order (see an [ASCII Table](http://www.asciitable.com/) ) Understanding ASCII sort ordering is important because A-Z comes before a-z. That means `>=1.2.3-BETA` will return `1.2.3-alpha`. What you might expect from case sensitivity doesn't apply here. This is due to ASCII sort ordering which is what the spec specifies. ### Hyphen Range Comparisons There are multiple methods to handle ranges and the first is hyphens ranges. These look like: * `1.2 - 1.4.5` which is equivalent to `>= 1.2 <= 1.4.5` * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5` ### Wildcards In Comparisons The `x`, `X`, and `*` characters can be used as a wildcard character. This works for all comparison operators. When used on the `=` operator it falls back to the patch level comparison (see tilde below). For example, * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `>= 1.2.x` is equivalent to `>= 1.2.0` * `<= 2.x` is equivalent to `< 3` * `*` is equivalent to `>= 0.0.0` ### Tilde Range Comparisons (Patch) The tilde (`~`) comparison operator is for patch level ranges when a minor version is specified and major level changes when the minor number is missing. For example, * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` * `~1` is equivalent to `>= 1, < 2` * `~2.3` is equivalent to `>= 2.3, < 2.4` * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `~1.x` is equivalent to `>= 1, < 2` ### Caret Range Comparisons (Major) The caret (`^`) comparison operator is for major level changes once a stable (1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts as the API stability level. This is useful when comparisons of API versions as a major change is API breaking. For example, * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` * `^2.3` is equivalent to `>= 2.3, < 3` * `^2.x` is equivalent to `>= 2.0.0, < 3` * `^0.2.3` is equivalent to `>=0.2.3 <0.3.0` * `^0.2` is equivalent to `>=0.2.0 <0.3.0` * `^0.0.3` is equivalent to `>=0.0.3 <0.0.4` * `^0.0` is equivalent to `>=0.0.0 <0.1.0` * `^0` is equivalent to `>=0.0.0 <1.0.0` URL Functions ------------- Helm includes the [urlParse](https://helm.sh/docs/chart_template_guide/function_list/#urlparse) , [urlJoin](https://helm.sh/docs/chart_template_guide/function_list/#urljoin) , and [urlquery](https://helm.sh/docs/chart_template_guide/function_list/#urlquery) functions enabling you to work with URL parts. ### urlParse Parses string for URL and produces dict with URL parts urlParse "http://admin:secret@server.com:8080/api?list=false#anchor" The above returns a dict, containing URL object: scheme: 'http' host: 'server.com:8080' path: '/api' query: 'list=false' opaque: nil fragment: 'anchor' userinfo: 'admin:secret' This is implemented used the URL packages from the Go standard library. For more info, check [https://golang.org/pkg/net/url/#URL](https://golang.org/pkg/net/url/#URL) ### urlJoin Joins map (produced by `urlParse`) to produce URL string urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http") The above returns the following string: http://host:80/path?query#fragment ### urlquery Returns the escaped version of the value passed in as an argument so that it is suitable for embedding in the query portion of a URL. $var := urlquery "string for query" UUID Functions -------------- Helm can generate UUID v4 universally unique IDs. uuidv4 The above returns a new UUID of the v4 (randomly generated) type. Kubernetes and Chart Functions ------------------------------ Helm includes functions for working with Kubernetes including [.Capabilities.APIVersions.Has](https://helm.sh/docs/chart_template_guide/function_list/#capabilitiesapiversionshas) , [Files](https://helm.sh/docs/chart_template_guide/function_list/#file-functions) , and [lookup](https://helm.sh/docs/chart_template_guide/function_list/#lookup) . ### lookup `lookup` is used to look up resource in a running cluster. When used with the `helm template` command it always returns an empty response. You can find more detail in the [documentation on the lookup function](https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function) . ### .Capabilities.APIVersions.Has Returns if an API version or resource is available in a cluster. .Capabilities.APIVersions.Has "apps/v1" .Capabilities.APIVersions.Has "apps/v1/Deployment" More information is available on the [built-in object documentation](https://helm.sh/docs/chart_template_guide/builtin_objects/) . ### File Functions There are several functions that enable you to get to non-special files within a chart. For example, to access application configuration files. These are documented in [Accessing Files Inside Templates](https://helm.sh/docs/chart_template_guide/accessing_files/) . _Note, the documentation for many of these functions come from [Sprig](https://github.com/Masterminds/sprig) . Sprig is a template function library available to Go applications._ [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Custom Resource Definitions Custom Resource Definitions =========================== This section of the Best Practices Guide deals with creating and using Custom Resource Definition objects. When working with Custom Resource Definitions (CRDs), it is important to distinguish two different pieces: * There is a declaration of a CRD. This is the YAML file that has the kind `CustomResourceDefinition` * Then there are resources that _use_ the CRD. Say a CRD defines `foo.example.com/v1`. Any resource that has `apiVersion: example.com/v1` and kind `Foo` is a resource that uses the CRD. Install a CRD Declaration Before Using the Resource --------------------------------------------------- Helm is optimized to load as many resources into Kubernetes as fast as possible. By design, Kubernetes can take an entire set of manifests and bring them all online (this is called the reconciliation loop). But there's a difference with CRDs. For a CRD, the declaration must be registered before any resources of that CRDs kind(s) can be used. And the registration process sometimes takes a few seconds. ### Method 1: Let `helm` Do It For You With the arrival of Helm 3, we removed the old `crd-install` hooks for a more simple methodology. There is now a special directory called `crds` that you can create in your chart to hold your CRDs. These CRDs are not templated, but will be installed by default when running a `helm install` for the chart. If the CRD already exists, it will be skipped with a warning. If you wish to skip the CRD installation step, you can pass the `--skip-crds` flag. #### Some caveats (and explanations) There is no support at this time for upgrading or deleting CRDs using Helm. This was an explicit decision after much community discussion due to the danger for unintentional data loss. Furthermore, there is currently no community consensus around how to handle CRDs and their lifecycle. As this evolves, Helm will add support for those use cases. The `--dry-run` flag of `helm install` and `helm upgrade` is not currently supported for CRDs. The purpose of "Dry Run" is to validate that the output of the chart will actually work if sent to the server. But CRDs are a modification of the server's behavior. Helm cannot install the CRD on a dry run, so the discovery client will not know about that Custom Resource (CR), and validation will fail. You can alternatively move the CRDs to their own chart or use `helm template` instead. Another important point to consider in the discussion around CRD support is how the rendering of templates is handled. One of the distinct disadvantages of the `crd-install` method used in Helm 2 was the inability to properly validate charts due to changing API availability (a CRD is actually adding another available API to your Kubernetes cluster). If a chart installed a CRD, `helm` no longer had a valid set of API versions to work against. This is also the reason behind removing templating support from CRDs. With the new `crds` method of CRD installation, we now ensure that `helm` has completely valid information about the current state of the cluster. ### Method 2: Separate Charts Another way to do this is to put the CRD definition in one chart, and then put any resources that use that CRD in _another_ chart. In this method, each chart must be installed separately. However, this workflow may be more useful for cluster operators who have admin access to a cluster [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Flow Control Flow Control ============ Control structures (called "actions" in template parlance) provide you, the template author, with the ability to control the flow of a template's generation. Helm's template language provides the following control structures: * `if`/`else` for creating conditional blocks * `with` to specify a scope * `range`, which provides a "for each"-style loop In addition to these, it provides a few actions for declaring and using named template segments: * `define` declares a new named template inside of your template * `template` imports a named template * `block` declares a special kind of fillable template area In this section, we'll talk about `if`, `with`, and `range`. The others are covered in the "Named Templates" section later in this guide. If/Else ------- The first control structure we'll look at is for conditionally including blocks of text in a template. This is the `if`/`else` block. The basic structure for a conditional looks like this: {{ if PIPELINE }} # Do something {{ else if OTHER PIPELINE }} # Do something else {{ else }} # Default case {{ end }} Notice that we're now talking about _pipelines_ instead of values. The reason for this is to make it clear that control structures can execute an entire pipeline, not just evaluate a value. A pipeline is evaluated as _false_ if the value is: * a boolean false * a numeric zero * an empty string * a `nil` (empty or null) * an empty collection (`map`, `slice`, `tuple`, `dict`, `array`) Under all other conditions, the condition is true. Let's add a simple conditional to our ConfigMap. We'll add another setting if the drink is set to coffee: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | default "tea" | quote }} food: {{ .Values.favorite.food | upper | quote }} {{ if eq .Values.favorite.drink "coffee" }}mug: "true"{{ end }} Since we commented out `drink: coffee` in our last example, the output should not include a `mug: "true"` flag. But if we add that line back into our `values.yaml` file, the output should look like this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: eyewitness-elk-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" mug: "true" Controlling Whitespace ---------------------- While we're looking at conditionals, we should take a quick look at the way whitespace is controlled in templates. Let's take the previous example and format it to be a little easier to read: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | default "tea" | quote }} food: {{ .Values.favorite.food | upper | quote }} {{ if eq .Values.favorite.drink "coffee" }} mug: "true" {{ end }} Initially, this looks good. But if we run it through the template engine, we'll get an unfortunate result: $ helm install --dry-run --debug ./mychart SERVER: "localhost:44134" CHART PATH: /Users/mattbutcher/Code/Go/src/helm.sh/helm/_scratch/mychart Error: YAML parse error on mychart/templates/configmap.yaml: error converting YAML to JSON: yaml: line 9: did not find expected key What happened? We generated incorrect YAML because of the whitespacing above. # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: eyewitness-elk-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" mug: "true" `mug` is incorrectly indented. Let's simply out-dent that one line, and re-run: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | default "tea" | quote }} food: {{ .Values.favorite.food | upper | quote }} {{ if eq .Values.favorite.drink "coffee" }} mug: "true" {{ end }} When we sent that, we'll get YAML that is valid, but still looks a little funny: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: telling-chimp-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" mug: "true" Notice that we received a few empty lines in our YAML. Why? When the template engine runs, it _removes_ the contents inside of `{{` and `}}`, but it leaves the remaining whitespace exactly as is. YAML ascribes meaning to whitespace, so managing the whitespace becomes pretty important. Fortunately, Helm templates have a few tools to help. First, the curly brace syntax of template declarations can be modified with special characters to tell the template engine to chomp whitespace. `{{-` (with the dash and space added) indicates that whitespace should be chomped left, while `-}}` means whitespace to the right should be consumed. _Be careful! Newlines are whitespace!_ > Make sure there is a space between the `-` and the rest of your directive. `{{- 3 }}` means "trim left whitespace and print 3" while `{{-3 }}` means "print -3". Using this syntax, we can modify our template to get rid of those new lines: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | default "tea" | quote }} food: {{ .Values.favorite.food | upper | quote }} {{- if eq .Values.favorite.drink "coffee" }} mug: "true" {{- end }} Just for the sake of making this point clear, let's adjust the above, and substitute an `*` for each whitespace that will be deleted following this rule. An `*` at the end of the line indicates a newline character that would be removed apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | default "tea" | quote }} food: {{ .Values.favorite.food | upper | quote }}* **{{- if eq .Values.favorite.drink "coffee" }} mug: "true"* **{{- end }} Keeping that in mind, we can run our template through Helm and see the result: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: clunky-cat-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" mug: "true" Be careful with the chomping modifiers. It is easy to accidentally do things like this: food: {{ .Values.favorite.food | upper | quote }} {{- if eq .Values.favorite.drink "coffee" -}} mug: "true" {{- end -}} That will produce `food: "PIZZA"mug: "true"` because it consumed newlines on both sides. > For the details on whitespace control in templates, see the [Official Go template documentation](https://godoc.org/text/template) Finally, sometimes it's easier to tell the template system how to indent for you instead of trying to master the spacing of template directives. For that reason, you may sometimes find it useful to use the `indent` function (`{{ indent 2 "mug:true" }}`). Modifying scope using `with` ---------------------------- The next control structure to look at is the `with` action. This controls variable scoping. Recall that `.` is a reference to _the current scope_. So `.Values` tells the template to find the `Values` object in the current scope. The syntax for `with` is similar to a simple `if` statement: {{ with PIPELINE }} # restricted scope {{ end }} Scopes can be changed. `with` can allow you to set the current scope (`.`) to a particular object. For example, we've been working with `.Values.favorite`. Let's rewrite our ConfigMap to alter the `.` scope to point to `.Values.favorite`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} {{- end }} Note that we removed the `if` conditional from the previous exercise because it is now unnecessary - the block after `with` only executes if the value of `PIPELINE` is not empty. Notice that now we can reference `.drink` and `.food` without qualifying them. That is because the `with` statement sets `.` to point to `.Values.favorite`. The `.` is reset to its previous scope after `{{ end }}`. But here's a note of caution! Inside of the restricted scope, you will not be able to access the other objects from the parent scope using `.`. This, for example, will fail: {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} release: {{ .Release.Name }} {{- end }} It will produce an error because `Release.Name` is not inside of the restricted scope for `.`. However, if we swap the last two lines, all will work as expected because the scope is reset after `{{ end }}`. {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} {{- end }} release: {{ .Release.Name }} Or, we can use `$` for accessing the object `Release.Name` from the parent scope. `$` is mapped to the root scope when template execution begins and it does not change during template execution. The following would work as well: {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} release: {{ $.Release.Name }} {{- end }} After looking at `range`, we will take a look at template variables, which offer one solution to the scoping issue above. Looping with the `range` action ------------------------------- Many programming languages have support for looping using `for` loops, `foreach` loops, or similar functional mechanisms. In Helm's template language, the way to iterate through a collection is to use the `range` operator. To start, let's add a list of pizza toppings to our `values.yaml` file: favorite: drink: coffee food: pizza pizzaToppings: - mushrooms - cheese - peppers - onions - pineapple Now we have a list (called a `slice` in templates) of `pizzaToppings`. We can modify our template to print this list into our ConfigMap: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} {{- end }} toppings: |- {{- range .Values.pizzaToppings }} - {{ . | title | quote }} {{- end }} We can use `$` for accessing the list `Values.pizzaToppings` from the parent scope. `$` is mapped to the root scope when template execution begins and it does not change during template execution. The following would work as well: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} toppings: |- {{- range $.Values.pizzaToppings }} - {{ . | title | quote }} {{- end }} {{- end }} Let's take a closer look at the `toppings:` list. The `range` function will "range over" (iterate through) the `pizzaToppings` list. But now something interesting happens. Just like `with` sets the scope of `.`, so does a `range` operator. Each time through the loop, `.` is set to the current pizza topping. That is, the first time, `.` is set to `mushrooms`. The second iteration it is set to `cheese`, and so on. We can send the value of `.` directly down a pipeline, so when we do `{{ . | title | quote }}`, it sends `.` to `title` (title case function) and then to `quote`. If we run this template, the output will be: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: edgy-dragonfly-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" toppings: |- - "Mushrooms" - "Cheese" - "Peppers" - "Onions" - "Pineapple" Now, in this example we've done something tricky. The `toppings: |-` line is declaring a multi-line string. So our list of toppings is actually not a YAML list. It's a big string. Why would we do this? Because the data in ConfigMaps `data` is composed of key/value pairs, where both the key and the value are simple strings. To understand why this is the case, take a look at the [Kubernetes ConfigMap docs](https://kubernetes.io/docs/concepts/configuration/configmap/) . For us, though, this detail doesn't matter much. > The `|-` marker in YAML takes a multi-line string. This can be a useful technique for embedding big blocks of data inside of your manifests, as exemplified here. Sometimes it's useful to be able to quickly make a list inside of your template, and then iterate over that list. Helm templates have a function to make this easy: `tuple`. In computer science, a tuple is a list-like collection of fixed size, but with arbitrary data types. This roughly conveys the way a `tuple` is used. sizes: |- {{- range tuple "small" "medium" "large" }} - {{ . }} {{- end }} The above will produce this: sizes: |- - small - medium - large In addition to lists and tuples, `range` can be used to iterate over collections that have a key and a value (like a `map` or `dict`). We'll see how to do that in the next section when we introduce template variables. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Use OCI-based registries Use OCI-based registries ======================== Beginning in Helm 3, you can use container registries with [OCI](https://www.opencontainers.org/) support to store and share chart packages. Beginning in Helm v3.8.0, OCI support is enabled by default. OCI support prior to v3.8.0 --------------------------- OCI support graduated from experimental to general availability with Helm v3.8.0. In prior versions of Helm, OCI support behaved differently. If you were using OCI support prior to Helm v3.8.0, its important to understand what has changed with different versions of Helm. ### Enabling OCI support prior to v3.8.0 Prior to Helm v3.8.0, OCI support is _experimental_ and must be enabled. To enable OCI experimental support for Helm versions prior to v3.8.0, set `HELM_EXPERIMENTAL_OCI` in your environment. For example: export HELM_EXPERIMENTAL_OCI=1 ### OCI feature deprecation and behavior changes with v3.8.0 The release of [Helm v3.8.0](https://github.com/helm/helm/releases/tag/v3.8.0) , the following features and behaviors are different from previous versions of Helm: * When setting a chart in the dependencies as OCI, the version can be set to a range like other dependencies. * SemVer tags that include build information can be pushed and used. OCI registries don't support `+` as a tag character. Helm translates the `+` to `_` when stored as a tag. * The `helm registry login` command now follows the same structure as the Docker CLI for storing credentials. The same location for registry configuration can be passed to both Helm and the Docker CLI. ### OCI feature deprecation and behavior changes with v3.7.0 The release of [Helm v3.7.0](https://github.com/helm/helm/releases/tag/v3.7.0) included the implementation of [HIP 6](https://github.com/helm/community/blob/main/hips/hip-0006.md) for OCI support. As a result, the following features and behaviors are different from previous versions of Helm: * The `helm chart` subcommand has been removed. * The chart cache has been removed (no `helm chart list` etc.). * OCI registry references are now always prefixed with `oci://`. * The basename of the registry reference must _always_ match the chart's name. * The tag of the registry reference must _always_ match the chart's semantic version (i.e. no `latest` tags). * The chart layer media type was switched from `application/tar+gzip` to `application/vnd.cncf.helm.chart.content.v1.tar+gzip`. Using an OCI-based registry --------------------------- ### Helm repositories in OCI-based registries A [Helm repository](https://helm.sh/docs/topics/chart_repository/) is a way to house and distribute packaged Helm charts. An OCI-based registry can contain zero or more Helm repositories and each of those repositories can contain zero or more packaged Helm charts. ### Use hosted registries There are several hosted container registries with OCI support that you can use for your Helm charts. For example: * [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/push-oci-artifact.html) * [Azure Container Registry](https://docs.microsoft.com/azure/container-registry/container-registry-helm-repos#push-chart-to-registry-as-oci-artifact) * [Cloudsmith](https://help.cloudsmith.io/docs/oci-repository) * [Docker Hub](https://docs.docker.com/docker-hub/oci-artifacts/) * [Google Artifact Registry](https://cloud.google.com/artifact-registry/docs/helm/manage-charts) * [Harbor](https://goharbor.io/docs/main/administration/user-defined-oci-artifact/) * [IBM Cloud Container Registry](https://cloud.ibm.com/docs/Registry?topic=Registry-registry_helm_charts) * [JFrog Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/helm-oci-repositories) * [RepoFlow](https://docs.repoflow.io/PackageTypes/helm#oci-helm-support) Follow the hosted container registry provider's documentation to create and configure a registry with OCI support. **Note:** You can run [Docker Registry](https://docs.docker.com/registry/deploying/) or [`zot`](https://github.com/project-zot/zot) , which are OCI-based registries, on your development computer. Running an OCI-based registry on your development computer should only be used for testing purposes. ### Using sigstore to sign OCI-based charts The [`helm-sigstore`](https://github.com/sigstore/helm-sigstore) plugin allows using [Sigstore](https://sigstore.dev/) to sign Helm charts with the same tools used to sign container images. This provides an alternative to the [GPG-based provenance](https://helm.sh/docs/topics/provenance/) supported by classic [chart repositories](https://helm.sh/docs/topics/chart_repository/) . For more details on using the `helm sigstore` plugin, see [that project's documentation](https://github.com/sigstore/helm-sigstore/blob/main/USAGE.md) . Commands for working with registries ------------------------------------ ### The `registry` subcommand #### `login` login to a registry (with manual password entry) $ helm registry login -u myuser localhost:5000 Password: Login succeeded #### `logout` logout from a registry $ helm registry logout localhost:5000 Logout succeeded ### The `push` subcommand Upload a chart to an OCI-based registry: $ helm push mychart-0.1.0.tgz oci://localhost:5000/helm-charts Pushed: localhost:5000/helm-charts/mychart:0.1.0 Digest: sha256:ec5f08ee7be8b557cd1fc5ae1a0ac985e8538da7c93f51a51eff4b277509a723 The `push` subcommand can only be used against `.tgz` files created ahead of time using `helm package`. When using `helm push` to upload a chart an OCI registry, the reference must be prefixed with `oci://` and must not contain the basename or tag. The registry reference basename is inferred from the chart's name, and the tag is inferred from the chart's semantic version. This is currently a strict requirement. Certain registries require the repository and/or namespace (if specified) to be created beforehand. Otherwise, an error will be produced during the `helm push` operation. If you have created a [provenance file](https://helm.sh/docs/topics/provenance/) (`.prov`), and it is present next to the chart `.tgz` file, it will automatically be uploaded to the registry upon `push`. This results in an extra layer on [the Helm chart manifest](https://helm.sh/docs/topics/registries/#helm-chart-manifest) . Users of the [helm-push plugin](https://github.com/chartmuseum/helm-push) (for uploading charts to [ChartMuseum](https://helm.sh/docs/topics/chart_repository/#chartmuseum-repository-server) ) may experience issues, since the plugin conflicts with the new, built-in `push`. As of version v0.10.0, the plugin has been renamed to `cm-push`. ### Other subcommands Support for the `oci://` protocol is also available in various other subcommands. Here is a complete list: * `helm pull` * `helm show` * `helm template` * `helm install` * `helm upgrade` The basename (chart name) of the registry reference _is_ included for any type of action involving chart download (vs. `helm push` where it is omitted). Here are a few examples of using the subcommands listed above against OCI-based charts: $ helm pull oci://localhost:5000/helm-charts/mychart --version 0.1.0 Pulled: localhost:5000/helm-charts/mychart:0.1.0 Digest: sha256:0be7ec9fb7b962b46d81e4bb74fdcdb7089d965d3baca9f85d64948b05b402ff $ helm show all oci://localhost:5000/helm-charts/mychart --version 0.1.0 apiVersion: v2 appVersion: 1.16.0 description: A Helm chart for Kubernetes name: mychart ... $ helm template myrelease oci://localhost:5000/helm-charts/mychart --version 0.1.0 --- # Source: mychart/templates/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount ... $ helm install myrelease oci://localhost:5000/helm-charts/mychart --version 0.1.0 NAME: myrelease LAST DEPLOYED: Wed Oct 27 15:11:40 2021 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ... $ helm upgrade myrelease oci://localhost:5000/helm-charts/mychart --version 0.2.0 Release "myrelease" has been upgraded. Happy Helming! NAME: myrelease LAST DEPLOYED: Wed Oct 27 15:12:05 2021 NAMESPACE: default STATUS: deployed REVISION: 2 NOTES: ... Specifying dependencies ----------------------- Dependencies of a chart can be pulled from a registry using the `dependency update` subcommand. The `repository` for a given entry in `Chart.yaml` is specified as the registry reference without the basename: dependencies: - name: mychart version: "2.7.0" repository: "oci://localhost:5000/myrepo" This will fetch `oci://localhost:5000/myrepo/mychart:2.7.0` when `dependency update` is executed. Helm chart manifest ------------------- Example Helm chart manifest as represented in a registry (note the `mediaType` fields): { "schemaVersion": 2, "config": { "mediaType": "application/vnd.cncf.helm.config.v1+json", "digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111", "size": 117 }, "layers": [\ {\ "mediaType": "application/vnd.cncf.helm.chart.content.v1.tar+gzip",\ "digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",\ "size": 2487\ }\ ] } The following example contains a [provenance file](https://helm.sh/docs/topics/provenance/) (note the extra layer): { "schemaVersion": 2, "config": { "mediaType": "application/vnd.cncf.helm.config.v1+json", "digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111", "size": 117 }, "layers": [\ {\ "mediaType": "application/vnd.cncf.helm.chart.content.v1.tar+gzip",\ "digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",\ "size": 2487\ },\ {\ "mediaType": "application/vnd.cncf.helm.chart.provenance.v1.prov",\ "digest": "sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a",\ "size": 643\ }\ ] } Migrating from chart repos -------------------------- Migrating from classic [chart repositories](https://helm.sh/docs/topics/chart_repository/) (index.yaml-based repos) is as simple using `helm pull`, then using `helm push` to upload the resulting `.tgz` files to a registry. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Role-Based Access Control Role-Based Access Control ========================= This part of the Best Practices Guide discusses the creation and formatting of RBAC resources in chart manifests. RBAC resources are: * ServiceAccount (namespaced) * Role (namespaced) * ClusterRole * RoleBinding (namespaced) * ClusterRoleBinding YAML Configuration ------------------ RBAC and ServiceAccount configuration should happen under separate keys. They are separate things. Splitting these two concepts out in the YAML disambiguates them and makes this clearer. rbac: # Specifies whether RBAC resources should be created create: true serviceAccount: # Specifies whether a ServiceAccount should be created create: true # The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: This structure can be extended for more complex charts that require multiple ServiceAccounts. someComponent: serviceAccount: create: true name: anotherComponent: serviceAccount: create: true name: RBAC Resources Should be Created by Default ------------------------------------------- `rbac.create` should be a boolean value controlling whether RBAC resources are created. The default should be `true`. Users who wish to manage RBAC access controls themselves can set this value to `false` (in which case see below). Using RBAC Resources -------------------- `serviceAccount.name` should be set to the name of the ServiceAccount to be used by access-controlled resources created by the chart. If `serviceAccount.create` is true, then a ServiceAccount with this name should be created. If the name is not set, then a name is generated using the `fullname` template, If `serviceAccount.create` is false, then it should not be created, but it should still be associated with the same resources so that manually-created RBAC resources created later that reference it will function correctly. If `serviceAccount.create` is false and the name is not specified, then the default ServiceAccount is used. The following helper template should be used for the ServiceAccount. {{/* Create the name of the service account to use */}} {{- define "mychart.serviceAccountName" -}} {{- if .Values.serviceAccount.create -}} {{ default (include "mychart.fullname" .) .Values.serviceAccount.name }} {{- else -}} {{ default "default" .Values.serviceAccount.name }} {{- end -}} {{- end -}} [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Creating a NOTES.txt File Creating a NOTES.txt File ========================= In this section we are going to look at Helm's tool for providing instructions to your chart users. At the end of a `helm install` or `helm upgrade`, Helm can print out a block of helpful information for users. This information is highly customizable using templates. To add installation notes to your chart, simply create a `templates/NOTES.txt` file. This file is plain text, but it is processed like a template, and has all the normal template functions and objects available. Let's create a simple `NOTES.txt` file: Thank you for installing {{ .Chart.Name }}. Your release is named {{ .Release.Name }}. To learn more about the release, try: $ helm status {{ .Release.Name }} $ helm get all {{ .Release.Name }} Now if we run `helm install rude-cardinal ./mychart` we will see this message at the bottom: RESOURCES: ==> v1/Secret NAME TYPE DATA AGE rude-cardinal-secret Opaque 1 0s ==> v1/ConfigMap NAME DATA AGE rude-cardinal-configmap 3 0s NOTES: Thank you for installing mychart. Your release is named rude-cardinal. To learn more about the release, try: $ helm status rude-cardinal $ helm get all rude-cardinal Using `NOTES.txt` this way is a great way to give your users detailed information about how to use their newly installed chart. Creating a `NOTES.txt` file is strongly recommended, though it is not required. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Variables Variables ========= With functions, pipelines, objects, and control structures under our belts, we can turn to one of the more basic ideas in many programming languages: variables. In templates, they are less frequently used. But we will see how to use them to simplify code, and to make better use of `with` and `range`. In an earlier example, we saw that this code will fail: {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} release: {{ .Release.Name }} {{- end }} `Release.Name` is not inside of the scope that's restricted in the `with` block. One way to work around scoping issues is to assign objects to variables that can be accessed without respect to the present scope. In Helm templates, a variable is a named reference to another object. It follows the form `$name`. Variables are assigned with a special assignment operator: `:=`. We can rewrite the above to use a variable for `Release.Name`. apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- $relname := .Release.Name -}} {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} release: {{ $relname }} {{- end }} Notice that before we start the `with` block, we assign `$relname := .Release.Name`. Now inside of the `with` block, the `$relname` variable still points to the release name. Running that will produce this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: viable-badger-configmap data: myvalue: "Hello World" drink: "coffee" food: "PIZZA" release: viable-badger Variables are particularly useful in `range` loops. They can be used on list-like objects to capture both the index and the value: toppings: |- {{- range $index, $topping := .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }} Note that `range` comes first, then the variables, then the assignment operator, then the list. This will assign the integer index (starting from zero) to `$index` and the value to `$topping`. Running it will produce: toppings: |- 0: mushrooms 1: cheese 2: peppers 3: onions For data structures that have both a key and a value, we can use `range` to get both. For example, we can loop through `.Values.favorite` like this: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} Now on the first iteration, `$key` will be `drink` and `$val` will be `coffee`, and on the second, `$key` will be `food` and `$val` will be `pizza`. Running the above will generate this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: eager-rabbit-configmap data: myvalue: "Hello World" drink: "coffee" food: "pizza" Variables are normally not "global". They are scoped to the block in which they are declared. Earlier, we assigned `$relname` in the top level of the template. That variable will be in scope for the entire template. But in our last example, `$key` and `$val` will only be in scope inside of the `{{ range... }}{{ end }}` block. However, there is one variable that will always point to the root context: - `$` -. This can be very useful when you are looping in a range and you need to know the chart's release name. An example illustrating this: {{- range .Values.tlsSecrets }} --- apiVersion: v1 kind: Secret metadata: name: {{ .name }} labels: # Many helm templates would use `.` below, but that will not work, # however `$` will work here app.kubernetes.io/name: {{ template "fullname" $ }} # I cannot reference .Chart.Name, but I can do $.Chart.Name helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" app.kubernetes.io/instance: "{{ $.Release.Name }}" # Value from appVersion in Chart.yaml app.kubernetes.io/version: "{{ $.Chart.AppVersion }}" app.kubernetes.io/managed-by: "{{ $.Release.Service }}" type: kubernetes.io/tls data: tls.crt: {{ .certificate }} tls.key: {{ .key }} {{- end }} So far we have looked at just one template declared in just one file. But one of the powerful features of the Helm template language is its ability to declare multiple templates and use them together. We'll turn to that in the next section. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Named Templates Named Templates =============== It is time to move beyond one template, and begin to create others. In this section, we will see how to define _named templates_ in one file, and then use them elsewhere. A _named template_ (sometimes called a _partial_ or a _subtemplate_) is simply a template defined inside of a file, and given a name. We'll see two ways to create them, and a few different ways to use them. In the [Flow Control](https://helm.sh/docs/chart_template_guide/control_structures/) section we introduced three actions for declaring and managing templates: `define`, `template`, and `block`. In this section, we'll cover those three actions, and also introduce a special-purpose `include` function that works similarly to the `template` action. An important detail to keep in mind when naming templates: **template names are global**. If you declare two templates with the same name, whichever one is loaded last will be the one used. Because templates in subcharts are compiled together with top-level templates, you should be careful to name your templates with _chart-specific names_. One popular naming convention is to prefix each defined template with the name of the chart: `{{ define "mychart.labels" }}`. By using the specific chart name as a prefix we can avoid any conflicts that may arise due to two different charts that implement templates of the same name. This behavior also applies to different versions of a chart. If you have `mychart` version `1.0.0` that defines a template one way, and a `mychart` version `2.0.0` that modifies the existing named template, it will use the one that was loaded last. You can work around this issue by also adding a version in the name of the chart: `{{ define "mychart.v1.labels" }}` and `{{ define "mychart.v2.labels" }}`. Partials and `_` files ---------------------- So far, we've used one file, and that one file has contained a single template. But Helm's template language allows you to create named embedded templates, that can be accessed by name elsewhere. Before we get to the nuts-and-bolts of writing those templates, there is file naming convention that deserves mention: * Most files in `templates/` are treated as if they contain Kubernetes manifests * The `NOTES.txt` is one exception * But files whose name begins with an underscore (`_`) are assumed to _not_ have a manifest inside. These files are not rendered to Kubernetes object definitions, but are available everywhere within other chart templates for use. These files are used to store partials and helpers. In fact, when we first created `mychart`, we saw a file called `_helpers.tpl`. That file is the default location for template partials. Declaring and using templates with `define` and `template` ---------------------------------------------------------- The `define` action allows us to create a named template inside of a template file. Its syntax goes like this: {{- define "MY.NAME" }} # body of template here {{- end }} For example, we can define a template to encapsulate a Kubernetes block of labels: {{- define "mychart.labels" }} labels: generator: helm date: {{ now | htmlDate }} {{- end }} Now we can embed this template inside of our existing ConfigMap, and then include it with the `template` action: {{- define "mychart.labels" }} labels: generator: helm date: {{ now | htmlDate }} {{- end }} apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap {{- template "mychart.labels" }} data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} When the template engine reads this file, it will store away the reference to `mychart.labels` until `template "mychart.labels"` is called. Then it will render that template inline. So the result will look like this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: running-panda-configmap labels: generator: helm date: 2016-11-02 data: myvalue: "Hello World" drink: "coffee" food: "pizza" Note: a `define` does not produce output unless it is called with a template, as in this example. Conventionally, Helm charts put these templates inside of a partials file, usually `_helpers.tpl`. Let's move this function there: {{/* Generate basic labels */}} {{- define "mychart.labels" }} labels: generator: helm date: {{ now | htmlDate }} {{- end }} By convention, `define` functions should have a simple documentation block (`{{/* ... */}}`) describing what they do. Even though this definition is in `_helpers.tpl`, it can still be accessed in `configmap.yaml`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap {{- template "mychart.labels" }} data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} As mentioned above, **template names are global**. As a result of this, if two templates are declared with the same name the last occurrence will be the one that is used. Since templates in subcharts are compiled together with top-level templates, it is best to name your templates with _chart specific names_. A popular naming convention is to prefix each defined template with the name of the chart: `{{ define "mychart.labels" }}`. Setting the scope of a template ------------------------------- In the template we defined above, we did not use any objects. We just used functions. Let's modify our defined template to include the chart name and chart version: {{/* Generate basic labels */}} {{- define "mychart.labels" }} labels: generator: helm date: {{ now | htmlDate }} chart: {{ .Chart.Name }} version: {{ .Chart.Version }} {{- end }} If we render this, we will get an error like this: $ helm install --dry-run moldy-jaguar ./mychart Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [unknown object type "nil" in ConfigMap.metadata.labels.chart, unknown object type "nil" in ConfigMap.metadata.labels.version] To see what rendered, re-run with `--disable-openapi-validation`: `helm install --dry-run --disable-openapi-validation moldy-jaguar ./mychart`. The result will not be what we expect: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: moldy-jaguar-configmap labels: generator: helm date: 2021-03-06 chart: version: What happened to the name and version? They weren't in the scope for our defined template. When a named template (created with `define`) is rendered, it will receive the scope passed in by the `template` call. In our example, we included the template like this: {{- template "mychart.labels" }} No scope was passed in, so within the template we cannot access anything in `.`. This is easy enough to fix, though. We simply pass a scope to the template: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap {{- template "mychart.labels" . }} Note that we pass `.` at the end of the `template` call. We could just as easily pass `.Values` or `.Values.favorite` or whatever scope we want. But what we want is the top-level scope. In the context of the named template, `$` will refer to the scope you passed in and not some global scope. Now when we execute this template with `helm install --dry-run --debug plinking-anaco ./mychart`, we get this: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: plinking-anaco-configmap labels: generator: helm date: 2021-03-06 chart: mychart version: 0.1.0 Now `{{ .Chart.Name }}` resolves to `mychart`, and `{{ .Chart.Version }}` resolves to `0.1.0`. The `include` function ---------------------- Say we've defined a simple template that looks like this: {{- define "mychart.app" -}} app_name: {{ .Chart.Name }} app_version: "{{ .Chart.Version }}" {{- end -}} Now say I want to insert this both into the `labels:` section of my template, and also the `data:` section: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap labels: {{ template "mychart.app" . }} data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} {{ template "mychart.app" . }} If we render this, we will get an error like this: $ helm install --dry-run measly-whippet ./mychart Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [ValidationError(ConfigMap): unknown field "app_name" in io.k8s.api.core.v1.ConfigMap, ValidationError(ConfigMap): unknown field "app_version" in io.k8s.api.core.v1.ConfigMap] To see what rendered, re-run with `--disable-openapi-validation`: `helm install --dry-run --disable-openapi-validation measly-whippet ./mychart`. The output will not be what we expect: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: measly-whippet-configmap labels: app_name: mychart app_version: "0.1.0" data: myvalue: "Hello World" drink: "coffee" food: "pizza" app_name: mychart app_version: "0.1.0" Note that the indentation on `app_version` is wrong in both places. Why? Because the template that is substituted in has the text aligned to the left. Because `template` is an action, and not a function, there is no way to pass the output of a `template` call to other functions; the data is simply inserted inline. To work around this case, Helm provides an alternative to `template` that will import the contents of a template into the present pipeline where it can be passed along to other functions in the pipeline. Here's the example above, corrected to use `indent` to indent the `mychart.app` template correctly: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap labels: {{ include "mychart.app" . | indent 4 }} data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} {{ include "mychart.app" . | indent 2 }} Now the produced YAML is correctly indented for each section: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: edgy-mole-configmap labels: app_name: mychart app_version: "0.1.0" data: myvalue: "Hello World" drink: "coffee" food: "pizza" app_name: mychart app_version: "0.1.0" > It is considered preferable to use `include` over `template` in Helm templates simply so that the output formatting can be handled better for YAML documents. Sometimes we want to import content, but not as templates. That is, we want to import files verbatim. We can achieve this by accessing files through the `.Files` object described in the next section. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Kubernetes Distribution Guide Kubernetes Distribution Guide ============================= Helm should work with any [conformant version of Kubernetes](https://github.com/cncf/k8s-conformance) (whether [certified](https://www.cncf.io/certification/software-conformance/) or not). This document captures information about using Helm in specific Kubernetes environments. Please contribute more details about any distros (sorted alphabetically) if desired. AKS --- Helm works with [Azure Kubernetes Service](https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm) . DC/OS ----- Helm has been tested and is working on Mesospheres DC/OS 1.11 Kubernetes platform, and requires no additional configuration. EKS --- Helm works with Amazon Elastic Kubernetes Service (Amazon EKS): [Using Helm with Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) . GKE --- Google's GKE hosted Kubernetes platform is known to work with Helm, and requires no additional configuration. `scripts/local-cluster` and Hyperkube ------------------------------------- Hyperkube configured via `scripts/local-cluster.sh` is known to work. For raw Hyperkube you may need to do some manual configuration. IKS --- Helm works with [IBM Cloud Kubernetes Service](https://cloud.ibm.com/docs/containers?topic=containers-helm) . KIND (Kubernetes IN Docker) --------------------------- Helm is regularly tested on [KIND](https://github.com/kubernetes-sigs/kind) . KubeOne ------- Helm works in clusters that are set up by KubeOne without caveats. Kubermatic ---------- Helm works in user clusters that are created by Kubermatic without caveats. Since seed cluster can be set up in different ways Helm support depends on their configuration. MicroK8s -------- Helm can be enabled in [MicroK8s](https://microk8s.io/) using the command: `microk8s.enable helm3` Minikube -------- Helm is tested and known to work with [Minikube](https://github.com/kubernetes/minikube) . It requires no additional configuration. Openshift --------- Helm works straightforward on OpenShift Online, OpenShift Dedicated, OpenShift Container Platform (version >= 3.6) or OpenShift Origin (version >= 3.6). To learn more read [this blog](https://blog.openshift.com/getting-started-helm-openshift/) post. Platform9 --------- Helm is pre-installed with [Platform9 Managed Kubernetes](https://platform9.com/managed-kubernetes/?utm_source=helm_distro_notes) . Platform9 provides access to all official Helm charts through the App Catalog UI and native Kubernetes CLI. Additional repositories can be manually added. Further details are available in this [Platform9 App Catalog article](https://platform9.com/support/deploying-kubernetes-apps-platform9-managed-kubernetes/?utm_source=helm_distro_notes) . Ubuntu with `kubeadm` --------------------- Kubernetes bootstrapped with `kubeadm` is known to work on the following Linux distributions: * Ubuntu 16.04 * Fedora release 25 Some versions of Helm (v2.0.0-beta2) require you to `export KUBECONFIG=/etc/kubernetes/admin.conf` or create a `~/.kube/config`. VMware Tanzu Kubernetes Grid ---------------------------- Helm runs on VMware Tanzu Kubernetes Grid, TKG, without needing configuration changes. The Tanzu CLI can manage installing packages for [helm-controller](https://fluxcd.io/flux/components/helm/) allowing for declaratively managing Helm chart releases. Further details available in the TKG documentation for [CLI-Managed Packages](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-packages-user-managed-index.html#package-locations-and-dependencies-5) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | The .helmignore file The .helmignore file ==================== The `.helmignore` file is used to specify files you don't want to include in your helm chart. If this file exists, the `helm package` command will ignore all the files that match the pattern specified in the `.helmignore` file while packaging your application. This can help in avoiding unnecessary or sensitive files or directories from being added in your helm chart. The `.helmignore` file supports Unix shell glob matching, relative path matching, and negation (prefixed with !). Only one pattern per line is considered. Here is an example `.helmignore` file: # comment # Match any file or path named .helmignore .helmignore # Match any file or path named .git .git # Match any text file *.txt # Match only directories named mydir mydir/ # Match only text files in the top-level directory /*.txt # Match only the file foo.txt in the top-level directory /foo.txt # Match any file named ab.txt, ac.txt, or ad.txt a[b-d].txt # Match any file under subdir matching temp* */temp* */*/temp* temp? Some notable differences from .gitignore: * The '\*\*' syntax is not supported. * The globbing library is Go's 'filepath.Match', not fnmatch(3) * Trailing spaces are always ignored (there is no supported escape sequence) * There is no support for '!' as a special leading sequence. * It does not exclude itself by default, you have to add an explicit entry for `.helmignore` **We'd love your help** making this document better. To add, correct, or remove information, [file an issue](https://github.com/helm/helm-www/issues) or send us a pull request. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Accessing Files Inside Templates Accessing Files Inside Templates ================================ In the previous section we looked at several ways to create and access named templates. This makes it easy to import one template from within another template. But sometimes it is desirable to import a _file that is not a template_ and inject its contents without sending the contents through the template renderer. Helm provides access to files through the `.Files` object. Before we get going with the template examples, though, there are a few things to note about how this works: * It is okay to add extra files to your Helm chart. These files will be bundled. Be careful, though. Charts must be smaller than 1M because of the storage limitations of Kubernetes objects. * Some files cannot be accessed through the `.Files` object, usually for security reasons. * Files in `templates/` cannot be accessed. * Files excluded using `.helmignore` cannot be accessed. * Files outside of a Helm application [subchart](https://helm.sh/docs/chart_template_guide/subcharts_and_globals/) , including those of the parent, cannot be accessed * Charts do not preserve UNIX mode information, so file-level permissions will have no impact on the availability of a file when it comes to the `.Files` object. * [Basic example](https://helm.sh/docs/chart_template_guide/accessing_files/#basic-example) * [Path helpers](https://helm.sh/docs/chart_template_guide/accessing_files/#path-helpers) * [Glob patterns](https://helm.sh/docs/chart_template_guide/accessing_files/#glob-patterns) * [ConfigMap and Secrets utility functions](https://helm.sh/docs/chart_template_guide/accessing_files/#configmap-and-secrets-utility-functions) * [Encoding](https://helm.sh/docs/chart_template_guide/accessing_files/#encoding) * [Lines](https://helm.sh/docs/chart_template_guide/accessing_files/#lines) Basic example ------------- With those caveats behind, let's write a template that reads three files into our ConfigMap. To get started, we will add three files to the chart, putting all three directly inside of the `mychart/` directory. `config1.toml`: message = Hello from config 1 `config2.toml`: message = This is config 2 `config3.toml`: message = Goodbye from config 3 Each of these is a simple TOML file (think old-school Windows INI files). We know the names of these files, so we can use a `range` function to loop through them and inject their contents into our ConfigMap. apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: {{- $files := .Files }} {{- range tuple "config1.toml" "config2.toml" "config3.toml" }} {{ . }}: |- {{ $files.Get . }} {{- end }} This ConfigMap uses several of the techniques discussed in previous sections. For example, we create a `$files` variable to hold a reference to the `.Files` object. We also use the `tuple` function to create a list of files that we loop through. Then we print each file name (`{{ . }}: |-`) followed by the contents of the file `{{ $files.Get . }}`. Running this template will produce a single ConfigMap with the contents of all three files: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: quieting-giraf-configmap data: config1.toml: |- message = Hello from config 1 config2.toml: |- message = This is config 2 config3.toml: |- message = Goodbye from config 3 Path helpers ------------ When working with files, it can be very useful to perform some standard operations on the file paths themselves. To help with this, Helm imports many of the functions from Go's [path](https://golang.org/pkg/path/) package for your use. They are all accessible with the same names as in the Go package, but with a lowercase first letter. For example, `Base` becomes `base`, etc. The imported functions are: * Base * Dir * Ext * IsAbs * Clean Glob patterns ------------- As your chart grows, you may find you have a greater need to organize your files more, and so we provide a `Files.Glob(pattern string)` method to assist in extracting certain files with all the flexibility of [glob patterns](https://godoc.org/github.com/gobwas/glob) . `.Glob` returns a `Files` type, so you may call any of the `Files` methods on the returned object. For example, imagine the directory structure: foo/: foo.txt foo.yaml bar/: bar.go bar.conf baz.yaml You have multiple options with Globs: {{ $currentScope := .}} {{ range $path, $_ := .Files.Glob "**.yaml" }} {{- with $currentScope}} {{ .Files.Get $path }} {{- end }} {{ end }} Or {{ range $path, $_ := .Files.Glob "**.yaml" }} {{ $.Files.Get $path }} {{ end }} ConfigMap and Secrets utility functions --------------------------------------- (Available Helm 2.0.2 and after) It is very common to want to place file content into both ConfigMaps and Secrets, for mounting into your pods at run time. To help with this, we provide a couple utility methods on the `Files` type. For further organization, it is especially useful to use these methods in conjunction with the `Glob` method. Given the directory structure from the [Glob](https://helm.sh/docs/chart_template_guide/accessing_files/#glob-patterns) example above: --- apiVersion: v1 kind: ConfigMap metadata: name: conf data: {{ (.Files.Glob "foo/*").AsConfig | indent 2 }} --- apiVersion: v1 kind: Secret metadata: name: very-secret type: Opaque data: {{ (.Files.Glob "bar/*").AsSecrets | indent 2 }} Encoding -------- You can import a file and have the template base-64 encode it to ensure successful transmission: apiVersion: v1 kind: Secret metadata: name: {{ .Release.Name }}-secret type: Opaque data: token: |- {{ .Files.Get "config1.toml" | b64enc }} The above will take the same `config1.toml` file we used before and encode it: # Source: mychart/templates/secret.yaml apiVersion: v1 kind: Secret metadata: name: lucky-turkey-secret type: Opaque data: token: |- bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK Lines ----- Sometimes it is desirable to access each line of a file in your template. We provide a convenient `Lines` method for this. You can loop through `Lines` using a `range` function: data: some-file.txt: {{ range .Files.Lines "foo/bar.txt" }} {{ . }}{{ end }} There is no way to pass files external to the chart during `helm install`. So if you are asking users to supply data, it must be loaded using `helm install -f` or `helm install --set`. This discussion wraps up our dive into the tools and techniques for writing Helm templates. In the next section we will see how you can use one special file, `templates/NOTES.txt`, to send post-installation instructions to the users of your chart. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Subcharts and Global Values Subcharts and Global Values =========================== To this point we have been working only with one chart. But charts can have dependencies, called _subcharts_, that also have their own values and templates. In this section we will create a subchart and see the different ways we can access values from within templates. Before we dive into the code, there are a few important details to learn about application subcharts. 1. A subchart is considered "stand-alone", which means a subchart can never explicitly depend on its parent chart. 2. For that reason, a subchart cannot access the values of its parent. 3. A parent chart can override values for subcharts. 4. Helm has a concept of _global values_ that can be accessed by all charts. > These limitations do not all necessarily apply to [library charts](https://helm.sh/docs/topics/library_charts/) > , which are designed to provide standardized helper functionality. As we walk through the examples in this section, many of these concepts will become clearer. Creating a Subchart ------------------- For these exercises, we'll start with the `mychart/` chart we created at the beginning of this guide, and we'll add a new chart inside of it. $ cd mychart/charts $ helm create mysubchart Creating mysubchart $ rm -rf mysubchart/templates/* Notice that just as before, we deleted all of the base templates so that we can start from scratch. In this guide, we are focused on how templates work, not on managing dependencies. But the [Charts Guide](https://helm.sh/docs/topics/charts/) has more information on how subcharts work. Adding Values and a Template to the Subchart -------------------------------------------- Next, let's create a simple template and values file for our `mysubchart` chart. There should already be a `values.yaml` in `mychart/charts/mysubchart`. We'll set it up like this: dessert: cake Next, we'll create a new ConfigMap template in `mychart/charts/mysubchart/templates/configmap.yaml`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-cfgmap2 data: dessert: {{ .Values.dessert }} Because every subchart is a _stand-alone chart_, we can test `mysubchart` on its own: $ helm install --generate-name --dry-run --debug mychart/charts/mysubchart SERVER: "localhost:44134" CHART PATH: /Users/mattbutcher/Code/Go/src/helm.sh/helm/_scratch/mychart/charts/mysubchart NAME: newbie-elk TARGET NAMESPACE: default CHART: mysubchart 0.1.0 MANIFEST: --- # Source: mysubchart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: newbie-elk-cfgmap2 data: dessert: cake Overriding Values from a Parent Chart ------------------------------------- Our original chart, `mychart` is now the _parent_ chart of `mysubchart`. This relationship is based entirely on the fact that `mysubchart` is within `mychart/charts`. Because `mychart` is a parent, we can specify configuration in `mychart` and have that configuration pushed into `mysubchart`. For example, we can modify `mychart/values.yaml` like this: favorite: drink: coffee food: pizza pizzaToppings: - mushrooms - cheese - peppers - onions mysubchart: dessert: ice cream Note the last two lines. Any directives inside of the `mysubchart` section will be sent to the `mysubchart` chart. So if we run `helm install --generate-name --dry-run --debug mychart`, one of the things we will see is the `mysubchart` ConfigMap: # Source: mychart/charts/mysubchart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: unhinged-bee-cfgmap2 data: dessert: ice cream The value at the top level has now overridden the value of the subchart. There's an important detail to notice here. We didn't change the template of `mychart/charts/mysubchart/templates/configmap.yaml` to point to `.Values.mysubchart.dessert`. From that template's perspective, the value is still located at `.Values.dessert`. As the template engine passes values along, it sets the scope. So for the `mysubchart` templates, only values specifically for `mysubchart` will be available in `.Values`. Sometimes, though, you do want certain values to be available to all of the templates. This is accomplished using global chart values. Global Chart Values ------------------- Global values are values that can be accessed from any chart or subchart by exactly the same name. Globals require explicit declaration. You can't use an existing non-global as if it were a global. The Values data type has a reserved section called `Values.global` where global values can be set. Let's set one in our `mychart/values.yaml` file. favorite: drink: coffee food: pizza pizzaToppings: - mushrooms - cheese - peppers - onions mysubchart: dessert: ice cream global: salad: caesar Because of the way globals work, both `mychart/templates/configmap.yaml` and `mysubchart/templates/configmap.yaml` should be able to access that value as `{{ .Values.global.salad }}`. `mychart/templates/configmap.yaml`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: salad: {{ .Values.global.salad }} `mysubchart/templates/configmap.yaml`: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-cfgmap2 data: dessert: {{ .Values.dessert }} salad: {{ .Values.global.salad }} Now if we run a dry run install, we'll see the same value in both outputs: # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: silly-snake-configmap data: salad: caesar --- # Source: mychart/charts/mysubchart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: silly-snake-cfgmap2 data: dessert: ice cream salad: caesar Globals are useful for passing information like this, though it does take some planning to make sure the right templates are configured to use globals. Sharing Templates with Subcharts -------------------------------- Parent charts and subcharts can share templates. Any defined block in any chart is available to other charts. For example, we can define a simple template like this: {{- define "labels" }}from: mychart{{ end }} Recall how the labels on templates are _globally shared_. Thus, the `labels` chart can be included from any other chart. While chart developers have a choice between `include` and `template`, one advantage of using `include` is that `include` can dynamically reference templates: {{ include $mytemplate }} The above will dereference `$mytemplate`. The `template` function, in contrast, will only accept a string literal. Avoid Using Blocks ------------------ The Go template language provides a `block` keyword that allows developers to provide a default implementation which is overridden later. In Helm charts, blocks are not the best tool for overriding because if multiple implementations of the same block are provided, the one selected is unpredictable. The suggestion is to instead use `include`. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Architecture Helm Architecture ================= Helm Architecture ================= This document describes the Helm architecture at a high level. The Purpose of Helm ------------------- Helm is a tool for managing Kubernetes packages called _charts_. Helm can do the following: * Create new charts from scratch * Package charts into chart archive (tgz) files * Interact with chart repositories where charts are stored * Install and uninstall charts into an existing Kubernetes cluster * Manage the release cycle of charts that have been installed with Helm For Helm, there are three important concepts: 1. The _chart_ is a bundle of information necessary to create an instance of a Kubernetes application. 2. The _config_ contains configuration information that can be merged into a packaged chart to create a releasable object. 3. A _release_ is a running instance of a _chart_, combined with a specific _config_. Components ---------- Helm is an executable which is implemented into two distinct parts: **The Helm Client** is a command-line client for end users. The client is responsible for the following: * Local chart development * Managing repositories * Managing releases * Interfacing with the Helm library * Sending charts to be installed * Requesting upgrading or uninstalling of existing releases **The Helm Library** provides the logic for executing all Helm operations. It interfaces with the Kubernetes API server and provides the following capability: * Combining a chart and configuration to build a release * Installing charts into Kubernetes, and providing the subsequent release object * Upgrading and uninstalling charts by interacting with Kubernetes The standalone Helm library encapsulates the Helm logic so that it can be leveraged by different clients. Implementation -------------- The Helm client and library is written in the Go programming language. The library uses the Kubernetes client library to communicate with Kubernetes. Currently, that library uses REST+JSON. It stores information in Secrets located inside of Kubernetes. It does not need its own database. Configuration files are, when possible, written in YAML. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Community Guides ================ Learn here about the development process for the Helm project itself and how you can contribute. ### Quicklinks [#### Developer Guide\ \ Instructions for setting up your environment for developing Helm.](https://helm.sh/docs/community/developers/) [#### Release Checklist\ \ Checklist for maintainers when releasing the next version of Helm.](https://helm.sh/docs/community/release_checklist/) [#### Related Projects and Documentation\ \ third-party tools, plugins and documentation provided by the community!](https://helm.sh/docs/community/related/) [#### The History of the Project\ \ Provides a high-level overview of the project's history.](https://helm.sh/docs/community/history/) [#### Localizing Helm Documentation\ \ Instructions for localizing the Helm documentation.](https://helm.sh/docs/community/localization/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Frequently Asked Questions ========================== > This section provides help with the most common questions. **We'd love your help** making this document better. To add, correct, or remove information, [file an issue](https://github.com/helm/helm-www/issues) or send us a pull request. ### Quicklinks [#### Changes Since Helm 2](https://helm.sh/docs/faq/changes_since_helm2/) [#### Installing](https://helm.sh/docs/faq/installing/) [#### Uninstalling](https://helm.sh/docs/faq/uninstalling/) [#### Troubleshooting](https://helm.sh/docs/faq/troubleshooting/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Debugging Templates Debugging Templates =================== Debugging templates can be tricky because the rendered templates are sent to the Kubernetes API server, which may reject the YAML files for reasons other than formatting. There are a few commands that can help you debug. * `helm lint` is your go-to tool for verifying that your chart follows best practices * `helm template --debug` will test rendering chart templates locally. * `helm install --dry-run --debug` will also render your chart locally without installing it, but will also check if conflicting resources are already running on the cluster. Setting `--dry-run=server` will additionally execute any `lookup` in your chart towards the server. * `helm get manifest`: This is a good way to see what templates are installed on the server. When your YAML is failing to parse, but you want to see what is generated, one easy way to retrieve the YAML is to comment out the problem section in the template, and then re-run `helm install --dry-run --debug`: apiVersion: v2 # some: problem section # {{ .Values.foo | quote }} The above will be rendered and returned with the comments intact: apiVersion: v2 # some: problem section # "bar" This provides a quick way of viewing the generated content without YAML parse errors blocking. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Advanced Helm Techniques Advanced Helm Techniques ======================== This section explains various advanced features and techniques for using Helm. The information in this section is intended for "power users" of Helm that wish to do advanced customization and manipulation of their charts and releases. Each of these advanced features comes with their own tradeoffs and caveats, so each one must be used carefully and with deep knowledge of Helm. Or in other words, remember the [Peter Parker principle](https://en.wikipedia.org/wiki/With_great_power_comes_great_responsibility) Post Rendering -------------- Post rendering gives chart installers the ability to manually manipulate, configure, and/or validate rendered manifests before they are installed by Helm. This allows users with advanced configuration needs to be able to use tools like [`kustomize`](https://kustomize.io/) to apply configuration changes without the need to fork a public chart or requiring chart maintainers to specify every last configuration option for a piece of software. There are also use cases for injecting common tools and side cars in enterprise environments or analysis of the manifests before deployment. ### Prerequisites * Helm 3.1+ ### Usage A post-renderer can be any executable that accepts rendered Kubernetes manifests on STDIN and returns valid Kubernetes manifests on STDOUT. It should return an non-0 exit code in the event of a failure. This is the only "API" between the two components. It allows for great flexibility in what you can do with your post-render process. A post renderer can be used with `install`, `upgrade`, and `template`. To use a post-renderer, use the `--post-renderer` flag with a path to the renderer executable you wish to use: $ helm install mychart stable/wordpress --post-renderer ./path/to/executable If the path does not contain any separators, it will search in $PATH, otherwise it will resolve any relative paths to a fully qualified path If you wish to use multiple post-renderers, call all of them in a script or together in whatever binary tool you have built. In bash, this would be as simple as `renderer1 | renderer2 | renderer3`. You can see an example of using `kustomize` as a post renderer [here](https://github.com/thomastaylor312/advanced-helm-demos/tree/master/post-render) . ### Caveats When using post renderers, there are several important things to keep in mind. The most important of these is that when using a post-renderer, all people modifying that release **MUST** use the same renderer in order to have repeatable builds. This feature is purposefully built to allow any user to switch out which renderer they are using or to stop using a renderer, but this should be done deliberately to avoid accidental modification or data loss. One other important note is around security. If you are using a post-renderer, you should ensure it is coming from a reliable source (as is the case for any other arbitrary executable). Using non-trusted or non-verified renderers is NOT recommended as they have full access to rendered templates, which often contain secret data. ### Custom Post Renderers The post render step offers even more flexibility when used in the Go SDK. Any post renderer only needs to implement the following Go interface: type PostRenderer interface { // Run expects a single buffer filled with Helm rendered manifests. It // expects the modified results to be returned on a separate buffer or an // error if there was an issue or failure while running the post render step Run(renderedManifests *bytes.Buffer) (modifiedManifests *bytes.Buffer, err error) } For more information on using the Go SDK, See the [Go SDK section](https://helm.sh/docs/topics/advanced/#go-sdk) Go SDK ------ Helm 3 debuted a completely restructured Go SDK for a better experience when building software and tools that leverage Helm. Full documentation can be found in the [Go SDK Section](https://helm.sh/docs/sdk/gosdk/) . Storage backends ---------------- Helm 3 changed the default release information storage to Secrets in the namespace of the release. Helm 2 by default stores release information as ConfigMaps in the namespace of the Tiller instance. The subsections which follow show how to configure different backends. This configuration is based on the `HELM_DRIVER` environment variable. It can be set to one of the values: `[configmap, secret, sql]`. ### ConfigMap storage backend To enable the ConfigMap backend, you'll need to set the environmental variable `HELM_DRIVER` to `configmap`. You can set it in a shell as follows: export HELM_DRIVER=configmap If you want to switch from the default backend to the ConfigMap backend, you'll have to do the migration for this on your own. You can retrieve release information with the following command: kubectl get secret --all-namespaces -l "owner=helm" **PRODUCTION NOTES**: The release information includes the contents of charts and values files, and therefore might contain sensitive data (like passwords, private keys, and other credentials) that needs to be protected from unauthorized access. When managing Kubernetes authorization, for instance with [RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) , it is possible to grant broader access to ConfigMap resources, while restricting access to Secret resources. For instance, the default [user-facing role](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) "view" grants access to most resources, but not to Secrets. Furthermore, secrets data can be configured for [encrypted storage](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) . Please keep that in mind if you decide to switch to the ConfigMap backend, as it could expose your application's sensitive data. ### SQL storage backend There is a _**beta**_ SQL storage backend that stores release information in an SQL database. Using such a storage backend is particularly useful if your release information weighs more than 1MB (in which case, it can't be stored in ConfigMaps/Secrets because of internal limits in Kubernetes' underlying etcd key-value store). To enable the SQL backend, you'll need to deploy a SQL database and set the environmental variable `HELM_DRIVER` to `sql`. The DB details are set with the environmental variable `HELM_DRIVER_SQL_CONNECTION_STRING`. You can set it in a shell as follows: export HELM_DRIVER=sql export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://helm-postgres:5432/helm?user=helm&password=changeme > Note: Only PostgreSQL is supported at this moment. **PRODUCTION NOTES**: It is recommended to: * Make your database production ready. For PostgreSQL, refer to the [Server Administration](https://www.postgresql.org/docs/12/admin.html) docs for more details * Enable [permission management](https://helm.sh/docs/permissions_sql_storage_backend/) to mirror Kubernetes RBAC for release information If you want to switch from the default backend to the SQL backend, you'll have to do the migration for this on your own. You can retrieve release information with the following command: kubectl get secret --all-namespaces -l "owner=helm" [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Migrating Helm v2 to v3 Migrating Helm v2 to v3 ======================= This guide shows how to migrate Helm v2 to v3. Helm v2 needs to be installed and managing releases in one or more clusters. Overview of Helm 3 Changes -------------------------- The full list of changes from Helm 2 to 3 are documented in the [FAQ section](https://v3.helm.sh/docs/faq/#changes-since-helm-2) . The following is a summary of some of those changes that a user should be aware of before and during migration: 1. Removal of Tiller: * Replaces client/server with client/library architecture (`helm` binary only) * Security is now on per user basis (delegated to Kubernetes user cluster security) * Releases are now stored as in-cluster secrets and the release object metadata has changed * Releases are persisted on a release namespace basis and not in the Tiller namespace anymore 2. Chart repository updated: * `helm search` now supports both local repository searches and making search queries against Artifact Hub 3. Chart apiVersion bumped to "v2" for following specification changes: * Dynamically linked chart dependencies moved to `Chart.yaml` (`requirements.yaml` removed and requirements --> dependencies) * Library charts (helper/common charts) can now be added as dynamically linked chart dependencies * Charts have a `type` metadata field to define the chart to be of an `application` or `library` chart. It is application by default which means it is renderable and installable * Helm 2 charts (apiVersion=v1) are still installable 4. XDG directory specification added: * Helm home removed and replaced with XDG directory specification for storing configuration files * No longer need to initialize Helm * `helm init` and `helm home` removed 5. Additional changes: * Helm install/set-up is simplified: * Helm client (helm binary) only (no Tiller) * Run-as-is paradigm * `local` or `stable` repositories are not set-up by default * `crd-install` hook removed and replaced with `crds` directory in chart where all CRDs defined in it will be installed before any rendering of the chart * `test-failure` hook annotation value removed, and `test-success` deprecated. Use `test` instead * Commands removed/replaced/added: * delete --> uninstall : removes all release history by default (previously needed `--purge`) * fetch --> pull * home (removed) * init (removed) * install: requires release name or `--generate-name` argument * inspect --> show * reset (removed) * serve (removed) * template: `-x`/`--execute` argument renamed to `-s`/`--show-only` * upgrade: Added argument `--history-max` which limits the maximum number of revisions saved per release (0 for no limit) * Helm 3 Go library has undergone a lot of changes and is incompatible with the Helm 2 library * Release binaries are now hosted on `get.helm.sh` Migration Use Cases ------------------- The migration use cases are as follows: 1. Helm v2 and v3 managing the same cluster: * This use case is only recommended if you intend to phase out Helm v2 gradually and do not require v3 to manage any releases deployed by v2. All new releases being deployed should be performed by v3 and existing v2 deployed releases are updated/removed by v2 only * Helm v2 and v3 can quite happily manage the same cluster. The Helm versions can be installed on the same or separate systems * If installing Helm v3 on the same system, you need to perform an additional step to ensure that both client versions can co-exist until ready to remove Helm v2 client. Rename or put the Helm v3 binary in a different folder to avoid conflict * Otherwise there are no conflicts between both versions because of the following distinctions: * v2 and v3 release (history) storage are independent of each other. The changes include the Kubernetes resource for storage and the release object metadata contained in the resource. Releases will also be on a per user namespace instead of using the Tiller namespace (for example, v2 default Tiller namespace kube-system). v2 uses "ConfigMaps" or "Secrets" under the Tiller namespace and `TILLER`ownership. v3 uses "Secrets" in the user namespace and `helm` ownership. Releases are incremental in both v2 and v3 * The only issue could be if Kubernetes cluster scoped resources (e.g. `clusterroles.rbac`) are defined in a chart. The v3 deployment would then fail even if unique in the namespace as the resources would clash * v3 configuration no longer uses `$HELM_HOME` and uses XDG directory specification instead. It is also created on the fly as need be. It is therefore independent of v2 configuration. This is applicable only when both versions are installed on the same system 2. Migrating Helm v2 to Helm v3: * This use case applies when you want Helm v3 to manage existing Helm v2 releases * It should be noted that a Helm v2 client: * can manage 1 to many Kubernetes clusters * can connect to 1 to many Tiller instances for a cluster * This means that you have to be aware of this when migrating as releases are deployed into clusters by Tiller and its namespace. You have to therefore be aware of migrating for each cluster and each Tiller instance that is managed by the Helm v2 client instance * The recommended data migration path is as follows: 1. Backup v2 data 2. Migrate Helm v2 configuration 3. Migrate Helm v2 releases 4. When confident that Helm v3 is managing all Helm v2 data (for all clusters and Tiller instances of the Helm v2 client instance) as expected, then clean up Helm v2 data * The migration process is automated by the Helm v3 [2to3](https://github.com/helm/helm-2to3) plugin Reference --------- * Helm v3 [2to3](https://github.com/helm/helm-2to3) plugin * Blog [post](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) explaining `2to3` plugin usage with examples [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Next Steps Next Steps ========== This guide is intended to give you, the chart developer, a strong understanding of how to use Helm's template language. The guide focuses on the technical aspects of template development. But there are many things this guide has not covered when it comes to the practical day-to-day development of charts. Here are some useful pointers to other documentation that will help you as you create new charts: * The CNCF [Artifact Hub](https://artifacthub.io/packages/search?kind=0) is an indispensable source of charts. * The Kubernetes [Documentation](https://kubernetes.io/docs/home/) provides detailed examples of the various resource kinds that you can use, from ConfigMaps and Secrets to DaemonSets and Deployments. * The Helm [Charts Guide](https://helm.sh/docs/topics/charts/) explains the workflow of using charts. * The Helm [Chart Hooks Guide](https://helm.sh/docs/topics/charts_hooks/) explains how to create lifecycle hooks. * The Helm [Charts Tips and Tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) article provides some useful tips for writing charts. * The [Sprig documentation](https://github.com/Masterminds/sprig) documents more than sixty of the template functions. * The [Go template docs](https://godoc.org/text/template) explain the template syntax in detail. * The [Schelm tool](https://github.com/databus23/schelm) is a nice helper utility for debugging charts. Sometimes it's easier to ask a few questions and get answers from experienced developers. The best place to do this is in the [Kubernetes Slack](https://kubernetes.slack.com/) Helm channels: * [#helm-users](https://kubernetes.slack.com/messages/helm-users) * [#helm-dev](https://kubernetes.slack.com/messages/helm-dev) * [#charts](https://kubernetes.slack.com/messages/charts) Finally, if you find errors or omissions in this document, want to suggest some new content, or would like to contribute, visit [The Helm Project](https://github.com/helm/helm-www) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Role-based Access Control Role-based Access Control ========================= In Kubernetes, granting roles to a user or an application-specific service account is a best practice to ensure that your application is operating in the scope that you have specified. Read more about service account permissions [in the official Kubernetes docs](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#service-account-permissions) . From Kubernetes 1.6 onwards, Role-based Access Control is enabled by default. RBAC allows you to specify which types of actions are permitted depending on the user and their role in your organization. With RBAC, you can * grant privileged operations (creating cluster-wide resources, like new roles) to administrators * limit a user's ability to create resources (pods, persistent volumes, deployments) to specific namespaces, or in cluster-wide scopes (resource quotas, roles, custom resource definitions) * limit a user's ability to view resources either in specific namespaces or at a cluster-wide scope. This guide is for administrators who want to restrict the scope of a user's interaction with the Kubernetes API. Managing user accounts ---------------------- All Kubernetes clusters have two categories of users: service accounts managed by Kubernetes, and normal users. Normal users are assumed to be managed by an outside, independent service. An administrator distributing private keys, a user store like Keystone or Google Accounts, even a file with a list of usernames and passwords. In this regard, Kubernetes does not have objects which represent normal user accounts. Normal users cannot be added to a cluster through an API call. In contrast, service accounts are users managed by the Kubernetes API. They are bound to specific namespaces, and created automatically by the API server or manually through API calls. Service accounts are tied to a set of credentials stored as Secrets, which are mounted into pods allowing in-cluster processes to talk to the Kubernetes API. API requests are tied to either a normal user or a service account, or are treated as anonymous requests. This means every process inside or outside the cluster, from a human user typing `kubectl` on a workstation, to kubelets on nodes, to members of the control plane, must authenticate when making requests to the API server, or be treated as an anonymous user. Roles, ClusterRoles, RoleBindings, and ClusterRoleBindings ---------------------------------------------------------- In Kubernetes, user accounts and service accounts can only view and edit resources they have been granted access to. This access is granted through the use of Roles and RoleBindings. Roles and RoleBindings are bound to a particular namespace, which grant users the ability to view and/or edit resources within that namespace the Role provides them access to. At a cluster scope, these are called ClusterRoles and ClusterRoleBindings. Granting a user a ClusterRole grants them access to view and/or edit resources across the entire cluster. It is also required to view and/or edit resources at the cluster scope (namespaces, resource quotas, nodes). ClusterRoles can be bound to a particular namespace through reference in a RoleBinding. The `admin`, `edit` and `view` default ClusterRoles are commonly used in this manner. These are a few ClusterRoles available by default in Kubernetes. They are intended to be user-facing roles. They include super-user roles (`cluster-admin`), and roles with more granular access (`admin`, `edit`, `view`). | Default ClusterRole | Default ClusterRoleBinding | Description | | --- | --- | --- | | `cluster-admin` | `system:masters` group | Allows super-user access to perform any action on any resource. When used in a ClusterRoleBinding, it gives full control over every resource in the cluster and in all namespaces. When used in a RoleBinding, it gives full control over every resource in the rolebinding's namespace, including the namespace itself. | | `admin` | None | Allows admin access, intended to be granted within a namespace using a RoleBinding. If used in a RoleBinding, allows read/write access to most resources in a namespace, including the ability to create roles and rolebindings within the namespace. It does not allow write access to resource quota or to the namespace itself. | | `edit` | None | Allows read/write access to most objects in a namespace. It does not allow viewing or modifying roles or rolebindings. | | `view` | None | Allows read-only access to see most objects in a namespace. It does not allow viewing roles or rolebindings. It does not allow viewing secrets, since those are escalating. | Restricting a user account's access using RBAC ---------------------------------------------- Now that we understand the basics of Role-based Access Control, let's discuss how an administrator can restrict a user's scope of access. ### Example: Grant a user read/write access to a particular namespace To restrict a user's access to a particular namespace, we can use either the `edit` or the `admin` role. If your charts create or interact with Roles and Rolebindings, you'll want to use the `admin` ClusterRole. Additionally, you may also create a RoleBinding with `cluster-admin` access. Granting a user `cluster-admin` access at the namespace scope provides full control over every resource in the namespace, including the namespace itself. For this example, we will create a user with the `edit` Role. First, create the namespace: $ kubectl create namespace foo Now, create a RoleBinding in that namespace, granting the user the `edit` role. $ kubectl create rolebinding sam-edit --clusterrole edit \​ --user sam \​ --namespace foo ### Example: Grant a user read/write access at the cluster scope If a user wishes to install a chart that installs cluster-scope resources (namespaces, roles, custom resource definitions, etc.), they will require cluster-scope write access. To do that, grant the user either `admin` or `cluster-admin` access. Granting a user `cluster-admin` access grants them access to absolutely every resource available in Kubernetes, including node access with `kubectl drain` and other administrative tasks. It is highly recommended to consider providing the user `admin` access instead, or to create a custom ClusterRole tailored to their needs. $ kubectl create clusterrolebinding sam-view --clusterrole view \​ --user sam $ kubectl create clusterrolebinding sam-secret-reader --clusterrole secret-reader \​ --user sam ### Example: Grant a user read-only access to a particular namespace You might've noticed that there is no ClusterRole available for viewing secrets. The `view` ClusterRole does not grant a user read access to Secrets due to escalation concerns. Helm stores release metadata as Secrets by default. In order for a user to run `helm list`, they need to be able to read these secrets. For that, we will create a special `secret-reader` ClusterRole. Create the file `cluster-role-secret-reader.yaml` and write the following content into the file: apiVersion: rbac.authorization.k8s.io/v1​ kind: ClusterRole​ metadata:​ name: secret-reader​ rules:​ - apiGroups: [""]​ resources: ["secrets"]​ verbs: ["get", "watch", "list"] Then, create the ClusterRole using $ kubectl create -f clusterrole-secret-reader.yaml​ Once that's done, we can grant a user read access to most resources, and then grant them read access to secrets: $ kubectl create namespace foo $ kubectl create rolebinding sam-view --clusterrole view \​ --user sam \​ --namespace foo $ kubectl create rolebinding sam-secret-reader --clusterrole secret-reader \​ --user sam \​ --namespace foo ### Example: Grant a user read-only access at the cluster scope In certain scenarios, it may be beneficial to grant a user cluster-scope access. For example, if a user wants to run the command `helm list --all-namespaces`, the API requires the user has cluster-scope read access. To do that, grant the user both `view` and `secret-reader` access as described above, but with a ClusterRoleBinding. $ kubectl create clusterrolebinding sam-view --clusterrole view \​ --user sam $ kubectl create clusterrolebinding sam-secret-reader --clusterrole secret-reader \​ --user sam Additional Thoughts ------------------- The examples shown above utilize the default ClusterRoles provided with Kubernetes. For more fine-grained control over what resources users are granted access to, have a look at [the Kubernetes documentation](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) on creating your own custom Roles and ClusterRoles. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | helm inspect ------------ This command has been renamed. Please refer instead to [helm show](https://helm.sh/docs/helm/helm_show/) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | helm delete ----------- This command has been renamed. Please refer instead to [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Appendix: YAML Techniques Appendix: YAML Techniques ========================= Most of this guide has been focused on writing the template language. Here, we'll look at the YAML format. YAML has some useful features that we, as template authors, can use to make our templates less error prone and easier to read. Scalars and Collections ----------------------- According to the [YAML spec](https://yaml.org/spec/1.2/spec.html) , there are two types of collections, and many scalar types. The two types of collections are maps and sequences: map: one: 1 two: 2 three: 3 sequence: - one - two - three Scalar values are individual values (as opposed to collections) ### Scalar Types in YAML In Helm's dialect of YAML, the scalar data type of a value is determined by a complex set of rules, including the Kubernetes schema for resource definitions. But when inferring types, the following rules tend to hold true. If an integer or float is an unquoted bare word, it is typically treated as a numeric type: count: 1 size: 2.34 But if they are quoted, they are treated as strings: count: "1" # <-- string, not int size: '2.34' # <-- string, not float The same is true of booleans: isGood: true # bool answer: "true" # string The word for an empty value is `null` (not `nil`). Note that `port: "80"` is valid YAML, and will pass through both the template engine and the YAML parser, but will fail if Kubernetes expects `port` to be an integer. In some cases, you can force a particular type inference using YAML node tags: coffee: "yes, please" age: !!str 21 port: !!int "80" In the above, `!!str` tells the parser that `age` is a string, even if it looks like an int. And `port` is treated as an int, even though it is quoted. Strings in YAML --------------- Much of the data that we place in YAML documents are strings. YAML has more than one way to represent a string. This section explains the ways and demonstrates how to use some of them. There are three "inline" ways of declaring a string: way1: bare words way2: "double-quoted strings" way3: 'single-quoted strings' All inline styles must be on one line. * Bare words are unquoted, and are not escaped. For this reason, you have to be careful what characters you use. * Double-quoted strings can have specific characters escaped with `\`. For example `"\"Hello\", she said"`. You can escape line breaks with `\n`. * Single-quoted strings are "literal" strings, and do not use the `\` to escape characters. The only escape sequence is `''`, which is decoded as a single `'`. In addition to the one-line strings, you can declare multi-line strings: coffee: | Latte Cappuccino Espresso The above will treat the value of `coffee` as a single string equivalent to `Latte\nCappuccino\nEspresso\n`. Note that the first line after the `|` must be correctly indented. So we could break the example above by doing this: coffee: | Latte Cappuccino Espresso Because `Latte` is incorrectly indented, we'd get an error like this: Error parsing file: error converting YAML to JSON: yaml: line 7: did not find expected key In templates, it is sometimes safer to put a fake "first line" of content in a multi-line document just for protection from the above error: coffee: | # Commented first line Latte Cappuccino Espresso Note that whatever that first line is, it will be preserved in the output of the string. So if you are, for example, using this technique to inject a file's contents into a ConfigMap, the comment should be of the type expected by whatever is reading that entry. ### Controlling Spaces in Multi-line Strings In the example above, we used `|` to indicate a multi-line string. But notice that the content of our string was followed with a trailing `\n`. If we want the YAML processor to strip off the trailing newline, we can add a `-` after the `|`: coffee: |- Latte Cappuccino Espresso Now the `coffee` value will be: `Latte\nCappuccino\nEspresso` (with no trailing `\n`). Other times, we might want all trailing whitespace to be preserved. We can do this with the `|+` notation: coffee: |+ Latte Cappuccino Espresso another: value Now the value of `coffee` will be `Latte\nCappuccino\nEspresso\n\n\n`. Indentation inside of a text block is preserved, and results in the preservation of line breaks, too: coffee: |- Latte 12 oz 16 oz Cappuccino Espresso In the above case, `coffee` will be `Latte\n 12 oz\n 16 oz\nCappuccino\nEspresso`. ### Indenting and Templates When writing templates, you may find yourself wanting to inject the contents of a file into the template. As we saw in previous chapters, there are two ways of doing this: * Use `{{ .Files.Get "FILENAME" }}` to get the contents of a file in the chart. * Use `{{ include "TEMPLATE" . }}` to render a template and then place its contents into the chart. When inserting files into YAML, it's good to understand the multi-line rules above. Often times, the easiest way to insert a static file is to do something like this: myfile: | {{ .Files.Get "myfile.txt" | indent 2 }} Note how we do the indentation above: `indent 2` tells the template engine to indent every line in "myfile.txt" with two spaces. Note that we do not indent that template line. That's because if we did, the file content of the first line would be indented twice. ### Folded Multi-line Strings Sometimes you want to represent a string in your YAML with multiple lines, but want it to be treated as one long line when it is interpreted. This is called "folding". To declare a folded block, use `>` instead of `|`: coffee: > Latte Cappuccino Espresso The value of `coffee` above will be `Latte Cappuccino Espresso\n`. Note that all but the last line feed will be converted to spaces. You can combine the whitespace controls with the folded text marker, so `>-` will replace or trim all newlines. Note that in the folded syntax, indenting text will cause lines to be preserved. coffee: >- Latte 12 oz 16 oz Cappuccino Espresso The above will produce `Latte\n 12 oz\n 16 oz\nCappuccino Espresso`. Note that both the spacing and the newlines are still there. Embedding Multiple Documents in One File ---------------------------------------- It is possible to place more than one YAML document into a single file. This is done by prefixing a new document with `---` and ending the document with `...` --- document: 1 ... --- document: 2 ... In many cases, either the `---` or the `...` may be omitted. Some files in Helm cannot contain more than one doc. If, for example, more than one document is provided inside of a `values.yaml` file, only the first will be used. Template files, however, may have more than one document. When this happens, the file (and all of its documents) is treated as one object during template rendering. But then the resulting YAML is split into multiple documents before it is fed to Kubernetes. We recommend only using multiple documents per file when it is absolutely necessary. Having multiple documents in a file can be difficult to debug. YAML is a Superset of JSON -------------------------- Because YAML is a superset of JSON, any valid JSON document _should_ be valid YAML. { "coffee": "yes, please", "coffees": [\ "Latte", "Cappuccino", "Espresso"\ ] } The above is another way of representing this: coffee: yes, please coffees: - Latte - Cappuccino - Espresso And the two can be mixed (with care): coffee: "yes, please" coffees: [ "Latte", "Cappuccino", "Espresso"] All three of these should parse into the same internal representation. While this means that files such as `values.yaml` may contain JSON data, Helm does not treat the file extension `.json` as a valid suffix. YAML Anchors ------------ The YAML spec provides a way to store a reference to a value, and later refer to that value by reference. YAML refers to this as "anchoring": coffee: "yes, please" favorite: &favoriteCoffee "Cappuccino" coffees: - Latte - *favoriteCoffee - Espresso In the above, `&favoriteCoffee` sets a reference to `Cappuccino`. Later, that reference is used as `*favoriteCoffee`. So `coffees` becomes `Latte, Cappuccino, Espresso`. While there are a few cases where anchors are useful, there is one aspect of them that can cause subtle bugs: The first time the YAML is consumed, the reference is expanded and then discarded. So if we were to decode and then re-encode the example above, the resulting YAML would be: coffee: yes, please favorite: Cappuccino coffees: - Latte - Cappuccino - Espresso Because Helm and Kubernetes often read, modify, and then rewrite YAML files, the anchors will be lost. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Glossary ======== Chart ----- A Helm package that contains information sufficient for installing a set of Kubernetes resources into a Kubernetes cluster. Charts contain a `Chart.yaml` file as well as templates, default values (`values.yaml`), and dependencies. Charts are developed in a well-defined directory structure, and then packaged into an archive format called a _chart archive_. Chart Archive ------------- A _chart archive_ is a tarred and gzipped (and optionally signed) chart. Chart Dependency (Subcharts) ---------------------------- Charts may depend upon other charts. There are two ways a dependency may occur: * Soft dependency: A chart may simply not function without another chart being installed in a cluster. Helm does not provide tooling for this case. In this case, dependencies may be managed separately. * Hard dependency: A chart may contain (inside of its `charts/` directory) another chart upon which it depends. In this case, installing the chart will install all of its dependencies. In this case, a chart and its dependencies are managed as a collection. When a chart is packaged (via `helm package`) all of its hard dependencies are bundled with it. Chart Version ------------- Charts are versioned according to the [SemVer 2 spec](https://semver.org/) . A version number is required on every chart. Chart.yaml ---------- Information about a chart is stored in a special file called `Chart.yaml`. Every chart must have this file. Helm (and helm) --------------- Helm is the package manager for Kubernetes. As an operating system package manager makes it easy to install tools on an OS, Helm makes it easy to install applications and resources into Kubernetes clusters. While _Helm_ is the name of the project, the command line client is also named `helm`. By convention, when speaking of the project, _Helm_ is capitalized. When speaking of the client, _helm_ is in lowercase. Helm Configuration Files (XDG) ------------------------------ Helm stores its configuration files in XDG directories. These directories are created the first time `helm` is run. Kube Config (KUBECONFIG) ------------------------ The Helm client learns about Kubernetes clusters by using files in the _Kube config_ file format. By default, Helm attempts to find this file in the place where `kubectl` creates it (`$HOME/.kube/config`). Lint (Linting) -------------- To _lint_ a chart is to validate that it follows the conventions and requirements of the Helm chart standard. Helm provides tools to do this, notably the `helm lint` command. Provenance (Provenance file) ---------------------------- Helm charts may be accompanied by a _provenance file_ which provides information about where the chart came from and what it contains. Provenance files are one part of the Helm security story. A provenance contains a cryptographic hash of the chart archive file, the Chart.yaml data, and a signature block (an OpenPGP "clearsign" block). When coupled with a keychain, this provides chart users with the ability to: * Validate that a chart was signed by a trusted party * Validate that the chart file has not been tampered with * Validate the contents of a chart metadata (`Chart.yaml`) * Quickly match a chart to its provenance data Provenance files have the `.prov` extension, and can be served from a chart repository server or any other HTTP server. Release ------- When a chart is installed, the Helm library creates a _release_ to track that installation. A single chart may be installed many times into the same cluster, and create many different releases. For example, one can install three PostgreSQL databases by running `helm install` three times with a different release name. Release Number (Release Version) -------------------------------- A single release can be updated multiple times. A sequential counter is used to track releases as they change. After a first `helm install`, a release will have _release number_ 1. Each time a release is upgraded or rolled back, the release number will be incremented. Rollback -------- A release can be upgraded to a newer chart or configuration. But since release history is stored, a release can also be _rolled back_ to a previous release number. This is done with the `helm rollback` command. Importantly, a rolled back release will receive a new release number. | Operation | Release Number | | --- | --- | | install | release 1 | | upgrade | release 2 | | upgrade | release 3 | | rollback 1 | release 4 (but running the same config as release 1) | The above table illustrates how release numbers increment across install, upgrade, and rollback. Helm Library (or SDK) --------------------- The Helm Library (or SDK) refers to the Go code that interacts directly with the Kubernetes API server to install, upgrade, query, and remove Kubernetes resources. It can be imported into a project to use Helm as a client library instead of a CLI. Repository (Repo, Chart Repository) ----------------------------------- Helm charts may be stored on dedicated HTTP servers called _chart repositories_ (_repositories_, or just _repos_). A chart repository server is a simple HTTP server that can serve an `index.yaml` file that describes a batch of charts, and provides information on where each chart can be downloaded from. (Many chart repositories serve the charts as well as the `index.yaml` file.) A Helm client can point to zero or more chart repositories. By default, Helm clients are not configured with any chart repositories. Chart repositories can be added at any time using the `helm repo add` command. Chart Registry (OCI-based Registry) ----------------------------------- A Helm Chart Registry is an [OCI-based](https://opencontainers.org/about/overview/) storage and distribution system that is used to host and share Helm chart packages. For more information, see the [Helm documentation on registries](https://helm.sh/docs/topics/registries/) . Values (Values Files, values.yaml) ---------------------------------- Values provide a way to override template defaults with your own information. Helm Charts are "parameterized", which means the chart developer may expose configuration that can be overridden at installation time. For example, a chart may expose a `username` field that allows setting a user name for a service. These exposed variables are called _values_ in Helm parlance. Values can be set during `helm install` and `helm upgrade` operations, either by passing them in directly, or by using a `values.yaml` file. ### Quicklinks [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | helm init --------- This command does not exist in Helm 3, following the [removal of Tiller](https://helm.sh/docs/faq/#removal-of-tiller) . You no longer need to install Tiller in your cluster in order to use Helm. If you are using Helm 2, go to [v2.helm.sh](https://v2.helm.sh/docs/helm/#helm-init) to view the [Helm Init documentation](https://v2.helm.sh/docs/helm/#helm-init) . [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | The Helm Plugins Guide The Helm Plugins Guide ====================== A Helm plugin is a tool that can be accessed through the `helm` CLI, but which is not part of the built-in Helm codebase. Existing plugins can be found on [related](https://helm.sh/docs/community/related/#helm-plugins) section or by searching [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories) . This guide explains how to use and create plugins. An Overview ----------- Helm plugins are add-on tools that integrate seamlessly with Helm. They provide a way to extend the core feature set of Helm, but without requiring every new feature to be written in Go and added to the core tool. Helm plugins have the following features: * They can be added and removed from a Helm installation without impacting the core Helm tool. * They can be written in any programming language. * They integrate with Helm, and will show up in `helm help` and other places. Helm plugins live in `$HELM_PLUGINS`. You can find the current value of this, including the default value when not set in the environment, using the `helm env` command. The Helm plugin model is partially based on Git's plugin model. To that end, you may sometimes hear `helm` referred to as the _porcelain_ layer, with plugins being the _plumbing_. This is a shorthand way of suggesting that Helm provides the user experience and top level processing logic, while the plugins do the "detail work" of performing a desired action. Installing a Plugin ------------------- Plugins are installed using the `$ helm plugin install ` command. You can pass in a path to a plugin on your local file system or a url of a remote VCS repo. The `helm plugin install` command clones or copies the plugin at the path/url given into `$HELM_PLUGINS`. If you are installing from a VCS you can specify the version with the `--version` argument. $ helm plugin install https://github.com/adamreese/helm-env If you have a plugin tar distribution, simply untar the plugin into the `$HELM_PLUGINS` directory. You can also install tarball plugins directly from url by issuing `helm plugin install https://domain/path/to/plugin.tar.gz` The Plugin File Structure ------------------------- In many ways, a plugin is similar to a chart. Each plugin has a top-level directory containing a `plugin.yaml` file. Additonal files may be present but only the `plugin.yaml` file is required. $HELM_PLUGINS/ |- last/ |- plugin.yaml The plugin.yaml File -------------------- The plugin.yaml file is required for a plugin. It contains the following fields: name: The name of the plugin (REQUIRED) version: A SemVer 2 version (REQUIRED) usage: Single line usage text shown in help description: Long description shown in places like helm help ignoreFlags: Ignore flags passed in from Helm platformCommand: # Configure command to run based on the platform - os: OS match, can be empty or ommited to match all OS' arch: Architecture match, can be empty or ommited to match all architectures command: Plugin command to execute args: Plugin command arguments command: (DEPRECATED) Plugin command, use platformCommand instead platformHooks: # Configure plugin lifecycle hooks based on the platform install: # Install lifecycle commands - os: OS match, can be empty or ommited to match all OS' arch: Architecture match, can be empty or ommited to match all architectures command: Plugin install command to execute args: Plugin install command arguments update: # Update lifecycle commands - os: OS match, can be empty or ommited to match all OS' arch: Architecture match, can be empty or ommited to match all architectures command: Plugin update command to execute args: Plugin update command arguments delete: # Delete lifecycle commands - os: OS match, can be empty or ommited to match all OS' arch: Architecture match, can be empty or ommited to match all architectures command: Plugin delete command to execute args: Plugin delete command arguments hooks: # (Deprecated) Plugin lifecycle hooks, use platformHooks instead install: Command to install plugin update: Command to update plugin delete: Command to delete plugin downloaders: # Configure downloaders capability - command: Command to invoke protocols: - Protocol schema supported ### The `name` Field The `name` is the name of the plugin. When Helm executes this plugin, this is the name it will use (e.g. `helm NAME` will invoke this plugin). _`name` should match the directory name._ In our example above, that means the plugin with `name: last` should be contained in a directory named `last`. Restrictions on `name`: * `name` cannot duplicate one of the existing `helm` top-level commands. * `name` must be restricted to the characters ASCII a-z, A-Z, 0-9, `_` and `-`. ### The `version` Field The `version` is the SemVer 2 version of the plugin. `usage` and `description` are both used to generate the help text of a command. ### The `ignoreFlags` Field The `ignoreFlags` switch tells Helm to _not_ pass flags to the plugin. So if a plugin is called with `helm myplugin --foo` and `ignoreFlags: true`, then `--foo` is silently discarded. ### The `platformCommand` Field The `platformCommand` configures the command that the plugin will execute when it is called. You can't set both `platformCommand` & `command` as this will result in an error. The following rules will apply in deciding which command to use: * If `platformCommand` is present, it will be used. * If both `os` and `arch` match the current platform, search will stop and the command will be used. * If `os` matches and `arch` is empty, the command will be used. * If `os` and `arch` are both empty, the command will be used. * If there is no match, Helm will exit with an error. * If `platformCommand` is not present and the deprecated `command` is present it will be used. * If the command is empty, Helm will exit with an error. ### The `platformHooks` Field The `platformHooks` configures the commands that the plugin will execute for lifecycle events. You can't set both `platformHooks` & `hooks` as this will resultin an error. The following rules will apply in deciding which hook command to use: * If `platformHooks` is present, it will be used and the commands for the lifecycle event will be processed. * If both `os` and `arch` match the current platform, search will stop and the command will be used. * If `os` matches and `arch` is empty, the command will be used. * If `os` and `arch` are both empty, the command will be used. * If there is no match, Helm will skip the event. * If `platformHooks` is not present and the deprecated `hooks` is present the command for the lifecycle event will be used. * If the command is empty, Helm will skip the event. Building a Plugin ----------------- Here is the plugin YAML for a simple plugin that helps get the last release name: name: last version: 0.1.0 usage: get the last release name description: get the last release name ignoreFlags: false platformCommand: - command: ${HELM_BIN} args: - list - --short - --max=1 - --date - -r Plugins may require additional scripts and executables. Scripts can be included in the plugin directory and executables can be downloaded via a hook. The following is an example plugin: $HELM_PLUGINS/ |- myplugin/ |- scripts/ |- install.ps1 |- install.sh |- plugin.yaml name: myplugin version: 0.1.0 usage: example plugin description: example plugin ignoreFlags: false platformCommand: - command: ${HELM_PLUGIN_DIR}/bin/myplugin - os: windows command: ${HELM_PLUGIN_DIR}\bin\myplugin.exe platformHooks: install: - command: ${HELM_PLUGIN_DIR}/scripts/install.sh - os: windows command: pwsh args: - -c - ${HELM_PLUGIN_DIR}\scripts\install.ps1 update: - command: ${HELM_PLUGIN_DIR}/scripts/install.sh args: - -u - os: windows command: pwsh args: - -c - ${HELM_PLUGIN_DIR}\scripts\install.ps1 - -Update Environment variables are interpolated before the plugin is executed. The pattern above illustrates the preferred way to indicate where the plugin program lives. ### Plugin Commands There are some strategies for working with plugin commands: * If a plugin includes an executable, the executable for a `platformCommand:` or should be packaged in the plugin directory or installed via a hook. * The `platformCommand:` or `command:` line will have any environment variables expanded before execution. `$HELM_PLUGIN_DIR` will point to the plugin directory. * The command itself is not executed in a shell. So you can't oneline a shell script. * Helm injects lots of configuration into environment variables. Take a look at the environment to see what information is available. * Helm makes no assumptions about the language of the plugin. You can write it in whatever you prefer. * Commands are responsible for implementing specific help text for `-h` and `--help`. Helm will use `usage` and `description` for `helm help` and `helm help myplugin`, but will not handle `helm myplugin --help`. ### Testing a Local Plugin First you need to find your `HELM_PLUGINS` path to do it run the folowing command: helm env Change your current directory to the director that `HELM_PLUGINS` is set to. Now you can add a symbolic link to your build output of your plugin in this example we did it for `mapkubeapis`. ln -s ~/GitHub/helm-mapkubeapis ./helm-mapkubeapis Downloader Plugins ------------------ By default, Helm is able to pull Charts using HTTP/S. As of Helm 2.4.0, plugins can have a special capability to download Charts from arbitrary sources. Plugins shall declare this special capability in the `plugin.yaml` file (top level): downloaders: - command: "bin/mydownloader" protocols: - "myprotocol" - "myprotocols" If such plugin is installed, Helm can interact with the repository using the specified protocol scheme by invoking the `command`. The special repository shall be added similarly to the regular ones: `helm repo add favorite myprotocol://example.com/` The rules for the special repos are the same to the regular ones: Helm must be able to download the `index.yaml` file in order to discover and cache the list of available Charts. The defined command will be invoked with the following scheme: `command certFile keyFile caFile full-URL`. The SSL credentials are coming from the repo definition, stored in `$HELM_REPOSITORY_CONFIG` (i.e., `$HELM_CONFIG_HOME/repositories.yaml`). A Downloader plugin is expected to dump the raw content to stdout and report errors on stderr. The downloader command also supports sub-commands or arguments, allowing you to specify for example `bin/mydownloader subcommand -d` in the `plugin.yaml`. This is useful if you want to use the same executable for the main plugin command and the downloader command, but with a different sub-command for each. Environment Variables --------------------- When Helm executes a plugin, it passes the outer environment to the plugin, and also injects some additional environment variables. Variables like `KUBECONFIG` are set for the plugin if they are set in the outer environment. The following variables are guaranteed to be set: * `HELM_PLUGINS`: The path to the plugins directory. * `HELM_PLUGIN_NAME`: The name of the plugin, as invoked by `helm`. So `helm myplug` will have the short name `myplug`. * `HELM_PLUGIN_DIR`: The directory that contains the plugin. * `HELM_BIN`: The path to the `helm` command (as executed by the user). * `HELM_DEBUG`: Indicates if the debug flag was set by helm. * `HELM_REGISTRY_CONFIG`: The location for the registry configuration (if using). Note that the use of Helm with registries is an experimental feature. * `HELM_REPOSITORY_CACHE`: The path to the repository cache files. * `HELM_REPOSITORY_CONFIG`: The path to the repository configuration file. * `HELM_NAMESPACE`: The namespace given to the `helm` command (generally using the `-n` flag). * `HELM_KUBECONTEXT`: The name of the Kubernetes config context given to the `helm` command. Additionally, if a Kubernetes configuration file was explicitly specified, it will be set as the `KUBECONFIG` variable A Note on Flag Parsing ---------------------- When executing a plugin, Helm will parse global flags for its own use. None of these flags are passed on to the plugin. * `--burst-limit`: This is converted to `$HELM_BURST_LIMIT` * `--debug`: If this is specified, `$HELM_DEBUG` is set to `1` * `--kube-apiserver`: This is converted to `$HELM_KUBEAPISERVER` * `--kube-as-group`: These are converted to `$HELM_KUBEASGROUPS` * `--kube-as-user`: This is converted to `$HELM_KUBEASUSER` * `--kube-ca-file`: This is converted to `$HELM_KUBECAFILE` * `--kube-context`: This is converted to `$HELM_KUBECONTEXT` * `--kube-insecure-skip-tls-verify`: This is converted to `$HELM_KUBEINSECURE_SKIP_TLS_VERIFY` * `--kube-tls-server-name`: This is converted to `$HELM_KUBETLS_SERVER_NAME` * `--kube-token`: This is converted to `$HELM_KUBETOKEN` * `--kubeconfig`: This is converted to `$KUBECONFIG` * `--namespace` and `-n`: This is converted to `$HELM_NAMESPACE` * `--qps`: This is converted to `$HELM_QPS` * `--registry-config`: This is converted to `$HELM_REGISTRY_CONFIG` * `--repository-cache`: This is converted to `$HELM_REPOSITORY_CACHE` * `--repository-config`: This is converted to `$HELM_REPOSITORY_CONFIG` Plugins _should_ display help text and then exit for `-h` and `--help`. In all other cases, plugins may use flags as appropriate. Providing shell auto-completion ------------------------------- As of Helm 3.2, a plugin can optionally provide support for shell auto-completion as part of Helm's existing auto-completion mechanism. ### Static auto-completion If a plugin provides its own flags and/or sub-commands, it can inform Helm of them by having a `completion.yaml` file located in the plugin's root directory. The `completion.yaml` file has the form: name: flags: - - validArgs: - - commands: name: flags: - - validArgs: - - commands: Notes: 1. All sections are optional but should be provided if applicable. 2. Flags should not include the `-` or `--` prefix. 3. Both short and long flags can and should be specified. A short flag need not be associated with its corresponding long form, but both forms should be listed. 4. Flags need not be ordered in any way, but need to be listed at the correct point in the sub-command hierarchy of the file. 5. Helm's existing global flags are already handled by Helm's auto-completion mechanism, therefore plugins need not specify the following flags `--debug`, `--namespace` or `-n`, `--kube-context`, and `--kubeconfig`, or any other global flag. 6. The `validArgs` list provides a static list of possible completions for the first parameter following a sub-command. It is not always possible to provide such a list in advance (see the [Dynamic Completion](https://helm.sh/docs/topics/plugins/#dynamic-completion) section below), in which case the `validArgs` section can be omitted. The `completion.yaml` file is entirely optional. If it is not provided, Helm will simply not provide shell auto-completion for the plugin (unless [Dynamic Completion](https://helm.sh/docs/topics/plugins/#dynamic-completion) is supported by the plugin). Also, adding a `completion.yaml` file is backwards-compatible and will not impact the behavior of the plugin when using older helm versions. As an example, for the [`fullstatus plugin`](https://github.com/marckhouzam/helm-fullstatus) which has no sub-commands but accepts the same flags as the `helm status` command, the `completion.yaml` file is: name: fullstatus flags: - o - output - revision A more intricate example for the [`2to3 plugin`](https://github.com/helm/helm-2to3) , has a `completion.yaml` file of: name: 2to3 commands: - name: cleanup flags: - config-cleanup - dry-run - l - label - release-cleanup - s - release-storage - tiller-cleanup - t - tiller-ns - tiller-out-cluster - name: convert flags: - delete-v2-releases - dry-run - l - label - s - release-storage - release-versions-max - t - tiller-ns - tiller-out-cluster - name: move commands: - name: config flags: - dry-run ### Dynamic completion Also starting with Helm 3.2, plugins can provide their own dynamic shell auto-completion. Dynamic shell auto-completion is the completion of parameter values or flag values that cannot be defined in advance. For example, completion of the names of helm releases currently available on the cluster. For the plugin to support dynamic auto-completion, it must provide an **executable** file called `plugin.complete` in its root directory. When the Helm completion script requires dynamic completions for the plugin, it will execute the `plugin.complete` file, passing it the command-line that needs to be completed. The `plugin.complete` executable will need to have the logic to determine what the proper completion choices are and output them to standard output to be consumed by the Helm completion script. The `plugin.complete` file is entirely optional. If it is not provided, Helm will simply not provide dynamic auto-completion for the plugin. Also, adding a `plugin.complete` file is backwards-compatible and will not impact the behavior of the plugin when using older helm versions. The output of the `plugin.complete` script should be a new-line separated list such as: rel1 rel2 rel3 When `plugin.complete` is called, the plugin environment is set just like when the plugin's main script is called. Therefore, the variables `$HELM_NAMESPACE`, `$HELM_KUBECONTEXT`, and all other plugin variables will already be set, and their corresponding global flags will be removed. The `plugin.complete` file can be in any executable form; it can be a shell script, a Go program, or any other type of program that Helm can execute. The `plugin.complete` file _**must**_ have executable permissions for the user. The `plugin.complete` file _**must**_ exit with a success code (value 0). In some cases, dynamic completion will require to obtain information from the Kubernetes cluster. For example, the `helm fullstatus` plugin requires a release name as input. In the `fullstatus` plugin, for its `plugin.complete` script to provide completion for current release names, it can simply run `helm list -q` and output the result. If it is desired to use the same executable for plugin execution and for plugin completion, the `plugin.complete` script can be made to call the main plugin executable with some special parameter or flag; when the main plugin executable detects the special parameter or flag, it will know to run the completion. In our example, `plugin.complete` could be implemented like this: #!/usr/bin/env sh # "$@" is the entire command-line that requires completion. # It is important to double-quote the "$@" variable to preserve a possibly empty last parameter. $HELM_PLUGIN_DIR/status.sh --complete "$@" The `fullstatus` plugin's real script (`status.sh`) must then look for the `--complete` flag and if found, printout the proper completions. ### Tips and tricks 1. The shell will automatically filter out completion choices that don't match user input. A plugin can therefore return all relevant completions without removing the ones that don't match the user input. For example, if the command-line is `helm fullstatus ngin`, the `plugin.complete` script can print _all_ release names (of the `default` namespace), not just the ones starting with `ngin`; the shell will only retain the ones starting with `ngin`. 2. To simplify dynamic completion support, especially if you have a complex plugin, you can have your `plugin.complete` script call your main plugin script and request completion choices. See the [Dynamic Completion](https://helm.sh/docs/topics/plugins/#dynamic-completion) section above for an example. 3. To debug dynamic completion and the `plugin.complete` file, one can run the following to see the completion results : * `helm __complete `. For example: * `helm __complete fullstatus --output js`, * `helm __complete fullstatus -o json ""` [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Appendix: Go Data Types and Templates Appendix: Go Data Types and Templates ===================================== The Helm template language is implemented in the strongly typed Go programming language. For that reason, variables in templates are _typed_. For the most part, variables will be exposed as one of the following types: * string: A string of text * bool: a `true` or `false` * int: An integer value (there are also 8, 16, 32, and 64 bit signed and unsigned variants of this) * float64: a 64-bit floating point value (there are also 8, 16, and 32 bit varieties of this) * a byte slice (`[]byte`), often used to hold (potentially) binary data * struct: an object with properties and methods * a slice (indexed list) of one of the previous types * a string-keyed map (`map[string]interface{}`) where the value is one of the previous types There are many other types in Go, and sometimes you will have to convert between them in your templates. The easiest way to debug an object's type is to pass it through `printf "%T"` in a template, which will print the type. Also see the `typeOf` and `kindOf` functions. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Deprecated Kubernetes APIs Deprecated Kubernetes APIs ========================== Kubernetes is an API-driven system and the API evolves over time to reflect the evolving understanding of the problem space. This is common practice across systems and their APIs. An important part of evolving APIs is a good deprecation policy and process to inform users of how changes to APIs are implemented. In other words, consumers of your API need to know in advance and in what release an API will be removed or changed. This removes the element of surprise and breaking changes to consumers. The [Kubernetes deprecation policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/) documents how Kubernetes handles the changes to its API versions. The policy for deprecation states the timeframe that API versions will be supported following a deprecation announcement. It is therefore important to be aware of deprecation announcements and know when API versions will be removed, to help minimize the effect. This is an example of an announcement [for the removal of deprecated API versions in Kubernetes 1.16](https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/) and was advertised a few months prior to the release. These API versions would have been announced for deprecation prior to this again. This shows that there is a good policy in place which informs consumers of API version support. Helm templates specify a [Kubernetes API group](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-groups) when defining a Kubernetes object, similar to a Kubernetes manifest file. It is specified in the `apiVersion` field of the template and it identifies the API version of the Kubernetes object. This means that Helm users and chart maintainers need to be aware when Kubernetes API versions have been deprecated and in what Kubernetes version they will be removed. Chart Maintainers ----------------- You should audit your charts checking for Kubernetes API versions that are deprecated or are removed in a Kubernetes version. The API versions found as due to be or that are now out of support, should be updated to the supported version and a new version of the chart released. The API version is defined by the `kind` and `apiVersion` fields. For example, here is a removed `Deployment` object API version in Kubernetes 1.16: apiVersion: apps/v1beta1 kind: Deployment Helm Users ---------- You should audit the charts that you use (similar to [chart maintainers](https://helm.sh/docs/topics/kubernetes_apis/#chart-maintainers) ) and identify any charts where API versions are deprecated or removed in a Kubernetes version. For the charts identified, you need to check for the latest version of the chart (which has supported API versions) or update the chart yourself. Additionally, you also need to audit any charts deployed (i.e. Helm releases) checking again for any deprecated or removed API versions. This can be done by getting details of a release using the `helm get manifest` command. The means for updating a Helm release to supported APIs depends on your findings as follows: 1. If you find deprecated API versions only then: * Perform a `helm upgrade` with a version of the chart with supported Kubernetes API versions * Add a description in the upgrade, something along the lines to not perform a rollback to a Helm version prior to this current version 2. If you find any API version(s) that is/are removed in a Kubernetes version then: * If you are running a Kubernetes version where the API version(s) are still available (for example, you are on Kubernetes 1.15 and found you use APIs that will be removed in Kubernetes 1.16): * Follow the step 1 procedure * Otherwise (for example, you are already running a Kubernetes version where some API versions reported by `helm get manifest` are no longer available): * You need to edit the release manifest that is stored in the cluster to update the API versions to supported APIs. See [Updating API Versions of a Release Manifest](https://helm.sh/docs/topics/kubernetes_apis/#updating-api-versions-of-a-release-manifest) for more details > Note: In all cases of updating a Helm release with supported APIs, you should never rollback the release to a version prior to the release version with the supported APIs. > Recommendation: The best practice is to upgrade releases using deprecated API versions to supported API versions, prior to upgrading to a kubernetes cluster that removes those API versions. If you don't update a release as suggested previously, you will have an error similar to the following when trying to upgrade a release in a Kubernetes version where its API version(s) is/are removed: Error: UPGRADE FAILED: current release manifest contains removed kubernetes api(s) for this kubernetes version and it is therefore unable to build the kubernetes objects for performing the diff. error from kubernetes: unable to recognize "": no matches for kind "Deployment" in version "apps/v1beta1" Helm fails in this scenario because it attempts to create a diff patch between the current deployed release (which contains the Kubernetes APIs that are removed in this Kubernetes version) against the chart you are passing with the updated/supported API versions. The underlying reason for failure is that when Kubernetes removes an API version, the Kubernetes Go client library can no longer parse the deprecated objects and Helm therefore fails when calling the library. Helm unfortunately is unable to recover from this situation and is no longer able to manage such a release. See [Updating API Versions of a Release Manifest](https://helm.sh/docs/topics/kubernetes_apis/#updating-api-versions-of-a-release-manifest) for more details on how to recover from this scenario. Updating API Versions of a Release Manifest ------------------------------------------- The manifest is a property of the Helm release object which is stored in the data field of a Secret (default) or ConfigMap in the cluster. The data field contains a gzipped object which is base 64 encoded (there is an additional base 64 encoding for a Secret). There is a Secret/ConfigMap per release version/revision in the namespace of the release. You can use the Helm [mapkubeapis](https://github.com/helm/helm-mapkubeapis) plugin to perform the update of a release to supported APIs. Check out the readme for more details. Alternatively, you can follow these manual steps to perform an update of the API versions of a release manifest. Depending on your configuration you will follow the steps for the Secret or ConfigMap backend. * Get the name of the Secret or Configmap associated with the latest deployed release: * Secrets backend: `kubectl get secret -l owner=helm,status=deployed,name= --namespace | awk '{print $1}' | grep -v NAME` * ConfigMap backend: `kubectl get configmap -l owner=helm,status=deployed,name= --namespace | awk '{print $1}' | grep -v NAME` * Get latest deployed release details: * Secrets backend: `kubectl get secret -n -o yaml > release.yaml` * ConfigMap backend: `kubectl get configmap -n -o yaml > release.yaml` * Backup the release in case you need to restore if something goes wrong: * `cp release.yaml release.bak` * In case of emergency, restore: `kubectl apply -f release.bak -n ` * Decode the release object: * Secrets backend:`cat release.yaml | grep -oP '(?<=release: ).*' | base64 -d | base64 -d | gzip -d > release.data.decoded` * ConfigMap backend: `cat release.yaml | grep -oP '(?<=release: ).*' | base64 -d | gzip -d > release.data.decoded` * Change API versions of the manifests. Can use any tool (e.g. editor) to make the changes. This is in the `manifest` field of your decoded release object (`release.data.decoded`) * Encode the release object: * Secrets backend: `cat release.data.decoded | gzip | base64 | base64` * ConfigMap backend: `cat release.data.decoded | gzip | base64` * Replace `data.release` property value in the deployed release file (`release.yaml`) with the new encoded release object * Apply file to namespace: `kubectl apply -f release.yaml -n ` * Perform a `helm upgrade` with a version of the chart with supported Kubernetes API versions * Add a description in the upgrade, something along the lines to not perform a rollback to a Helm version prior to this current version [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Completion Powershell Helm Completion Powershell ========================== helm completion powershell -------------------------- generate autocompletion script for powershell ### Synopsis Generate the autocompletion script for powershell. To load completions in your current shell session: PS C:> helm completion powershell | Out-String | Invoke-Expression To load completions for every new session, add the output of the above command to your powershell profile. helm completion powershell [flags] ### Options -h, --help help for powershell --no-descriptions disable completion descriptions ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm completion](https://helm.sh/docs/helm/helm_completion/) - generate autocompletion scripts for the specified shell ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Dependency Build Helm Dependency Build ===================== helm dependency build --------------------- rebuild the charts/ directory based on the Chart.lock file ### Synopsis Build out the charts/ directory from the Chart.lock file. Build is used to reconstruct a chart's dependencies to the state specified in the lock file. This will not re-negotiate dependencies, as 'helm dependency update' does. If no lock file is found, 'helm dependency build' will mirror the behavior of 'helm dependency update'. helm dependency build CHART [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file -h, --help help for build --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string keyring containing public keys (default "~/.gnupg/pubring.gpg") --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --skip-refresh do not refresh the local repository cache --username string chart repository username where to locate the requested chart --verify verify the packages against signatures ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm dependency](https://helm.sh/docs/helm/helm_dependency/) - manage a chart's dependencies ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Completion Helm Completion =============== helm completion --------------- generate autocompletion scripts for the specified shell ### Synopsis Generate autocompletion scripts for Helm for the specified shell. ### Options -h, --help help for completion ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm completion bash](https://helm.sh/docs/helm/helm_completion_bash/) - generate autocompletion script for bash * [helm completion fish](https://helm.sh/docs/helm/helm_completion_fish/) - generate autocompletion script for fish * [helm completion powershell](https://helm.sh/docs/helm/helm_completion_powershell/) - generate autocompletion script for powershell * [helm completion zsh](https://helm.sh/docs/helm/helm_completion_zsh/) - generate autocompletion script for zsh ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Completion Bash Helm Completion Bash ==================== helm completion bash -------------------- generate autocompletion script for bash ### Synopsis Generate the autocompletion script for Helm for the bash shell. To load completions in your current shell session: source <(helm completion bash) To load completions for every new session, execute once: * Linux: helm completion bash > /etc/bash_completion.d/helm * MacOS: helm completion bash > /usr/local/etc/bash_completion.d/helm helm completion bash [flags] ### Options -h, --help help for bash --no-descriptions disable completion descriptions ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm completion](https://helm.sh/docs/helm/helm_completion/) - generate autocompletion scripts for the specified shell ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Metadata Helm Get Metadata ================= helm get metadata ----------------- This command fetches metadata for a given release helm get metadata RELEASE_NAME [flags] ### Options -h, --help help for metadata -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --revision int specify release revision ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Helm ==== helm ---- The Helm package manager for Kubernetes. ### Synopsis The Kubernetes package manager Common actions for Helm: * helm search: search for charts * helm pull: download a chart to your local directory to view * helm install: upload the chart to Kubernetes * helm list: list releases of charts Environment variables: | Name | Description | | --- | --- | | $HELM\_CACHE\_HOME | set an alternative location for storing cached files. | | $HELM\_CONFIG\_HOME | set an alternative location for storing Helm configuration. | | $HELM\_DATA\_HOME | set an alternative location for storing Helm data. | | $HELM\_DEBUG | indicate whether or not Helm is running in Debug mode | | $HELM\_DRIVER | set the backend storage driver. Values are: configmap, secret, memory, sql. | | $HELM\_DRIVER\_SQL\_CONNECTION\_STRING | set the connection string the SQL storage driver should use. | | $HELM\_MAX\_HISTORY | set the maximum number of helm release history. | | $HELM\_NAMESPACE | set the namespace used for the helm operations. | | $HELM\_NO\_PLUGINS | disable plugins. Set HELM\_NO\_PLUGINS=1 to disable plugins. | | $HELM\_PLUGINS | set the path to the plugins directory | | $HELM\_REGISTRY\_CONFIG | set the path to the registry config file. | | $HELM\_REPOSITORY\_CACHE | set the path to the repository cache directory | | $HELM\_REPOSITORY\_CONFIG | set the path to the repositories file. | | $KUBECONFIG | set an alternative Kubernetes configuration file (default "~/.kube/config") | | $HELM\_KUBEAPISERVER | set the Kubernetes API Server Endpoint for authentication | | $HELM\_KUBECAFILE | set the Kubernetes certificate authority file. | | $HELM\_KUBEASGROUPS | set the Groups to use for impersonation using a comma-separated list. | | $HELM\_KUBEASUSER | set the Username to impersonate for the operation. | | $HELM\_KUBECONTEXT | set the name of the kubeconfig context. | | $HELM\_KUBETOKEN | set the Bearer KubeToken used for authentication. | | $HELM\_KUBEINSECURE\_SKIP\_TLS\_VERIFY | indicate if the Kubernetes API server's certificate validation should be skipped (insecure) | | $HELM\_KUBETLS\_SERVER\_NAME | set the server name used to validate the Kubernetes API server certificate | | $HELM\_BURST\_LIMIT | set the default burst limit in the case the server contains many CRDs (default 100, -1 to disable) | | $HELM\_QPS | set the Queries Per Second in cases where a high number of calls exceed the option for higher burst values | Helm stores cache, configuration, and data based on the following configuration order: * If a HELM\_\*\_HOME environment variable is set, it will be used * Otherwise, on systems supporting the XDG base directory specification, the XDG variables will be used * When no other location is set a default location will be used based on the operating system By default, the default directories depend on the Operating System. The defaults are listed below: | Operating System | Cache Path | Configuration Path | Data Path | | --- | --- | --- | --- | | Linux | $HOME/.cache/helm | $HOME/.config/helm | $HOME/.local/share/helm | | macOS | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm | | Windows | %TEMP%\\helm | %APPDATA%\\helm | %APPDATA%\\helm | ### Options --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output -h, --help help for helm --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm completion](https://helm.sh/docs/helm/helm_completion/) - generate autocompletion scripts for the specified shell * [helm create](https://helm.sh/docs/helm/helm_create/) - create a new chart with the given name * [helm dependency](https://helm.sh/docs/helm/helm_dependency/) - manage a chart's dependencies * [helm env](https://helm.sh/docs/helm/helm_env/) - helm client environment information * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release * [helm history](https://helm.sh/docs/helm/helm_history/) - fetch release history * [helm install](https://helm.sh/docs/helm/helm_install/) - install a chart * [helm lint](https://helm.sh/docs/helm/helm_lint/) - examine a chart for possible issues * [helm list](https://helm.sh/docs/helm/helm_list/) - list releases * [helm package](https://helm.sh/docs/helm/helm_package/) - package a chart directory into a chart archive * [helm plugin](https://helm.sh/docs/helm/helm_plugin/) - install, list, or uninstall Helm plugins * [helm pull](https://helm.sh/docs/helm/helm_pull/) - download a chart from a repository and (optionally) unpack it in local directory * [helm push](https://helm.sh/docs/helm/helm_push/) - push a chart to remote * [helm registry](https://helm.sh/docs/helm/helm_registry/) - login to or logout from a registry * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories * [helm rollback](https://helm.sh/docs/helm/helm_rollback/) - roll back a release to a previous revision * [helm search](https://helm.sh/docs/helm/helm_search/) - search for a keyword in charts * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart * [helm status](https://helm.sh/docs/helm/helm_status/) - display the status of the named release * [helm template](https://helm.sh/docs/helm/helm_template/) - locally render templates * [helm test](https://helm.sh/docs/helm/helm_test/) - run tests for a release * [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) - uninstall a release * [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) - upgrade a release * [helm verify](https://helm.sh/docs/helm/helm_verify/) - verify that a chart at the given path has been signed and is valid * [helm version](https://helm.sh/docs/helm/helm_version/) - print the client version information ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Dependency Helm Dependency =============== helm dependency --------------- manage a chart's dependencies ### Synopsis Manage the dependencies of a chart. Helm charts store their dependencies in 'charts/'. For chart developers, it is often easier to manage dependencies in 'Chart.yaml' which declares all dependencies. The dependency commands operate on that file, making it easy to synchronize between the desired dependencies and the actual dependencies stored in the 'charts/' directory. For example, this Chart.yaml declares two dependencies: # Chart.yaml dependencies: - name: nginx version: "1.2.3" repository: "https://example.com/charts" - name: memcached version: "3.2.1" repository: "https://another.example.com/charts" The 'name' should be the name of a chart, where that name must match the name in that chart's 'Chart.yaml' file. The 'version' field should contain a semantic version or version range. The 'repository' URL should point to a Chart Repository. Helm expects that by appending '/index.yaml' to the URL, it should be able to retrieve the chart repository's index. Note: 'repository' can be an alias. The alias must start with 'alias:' or '@'. Starting from 2.2.0, repository can be defined as the path to the directory of the dependency charts stored locally. The path should start with a prefix of "file://". For example, # Chart.yaml dependencies: - name: nginx version: "1.2.3" repository: "file://../dependency_chart/nginx" If the dependency chart is retrieved locally, it is not required to have the repository added to helm by "helm add repo". Version matching is also supported for this case. ### Options -h, --help help for dependency ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm dependency build](https://helm.sh/docs/helm/helm_dependency_build/) - rebuild the charts/ directory based on the Chart.lock file * [helm dependency list](https://helm.sh/docs/helm/helm_dependency_list/) - list the dependencies for the given chart * [helm dependency update](https://helm.sh/docs/helm/helm_dependency_update/) - update charts/ based on the contents of Chart.yaml ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Helm Get ======== helm get -------- download extended information of a named release ### Synopsis This command consists of multiple subcommands which can be used to get extended information about the release, including: * The values used to generate the release * The generated manifest file * The notes provided by the chart of the release * The hooks associated with the release * The metadata of the release ### Options -h, --help help for get ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm get all](https://helm.sh/docs/helm/helm_get_all/) - download all information for a named release * [helm get hooks](https://helm.sh/docs/helm/helm_get_hooks/) - download all hooks for a named release * [helm get manifest](https://helm.sh/docs/helm/helm_get_manifest/) - download the manifest for a named release * [helm get metadata](https://helm.sh/docs/helm/helm_get_metadata/) - This command fetches metadata for a given release * [helm get notes](https://helm.sh/docs/helm/helm_get_notes/) - download the notes for a named release * [helm get values](https://helm.sh/docs/helm/helm_get_values/) - download the values file for a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Hooks Helm Get Hooks ============== helm get hooks -------------- download all hooks for a named release ### Synopsis This command downloads hooks for a given release. Hooks are formatted in YAML and separated by the YAML '---\\n' separator. helm get hooks RELEASE_NAME [flags] ### Options -h, --help help for hooks --revision int get the named release with revision ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Manifest Helm Get Manifest ================= helm get manifest ----------------- download the manifest for a named release ### Synopsis This command fetches the generated manifest for a given release. A manifest is a YAML-encoded representation of the Kubernetes resources that were generated from this release's chart(s). If a chart is dependent on other charts, those resources will also be included in the manifest. helm get manifest RELEASE_NAME [flags] ### Options -h, --help help for manifest --revision int get the named release with revision ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Create Helm Create =========== helm create ----------- create a new chart with the given name ### Synopsis This command creates a chart directory along with the common files and directories used in a chart. For example, 'helm create foo' will create a directory structure that looks something like this: foo/ ├── .helmignore # Contains patterns to ignore when packaging Helm charts. ├── Chart.yaml # Information about your chart ├── values.yaml # The default values for your templates ├── charts/ # Charts that this chart depends on └── templates/ # The template files └── tests/ # The test files 'helm create' takes a path for an argument. If directories in the given path do not exist, Helm will attempt to create them as it goes. If the given destination exists and there are files in that directory, conflicting files will be overwritten, but other files will be left alone. helm create NAME [flags] ### Options -h, --help help for create -p, --starter string the name or absolute path to Helm starter scaffold ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Dependency Update Helm Dependency Update ====================== helm dependency update ---------------------- update charts/ based on the contents of Chart.yaml ### Synopsis Update the on-disk dependencies to mirror Chart.yaml. This command verifies that the required charts, as expressed in 'Chart.yaml', are present in 'charts/' and are at an acceptable version. It will pull down the latest charts that satisfy the dependencies, and clean up old dependencies. On successful update, this will generate a lock file that can be used to rebuild the dependencies to an exact version. Dependencies are not required to be represented in 'Chart.yaml'. For that reason, an update command will not remove charts unless they are (a) present in the Chart.yaml file, but (b) at the wrong version. helm dependency update CHART [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file -h, --help help for update --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string keyring containing public keys (default "~/.gnupg/pubring.gpg") --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --skip-refresh do not refresh the local repository cache --username string chart repository username where to locate the requested chart --verify verify the packages against signatures ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm dependency](https://helm.sh/docs/helm/helm_dependency/) - manage a chart's dependencies ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Env Helm Env ======== helm env -------- helm client environment information ### Synopsis Env prints out all the environment information in use by Helm. helm env [flags] ### Options -h, --help help for env ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Push Helm Push ========= helm push --------- push a chart to remote ### Synopsis Upload a chart to a registry. If the chart has an associated provenance file, it will also be uploaded. helm push [chart] [remote] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify registry client using this SSL certificate file -h, --help help for push --insecure-skip-tls-verify skip tls certificate checks for the chart upload --key-file string identify registry client using this SSL key file --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart upload --username string chart repository username where to locate the requested chart ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Notes Helm Get Notes ============== helm get notes -------------- download the notes for a named release ### Synopsis This command shows notes provided by the chart of a named release. helm get notes RELEASE_NAME [flags] ### Options -h, --help help for notes --revision int get the named release with revision ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Lint Helm Lint ========= helm lint --------- examine a chart for possible issues ### Synopsis This command takes a path to a chart and runs a series of tests to verify that the chart is well-formed. If the linter encounters things that will cause the chart to fail installation, it will emit \[ERROR\] messages. If it encounters issues that break with convention or recommendation, it will emit \[WARNING\] messages. helm lint PATH [flags] ### Options -h, --help help for lint --kube-version string Kubernetes version used for capabilities and deprecation checks --quiet print only warnings and errors --set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray set a literal STRING value on the command line --set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-schema-validation if set, disables JSON schema validation --strict fail on lint warnings -f, --values strings specify values in a YAML file or a URL (can specify multiple) --with-subcharts lint dependent charts ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm List Helm List ========= helm list --------- list releases ### Synopsis This command lists all of the releases for a specified namespace (uses current namespace context if namespace not specified). By default, it lists only releases that are deployed or failed. Flags like '--uninstalled' and '--all' will alter this behavior. Such flags can be combined: '--uninstalled --failed'. By default, items are sorted alphabetically. Use the '-d' flag to sort by release date. If the --filter flag is provided, it will be treated as a filter. Filters are regular expressions (Perl compatible) that are applied to the list of releases. Only items that match the filter will be returned. $ helm list --filter 'ara[a-z]+' NAME UPDATED CHART maudlin-arachnid 2020-06-18 14:17:46.125134977 +0000 UTC alpine-0.1.0 If no results are found, 'helm list' will exit 0, but with no output (or in the case of no '-q' flag, only headers). By default, up to 256 items may be returned. To limit this, use the '--max' flag. Setting '--max' to 0 will not return all results. Rather, it will return the server's default, which may be much higher than 256. Pairing the '--max' flag with the '--offset' flag allows you to page through results. helm list [flags] ### Options -a, --all show all releases without any filter applied -A, --all-namespaces list releases across all namespaces -d, --date sort by release date --deployed show deployed releases. If no other is specified, this will be automatically enabled --failed show failed releases -f, --filter string a regular expression (Perl compatible). Any releases that match the expression will be included in the results -h, --help help for list -m, --max int maximum number of releases to fetch (default 256) --no-headers don't print headers when using the default output format --offset int next release index in the list, used to offset from start value -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --pending show pending releases -r, --reverse reverse the sort order -l, --selector string Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). Works only for secret(default) and configmap storage backends. -q, --short output short (quiet) listing format --superseded show superseded releases --time-format string format time using golang time formatter. Example: --time-format "2006-01-02 15:04:05Z0700" --uninstalled show uninstalled releases (if 'helm uninstall --keep-history' was used) --uninstalling show releases that are currently being uninstalled ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Dependency List Helm Dependency List ==================== helm dependency list -------------------- list the dependencies for the given chart ### Synopsis List all of the dependencies declared in a chart. This can take chart archives and chart directories as input. It will not alter the contents of a chart. This will produce an error if the chart cannot be loaded. helm dependency list CHART [flags] ### Options -h, --help help for list --max-col-width uint maximum column width for output table (default 80) ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm dependency](https://helm.sh/docs/helm/helm_dependency/) - manage a chart's dependencies ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Completion Fish Helm Completion Fish ==================== helm completion fish -------------------- generate autocompletion script for fish ### Synopsis Generate the autocompletion script for Helm for the fish shell. To load completions in your current shell session: helm completion fish | source To load completions for every new session, execute once: helm completion fish > ~/.config/fish/completions/helm.fish You will need to start a new shell for this setup to take effect. helm completion fish [flags] ### Options -h, --help help for fish --no-descriptions disable completion descriptions ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm completion](https://helm.sh/docs/helm/helm_completion/) - generate autocompletion scripts for the specified shell ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get Values Helm Get Values =============== helm get values --------------- download the values file for a named release ### Synopsis This command downloads a values file for a given release. helm get values RELEASE_NAME [flags] ### Options -a, --all dump all (computed) values -h, --help help for values -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --revision int get the named release with revision ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Package Helm Package ============ helm package ------------ package a chart directory into a chart archive ### Synopsis This command packages a chart into a versioned chart archive file. If a path is given, this will look at that path for a chart (which must contain a Chart.yaml file) and then package that directory. Versioned chart archives are used by Helm package repositories. To sign a chart, use the '--sign' flag. In most cases, you should also provide '--keyring path/to/secret/keys' and '--key keyname'. $ helm package --sign ./mychart --key mykey --keyring ~/.gnupg/secring.gpg If '--keyring' is not specified, Helm usually defaults to the public keyring unless your environment is otherwise configured. helm package [CHART_PATH] [...] [flags] ### Options --app-version string set the appVersion on the chart to this version --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file -u, --dependency-update update dependencies from "Chart.yaml" to dir "charts/" before packaging -d, --destination string location to write the chart. (default ".") -h, --help help for package --insecure-skip-tls-verify skip tls certificate checks for the chart download --key string name of the key to use when signing. Used if --sign is true --key-file string identify HTTPS client using this SSL key file --keyring string location of a public keyring (default "~/.gnupg/pubring.gpg") --passphrase-file string location of a file which contains the passphrase for the signing key. Use "-" in order to read from stdin. --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --sign use a PGP private key to sign this package --username string chart repository username where to locate the requested chart --version string set the version on the chart to this semver version ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Plugin Install Helm Plugin Install =================== helm plugin install ------------------- install a Helm plugin ### Synopsis This command allows you to install a plugin from a url to a VCS repo or a local path. helm plugin install [options] [flags] ### Options -h, --help help for install --version string specify a version constraint. If this is not specified, the latest version is installed ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm plugin](https://helm.sh/docs/helm/helm_plugin/) - install, list, or uninstall Helm plugins ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Get All Helm Get All ============ helm get all ------------ download all information for a named release ### Synopsis This command prints a human readable collection of information about the notes, hooks, supplied values, and generated manifest file of the given release. helm get all RELEASE_NAME [flags] ### Options -h, --help help for all --revision int get the named release with revision --template string go template for formatting the output, eg: {{.Release.Name}} ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm get](https://helm.sh/docs/helm/helm_get/) - download extended information of a named release ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Helm Registry ============= helm registry ------------- login to or logout from a registry ### Synopsis This command consists of multiple subcommands to interact with registries. ### Options -h, --help help for registry ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm registry login](https://helm.sh/docs/helm/helm_registry_login/) - login to a registry * [helm registry logout](https://helm.sh/docs/helm/helm_registry_logout/) - logout from a registry ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Completion Zsh Helm Completion Zsh =================== helm completion zsh ------------------- generate autocompletion script for zsh ### Synopsis Generate the autocompletion script for Helm for the zsh shell. To load completions in your current shell session: source <(helm completion zsh) To load completions for every new session, execute once: helm completion zsh > "${fpath[1]}/_helm" helm completion zsh [flags] ### Options -h, --help help for zsh --no-descriptions disable completion descriptions ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm completion](https://helm.sh/docs/helm/helm_completion/) - generate autocompletion scripts for the specified shell ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm History Helm History ============ helm history ------------ fetch release history ### Synopsis History prints historical revisions for a given release. A default maximum of 256 revisions will be returned. Setting '--max' configures the maximum length of the revision list returned. The historical release set is printed as a formatted table, e.g: $ helm history angry-bird REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Initial install 2 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Upgraded successfully 3 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Rolled back to 2 4 Mon Oct 3 10:15:13 2016 deployed alpine-0.1.0 1.0 Upgraded successfully helm history RELEASE_NAME [flags] ### Options -h, --help help for history --max int maximum number of revision to include in history (default 256) -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Plugin List Helm Plugin List ================ helm plugin list ---------------- list installed Helm plugins helm plugin list [flags] ### Options -h, --help help for list ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm plugin](https://helm.sh/docs/helm/helm_plugin/) - install, list, or uninstall Helm plugins ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Helm Repo ========= helm repo --------- add, list, remove, update, and index chart repositories ### Synopsis This command consists of multiple subcommands to interact with chart repositories. It can be used to add, remove, list, and index chart repositories. ### Options -h, --help help for repo ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm repo add](https://helm.sh/docs/helm/helm_repo_add/) - add a chart repository * [helm repo index](https://helm.sh/docs/helm/helm_repo_index/) - generate an index file given a directory containing packaged charts * [helm repo list](https://helm.sh/docs/helm/helm_repo_list/) - list chart repositories * [helm repo remove](https://helm.sh/docs/helm/helm_repo_remove/) - remove one or more chart repositories * [helm repo update](https://helm.sh/docs/helm/helm_repo_update/) - update information of available charts locally from chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Login Helm Registry Login =================== helm registry login ------------------- login to a registry ### Synopsis Authenticate to a remote registry. helm registry login [host] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify registry client using this SSL certificate file -h, --help help for login --insecure allow connections to TLS registry without certs --key-file string identify registry client using this SSL key file -p, --password string registry password or identity token --password-stdin read password or identity token from stdin --plain-http use insecure HTTP connections for the chart upload -u, --username string registry username ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm registry](https://helm.sh/docs/helm/helm_registry/) - login to or logout from a registry ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo List Helm Repo List ============== helm repo list -------------- list chart repositories helm repo list [flags] ### Options -h, --help help for list -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Plugin Uninstall Helm Plugin Uninstall ===================== helm plugin uninstall --------------------- uninstall one or more Helm plugins helm plugin uninstall ... [flags] ### Options -h, --help help for uninstall ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm plugin](https://helm.sh/docs/helm/helm_plugin/) - install, list, or uninstall Helm plugins ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Plugin Helm Plugin =========== helm plugin ----------- install, list, or uninstall Helm plugins ### Synopsis Manage client-side Helm plugins. ### Options -h, --help help for plugin ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm plugin install](https://helm.sh/docs/helm/helm_plugin_install/) - install a Helm plugin * [helm plugin list](https://helm.sh/docs/helm/helm_plugin_list/) - list installed Helm plugins * [helm plugin uninstall](https://helm.sh/docs/helm/helm_plugin_uninstall/) - uninstall one or more Helm plugins * [helm plugin update](https://helm.sh/docs/helm/helm_plugin_update/) - update one or more Helm plugins ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Remove Helm Repo Remove ================ helm repo remove ---------------- remove one or more chart repositories helm repo remove [REPO1 [REPO2 ...]] [flags] ### Options -h, --help help for remove ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Registry Logout Helm Registry Logout ==================== helm registry logout -------------------- logout from a registry ### Synopsis Remove credentials stored for a remote registry. helm registry logout [host] [flags] ### Options -h, --help help for logout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm registry](https://helm.sh/docs/helm/helm_registry/) - login to or logout from a registry ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Plugin Update Helm Plugin Update ================== helm plugin update ------------------ update one or more Helm plugins helm plugin update ... [flags] ### Options -h, --help help for update ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm plugin](https://helm.sh/docs/helm/helm_plugin/) - install, list, or uninstall Helm plugins ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Pull Helm Pull ========= helm pull --------- download a chart from a repository and (optionally) unpack it in local directory ### Synopsis Retrieve a package from a package repository, and download it locally. This is useful for fetching packages to inspect, modify, or repackage. It can also be used to perform cryptographic verification of a chart without installing the chart. There are options for unpacking the chart after download. This will create a directory for the chart and uncompress into that directory. If the --verify flag is specified, the requested chart MUST have a provenance file, and MUST pass the verification process. Failure in any part of this will result in an error, and the chart will not be saved locally. helm pull [chart URL | repo/chartname] [...] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file -d, --destination string location to write the chart. If this and untardir are specified, untardir is appended to this (default ".") --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored. -h, --help help for pull --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --prov fetch the provenance file, but don't perform verification --repo string chart repository url where to locate the requested chart --untar if set to true, will untar the chart after downloading it --untardir string if untar is specified, this flag specifies the name of the directory into which the chart is expanded (default ".") --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Version Support Policy Helm Version Support Policy =========================== This document describes the maximum version skew supported between Helm and Kubernetes. Supported Versions ------------------ Helm versions are expressed as `x.y.z`, where `x` is the major version, `y` is the minor version, and `z` is the patch version, following [Semantic Versioning](https://semver.org/spec/v2.0.0.html) terminology. The Helm project maintains a release branch for the most recent minor release. Applicable fixes, including security fixes, are cherry-picked into the release branch, depending on severity and feasibility. More details can be found in [Helm's release policy](https://helm.sh/docs/topics/release_policy/) . Supported Version Skew ---------------------- When a new version of Helm is released, it is compiled against a particular minor version of Kubernetes. For example, Helm 3.0.0 interacts with Kubernetes using the Kubernetes 1.16.2 client, so it is compatible with Kubernetes 1.16. As of Helm 3, Helm is assumed to be compatible with `n-3` versions of Kubernetes it was compiled against. Due to Kubernetes' changes between minor versions, Helm 2's support policy is slightly stricter, assuming to be compatible with `n-1` versions of Kubernetes. For example, if you are using a version of Helm 3 that was compiled against the Kubernetes 1.17 client APIs, then it should be safe to use with Kubernetes 1.17, 1.16, 1.15, and 1.14. If you are using a version of Helm 2 that was compiled against the Kubernetes 1.16 client APIs, then it should be safe to use with Kubernetes 1.16 and 1.15. It is not recommended to use Helm with a version of Kubernetes that is newer than the version it was compiled against, as Helm does not make any forward compatiblility guarantees. If you choose to use Helm with a version of Kubernetes that it does not support, you are using it at your own risk. Please refer to the table below to determine what version of Helm is compatible with your cluster. | Helm Version | Supported Kubernetes Versions | | --- | --- | | 3.19.x | 1.34.x - 1.31.x | | 3.18.x | 1.33.x - 1.30.x | | 3.17.x | 1.32.x - 1.29.x | | 3.16.x | 1.31.x - 1.28.x | | 3.15.x | 1.30.x - 1.27.x | | 3.14.x | 1.29.x - 1.26.x | | 3.13.x | 1.28.x - 1.25.x | | 3.12.x | 1.27.x - 1.24.x | | 3.11.x | 1.26.x - 1.23.x | | 3.10.x | 1.25.x - 1.22.x | | 3.9.x | 1.24.x - 1.21.x | | 3.8.x | 1.23.x - 1.20.x | | 3.7.x | 1.22.x - 1.19.x | | 3.6.x | 1.21.x - 1.18.x | | 3.5.x | 1.20.x - 1.17.x | | 3.4.x | 1.19.x - 1.16.x | | 3.3.x | 1.18.x - 1.15.x | | 3.2.x | 1.18.x - 1.15.x | | 3.1.x | 1.17.x - 1.14.x | | 3.0.x | 1.16.x - 1.13.x | | 2.16.x | 1.16.x - 1.15.x | | 2.15.x | 1.15.x - 1.14.x | | 2.14.x | 1.14.x - 1.13.x | | 2.13.x | 1.13.x - 1.12.x | | 2.12.x | 1.12.x - 1.11.x | | 2.11.x | 1.11.x - 1.10.x | | 2.10.x | 1.10.x - 1.9.x | | 2.9.x | 1.10.x - 1.9.x | | 2.8.x | 1.9.x - 1.8.x | | 2.7.x | 1.8.x - 1.7.x | | 2.6.x | 1.7.x - 1.6.x | | 2.5.x | 1.6.x - 1.5.x | | 2.4.x | 1.6.x - 1.5.x | | 2.3.x | 1.5.x - 1.4.x | | 2.2.x | 1.5.x - 1.4.x | | 2.1.x | 1.5.x - 1.4.x | | 2.0.x | 1.4.x - 1.3.x | [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Rollback Helm Rollback ============= helm rollback ------------- roll back a release to a previous revision ### Synopsis This command rolls back a release to a previous revision. The first argument of the rollback command is the name of a release, and the second is a revision (version) number. If this argument is omitted or set to 0, it will roll back to the previous release. To see revision numbers, run 'helm history RELEASE'. helm rollback [REVISION] [flags] ### Options --cleanup-on-fail allow deletion of new resources created in this rollback when rollback fails --dry-run simulate a rollback --force force resource update through delete/recreate if needed -h, --help help for rollback --history-max int limit the maximum number of revisions saved per release. Use 0 for no limit (default 10) --no-hooks prevent hooks from running during rollback --recreate-pods performs pods restart for the resource if applicable --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --wait if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout --wait-for-jobs if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Index Helm Repo Index =============== helm repo index --------------- generate an index file given a directory containing packaged charts ### Synopsis Read the current directory, generate an index file based on the charts found and write the result to 'index.yaml' in the current directory. This tool is used for creating an 'index.yaml' file for a chart repository. To set an absolute URL to the charts, use '--url' flag. To merge the generated index with an existing index file, use the '--merge' flag. In this case, the charts found in the current directory will be merged into the index passed in with --merge, with local charts taking priority over existing charts. helm repo index [DIR] [flags] ### Options -h, --help help for index --json output in JSON format --merge string merge the generated index into the given index --url string url of chart repository ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Add Helm Repo Add ============= helm repo add ------------- add a chart repository helm repo add [NAME] [URL] [flags] ### Options --allow-deprecated-repos by default, this command will not allow adding official repos that have been permanently deleted. This disables that behavior --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --force-update replace (overwrite) the repo if it already exists -h, --help help for add --insecure-skip-tls-verify skip tls certificate checks for the repository --key-file string identify HTTPS client using this SSL key file --no-update Ignored. Formerly, it would disabled forced updates. It is deprecated by force-update. --pass-credentials pass credentials to all domains --password string chart repository password --password-stdin read chart repository password from stdin --username string chart repository username ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Permissions management for SQL storage backend Permissions management for SQL storage backend ============================================== This document aims to provide guidance to users for setting up and managing permissions when using the SQL storage backend. Introduction ------------ To handle permissions, Helm leverages the RBAC feature of Kubernetes. When using the SQL storage backend, Kubernetes' roles can't be used to determine whether or not an user can access a given resource. This document shows how to create and manage these permissions. Initialization -------------- The first time the Helm CLI will make connect to your database, the client will make sure that it was previously initialized. If it is not, it will take care of the necessary setup automatically. This initialization requires admin privileges on the public schema, or at least to be able to: * create a table * grant privileges on the public schema After the migration was run against your database, all the other roles can use the client. Grant privileges to a non admin user in PostgreSQL -------------------------------------------------- To manage permissions, the SQL backend driver leverages the [RLS](https://www.postgresql.org/docs/9.5/ddl-rowsecurity.html) (Row Security Level) feature of PostgreSQL. RLS allows all users to be able to read/write from/to the same table, without being able to manipulate the same rows if they are not explicitly allowed to. By default, any role that has not been explicitly granted with the right privileges will always return an empty list when running `helm list` and will not be able to retrieve or modify any resource in the cluster. Let's see how to grant a given role access to specific namespaces: CREATE POLICY ON releases_v1 FOR ALL TO USING (namespace = 'default'); This command will grant the permissions to read and write all resources that meet the `namespace = 'default'` condition to the role `role`. After creating this policy, the user being connected to the database on the behalf of the role `role` will therefore be able to see all the releases living in the `default` namespace when running `helm list`, and to modify and delete them. Privileges can be managed granularly with RLS, and one might be interested in restraining access given the different columns of the table: * key * type * body * name * namespace * version * status * owner * createdAt * modifiedAt [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Install Helm Install ============ helm install ------------ install a chart ### Synopsis This command installs a chart archive. The install argument must be a chart reference, a path to a packaged chart, a path to an unpacked chart directory or a URL. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line, to force a string value use '--set-string'. You can use '--set-file' to set individual values from a file when the value itself is too long for the command line or is dynamically generated. You can also use '--set-json' to set json values (scalars/objects/arrays) from the command line. $ helm install -f myvalues.yaml myredis ./redis or $ helm install --set name=prod myredis ./redis or $ helm install --set-string long_int=1234567890 myredis ./redis or $ helm install --set-file my_script=dothings.sh myredis ./redis or $ helm install --set-json 'master.sidecars=[{"name":"sidecar","image":"myImage","imagePullPolicy":"Always","ports":[{"name":"portname","containerPort":1234}]}]' myredis ./redis You can specify the '--values'/'-f' flag multiple times. The priority will be given to the last (right-most) file specified. For example, if both myvalues.yaml and override.yaml contained a key called 'Test', the value set in override.yaml would take precedence: $ helm install -f myvalues.yaml -f override.yaml myredis ./redis You can specify the '--set' flag multiple times. The priority will be given to the last (right-most) set specified. For example, if both 'bar' and 'newbar' values are set for a key called 'foo', the 'newbar' value would take precedence: $ helm install --set foo=bar --set foo=newbar myredis ./redis Similarly, in the following example 'foo' is set to '\["four"\]': $ helm install --set-json='foo=["one", "two", "three"]' --set-json='foo=["four"]' myredis ./redis And in the following example, 'foo' is set to '{"key1":"value1","key2":"bar"}': $ helm install --set-json='foo={"key1":"value1","key2":"value2"}' --set-json='foo.key2="bar"' myredis ./redis To check the generated manifests of a release without installing the chart, the --debug and --dry-run flags can be combined. The --dry-run flag will output all generated chart manifests, including Secrets which can contain sensitive values. To hide Kubernetes Secrets use the --hide-secret flag. Please carefully consider how and when these flags are used. If --verify is set, the chart MUST have a provenance file, and the provenance file MUST pass all verification steps. There are six different ways you can express the chart you want to install: 1. By chart reference: helm install mymaria example/mariadb 2. By path to a packaged chart: helm install mynginx ./nginx-1.2.3.tgz 3. By path to an unpacked chart directory: helm install mynginx ./nginx 4. By absolute URL: helm install mynginx [https://example.com/charts/nginx-1.2.3.tgz](https://example.com/charts/nginx-1.2.3.tgz) 5. By chart reference and repo url: helm install --repo [https://example.com/charts/](https://example.com/charts/) mynginx nginx 6. By OCI registries: helm install mynginx --version 1.2.3 oci://example.com/charts/nginx CHART REFERENCES A chart reference is a convenient way of referencing a chart in a chart repository. When you use a chart reference with a repo prefix ('example/mariadb'), Helm will look in the local configuration for a chart repository named 'example', and will then look for a chart in that repository whose name is 'mariadb'. It will install the latest stable version of that chart until you specify '--devel' flag to also include development version (alpha, beta, and release candidate releases), or supply a version number with the '--version' flag. To see the list of chart repositories, use 'helm repo list'. To search for charts in a repository, use 'helm search'. helm install [NAME] [CHART] [flags] ### Options --atomic if set, the installation process deletes the installation on failure. The --wait flag will be set automatically if --atomic is used --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --create-namespace create the release namespace if not present --dependency-update update dependencies if they are missing before installing the chart --description string add a custom description --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored --disable-openapi-validation if set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run string[="client"] simulate an install. If --dry-run is set with no option being specified or as '--dry-run=client', it will not attempt cluster connections. Setting '--dry-run=server' allows attempting cluster connections. --enable-dns enable DNS lookups when rendering templates --force force resource updates through a replacement strategy -g, --generate-name generate the name (and omit the NAME parameter) -h, --help help for install --hide-notes if set, do not show notes in install output. Does not affect presence in chart metadata --hide-secret hide Kubernetes Secrets when also using the --dry-run flag --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") -l, --labels stringToString Labels that would be added to release metadata. Should be divided by comma. (default []) --name-template string specify template used to name the release --no-hooks prevent hooks from running during install -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --post-renderer postRendererString the path to an executable to be used for post rendering. If it exists in $PATH, the binary will be used, otherwise it will try to look for the executable at the given path --post-renderer-args postRendererArgsSlice an argument to the post-renderer (can specify multiple) (default []) --render-subchart-notes if set, render subchart notes along with the parent --replace re-use the given name, only if that name is a deleted release which remains in the history. This is unsafe in production --repo string chart repository url where to locate the requested chart --set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray set a literal STRING value on the command line --set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-crds if set, no CRDs will be installed. By default, CRDs are installed if not already present --skip-schema-validation if set, disables JSON schema validation --take-ownership if set, install will ignore the check for helm annotations and take ownership of the existing resources --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --username string chart repository username where to locate the requested chart -f, --values strings specify values in a YAML file or a URL (can specify multiple) --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used --wait if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout --wait-for-jobs if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Repo Update Helm Repo Update ================ helm repo update ---------------- update information of available charts locally from chart repositories ### Synopsis Update gets the latest information about charts from the respective chart repositories. Information is cached locally, where it is used by commands like 'helm search'. You can optionally specify a list of repositories you want to update. $ helm repo update ... To update all the repositories, use 'helm repo update'. helm repo update [REPO1 [REPO2 ...]] [flags] ### Options --fail-on-repo-update-fail update fails if any of the repository updates fail -h, --help help for update ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm repo](https://helm.sh/docs/helm/helm_repo/) - add, list, remove, update, and index chart repositories ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Repo Helm Search Repo ================ helm search repo ---------------- search repositories for a keyword in charts ### Synopsis Search reads through all of the repositories configured on the system, and looks for matches. Search of these repositories uses the metadata stored on the system. It will display the latest stable versions of the charts found. If you specify the --devel flag, the output will include pre-release versions. If you want to search using a version constraint, use --version. Examples: # Search for stable release versions matching the keyword "nginx" $ helm search repo nginx # Search for release versions matching the keyword "nginx", including pre-release versions $ helm search repo nginx --devel # Search for the latest stable release for nginx-ingress with a major version of 1 $ helm search repo nginx-ingress --version ^1.0.0 Repositories are managed with 'helm repo' commands. helm search repo [keyword] [flags] ### Options --devel use development versions (alpha, beta, and release candidate releases), too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored --fail-on-no-result search fails if no results are found -h, --help help for repo --max-col-width uint maximum column width for output table (default 50) -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) -r, --regexp use regular expressions for searching repositories you have added --version string search using semantic versioning constraints on repositories you have added -l, --versions show the long listing, with each version of each chart on its own line, for repositories you have added ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm search](https://helm.sh/docs/helm/helm_search/) - search for a keyword in charts ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Hub Helm Search Hub =============== helm search hub --------------- search for charts in the Artifact Hub or your own hub instance ### Synopsis Search for Helm charts in the Artifact Hub or your own hub instance. Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects, including publicly available distributed charts Helm charts. It is a Cloud Native Computing Foundation sandbox project. You can browse the hub at [https://artifacthub.io/](https://artifacthub.io/) The \[KEYWORD\] argument accepts either a keyword string, or quoted string of rich query options. For rich query options documentation, see [https://artifacthub.github.io/hub/api/?urls.primaryName=Monocular%20compatible%20search%20API#/Monocular/get\_api\_chartsvc\_v1\_charts\_search](https://artifacthub.github.io/hub/api/?urls.primaryName=Monocular%20compatible%20search%20API#/Monocular/get_api_chartsvc_v1_charts_search) Previous versions of Helm used an instance of Monocular as the default 'endpoint', so for backwards compatibility Artifact Hub is compatible with the Monocular search API. Similarly, when setting the 'endpoint' flag, the specified endpoint must also be implement a Monocular compatible search API endpoint. Note that when specifying a Monocular instance as the 'endpoint', rich queries are not supported. For API details, see [https://github.com/helm/monocular](https://github.com/helm/monocular) helm search hub [KEYWORD] [flags] ### Options --endpoint string Hub instance to query for charts (default "https://hub.helm.sh") --fail-on-no-result search fails if no results are found -h, --help help for hub --list-repo-url print charts repository URL --max-col-width uint maximum column width for output table (default 50) -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm search](https://helm.sh/docs/helm/helm_search/) - search for a keyword in charts ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Values Helm Show Values ================ helm show values ---------------- show the chart's values ### Synopsis This command inspects a chart (directory, file, or URL) and displays the contents of the values.yaml file helm show values [CHART] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored -h, --help help for values --insecure-skip-tls-verify skip tls certificate checks for the chart download --jsonpath string supply a JSONPath expression to filter the output --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --repo string chart repository url where to locate the requested chart --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Crds Helm Show Crds ============== helm show crds -------------- show the chart's CRDs ### Synopsis This command inspects a chart (directory, file, or URL) and displays the contents of the CustomResourceDefinition files helm show crds [CHART] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored -h, --help help for crds --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --repo string chart repository url where to locate the requested chart --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Chart Helm Show Chart =============== helm show chart --------------- show the chart's definition ### Synopsis This command inspects a chart (directory, file, or URL) and displays the contents of the Chart.yaml file helm show chart [CHART] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored -h, --help help for chart --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --repo string chart repository url where to locate the requested chart --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Search Helm Search =========== helm search ----------- search for a keyword in charts ### Synopsis Search provides the ability to search for Helm charts in the various places they can be stored including the Artifact Hub and repositories you have added. Use search subcommands to search different locations for charts. ### Options -h, --help help for search ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm search hub](https://helm.sh/docs/helm/helm_search_hub/) - search for charts in the Artifact Hub or your own hub instance * [helm search repo](https://helm.sh/docs/helm/helm_search_repo/) - search repositories for a keyword in charts ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Helm Show ========= helm show --------- show information of a chart ### Synopsis This command consists of multiple subcommands to display information about a chart ### Options -h, --help help for show ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. * [helm show all](https://helm.sh/docs/helm/helm_show_all/) - show all information of the chart * [helm show chart](https://helm.sh/docs/helm/helm_show_chart/) - show the chart's definition * [helm show crds](https://helm.sh/docs/helm/helm_show_crds/) - show the chart's CRDs * [helm show readme](https://helm.sh/docs/helm/helm_show_readme/) - show the chart's README * [helm show values](https://helm.sh/docs/helm/helm_show_values/) - show the chart's values ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show All Helm Show All ============= helm show all ------------- show all information of the chart ### Synopsis This command inspects a chart (directory, file, or URL) and displays all its content (values.yaml, Chart.yaml, README) helm show all [CHART] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored -h, --help help for all --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --repo string chart repository url where to locate the requested chart --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Verify Helm Verify =========== helm verify ----------- verify that a chart at the given path has been signed and is valid ### Synopsis Verify that the given chart has a valid provenance file. Provenance files provide cryptographic verification that a chart has not been tampered with, and was packaged by a trusted provider. This command can be used to verify a local chart. Several other commands provide '--verify' flags that run the same validation. To generate a signed package, use the 'helm package --sign' command. helm verify PATH [flags] ### Options -h, --help help for verify --keyring string keyring containing public keys (default "~/.gnupg/pubring.gpg") ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Uninstall Helm Uninstall ============== helm uninstall -------------- uninstall a release ### Synopsis This command takes a release name and uninstalls the release. It removes all of the resources associated with the last release of the chart as well as the release history, freeing it up for future use. Use the '--dry-run' flag to see which releases will be uninstalled without actually uninstalling them. helm uninstall RELEASE_NAME [...] [flags] ### Options --cascade string Must be "background", "orphan", or "foreground". Selects the deletion cascading strategy for the dependents. Defaults to background. (default "background") --description string add a custom description --dry-run simulate a uninstall -h, --help help for uninstall --ignore-not-found Treat "release not found" as a successful uninstall --keep-history remove all associated resources and mark the release as deleted, but retain the release history --no-hooks prevent hooks from running during uninstallation --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --wait if set, will wait until all the resources are deleted before returning. It will wait for as long as --timeout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Status Helm Status =========== helm status ----------- display the status of the named release ### Synopsis This command shows the status of a named release. The status consists of: * last deployment time * k8s namespace in which the release lives * state of the release (can be: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade or pending-rollback) * revision of the release * description of the release (can be completion message or error message, need to enable --show-desc) * list of resources that this release consists of (need to enable --show-resources) * details on last test suite run, if applicable * additional notes provided by the chart helm status RELEASE_NAME [flags] ### Options -h, --help help for status -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --revision int if set, display the status of the named release with revision --show-desc if set, display the description message of the named release --show-resources if set, display the resources of the named release ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Template Helm Template ============= helm template ------------- locally render templates ### Synopsis Render chart templates locally and display the output. Any values that would normally be looked up or retrieved in-cluster will be faked locally. Additionally, none of the server-side testing of chart validity (e.g. whether an API is supported) is done. helm template [NAME] [CHART] [flags] ### Options -a, --api-versions strings Kubernetes api versions used for Capabilities.APIVersions --atomic if set, the installation process deletes the installation on failure. The --wait flag will be set automatically if --atomic is used --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --create-namespace create the release namespace if not present --dependency-update update dependencies if they are missing before installing the chart --description string add a custom description --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored --disable-openapi-validation if set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run string[="client"] simulate an install. If --dry-run is set with no option being specified or as '--dry-run=client', it will not attempt cluster connections. Setting '--dry-run=server' allows attempting cluster connections. --enable-dns enable DNS lookups when rendering templates --force force resource updates through a replacement strategy -g, --generate-name generate the name (and omit the NAME parameter) -h, --help help for template --hide-notes if set, do not show notes in install output. Does not affect presence in chart metadata --include-crds include CRDs in the templated output --insecure-skip-tls-verify skip tls certificate checks for the chart download --is-upgrade set .Release.IsUpgrade instead of .Release.IsInstall --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --kube-version string Kubernetes version used for Capabilities.KubeVersion -l, --labels stringToString Labels that would be added to release metadata. Should be divided by comma. (default []) --name-template string specify template used to name the release --no-hooks prevent hooks from running during install --output-dir string writes the executed templates to files in output-dir instead of stdout --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --post-renderer postRendererString the path to an executable to be used for post rendering. If it exists in $PATH, the binary will be used, otherwise it will try to look for the executable at the given path --post-renderer-args postRendererArgsSlice an argument to the post-renderer (can specify multiple) (default []) --release-name use release name in the output-dir path. --render-subchart-notes if set, render subchart notes along with the parent --replace re-use the given name, only if that name is a deleted release which remains in the history. This is unsafe in production --repo string chart repository url where to locate the requested chart --set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray set a literal STRING value on the command line --set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) -s, --show-only stringArray only show manifests rendered from the given templates --skip-crds if set, no CRDs will be installed. By default, CRDs are installed if not already present --skip-schema-validation if set, disables JSON schema validation --skip-tests skip tests from templated output --take-ownership if set, install will ignore the check for helm annotations and take ownership of the existing resources --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --username string chart repository username where to locate the requested chart --validate validate your manifests against the Kubernetes cluster you are currently pointing at. This is the same validation performed on an install -f, --values strings specify values in a YAML file or a URL (can specify multiple) --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used --wait if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout --wait-for-jobs if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Docs Welcome ======= Welcome to the [Helm](https://helm.sh/) documentation. Helm is the package manager for Kubernetes, and you can read detailed background information in the [CNCF Helm Project Journey report](https://www.cncf.io/cncf-helm-project-journey/) . How the documentation is organized ================================== Helm has a lot of documentation. A high-level overview of how it’s organized will help you know where to look for certain things: * [Tutorials](https://helm.sh/docs/chart_template_guide/getting_started/) take you by the hand through a series of steps to create your first Helm chart. Start here if you’re new to Helm. * [Topic guides](https://helm.sh/docs/topics/) discuss key topics and concepts at a fairly high level and provide useful background information and explanation. * [Community Guides](https://helm.sh/docs/community/) discuss topics centered around Helm’s community. Start here if you want to learn more about the development process of Helm itself and how you can contribute. * [How-to guides](https://helm.sh/docs/howto/) are recipes. They guide you through the steps involved in addressing key problems and use-cases. They are more advanced than tutorials and assume some knowledge of how Helm works. ### Quicklinks [#### Quickstart Guide\ \ How to install and get started with Helm including instructions for distros, FAQs, and plugins.](https://helm.sh/docs/intro/quickstart) [#### Chart Guide\ \ Practical steps for building Helm charts—how to structure, sign, and sync your charts.](https://helm.sh/docs/topics/charts) [#### Video: Intro to Helm\ \ Watch Matt Farina and Josh Dolitsky present an introduction to Helm at KubeCon 2019.](https://www.youtube.com/watch?v=Zzwq9FmZdsU) [#### Migrating from v2 to v3\ \ Read our blog post on how to migrate from Helm v2 to Helm v3.](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) [#### Helm Security Audit\ \ Helm has been audited and deemed as recommended for public deployment during a third-party security audit funded by the CNCF.](https://helm.sh/blog/2019-11-04-helm-security-audit-results/) [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Upgrade Helm Upgrade ============ helm upgrade ------------ upgrade a release ### Synopsis This command upgrades a release to a new version of a chart. The upgrade arguments must be a release and chart. The chart argument can be either: a chart reference('example/mariadb'), a path to a chart directory, a packaged chart, or a fully qualified URL. For chart references, the latest version will be specified unless the '--version' flag is set. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line, to force string values, use '--set-string'. You can use '--set-file' to set individual values from a file when the value itself is too long for the command line or is dynamically generated. You can also use '--set-json' to set json values (scalars/objects/arrays) from the command line. You can specify the '--values'/'-f' flag multiple times. The priority will be given to the last (right-most) file specified. For example, if both myvalues.yaml and override.yaml contained a key called 'Test', the value set in override.yaml would take precedence: $ helm upgrade -f myvalues.yaml -f override.yaml redis ./redis You can specify the '--set' flag multiple times. The priority will be given to the last (right-most) set specified. For example, if both 'bar' and 'newbar' values are set for a key called 'foo', the 'newbar' value would take precedence: $ helm upgrade --set foo=bar --set foo=newbar redis ./redis You can update the values for an existing release with this command as well via the '--reuse-values' flag. The 'RELEASE' and 'CHART' arguments should be set to the original parameters, and existing values will be merged with any values set via '--values'/'-f' or '--set' flags. Priority is given to new values. $ helm upgrade --reuse-values --set foo=bar --set foo=newbar redis ./redis The --dry-run flag will output all generated chart manifests, including Secrets which can contain sensitive values. To hide Kubernetes Secrets use the --hide-secret flag. Please carefully consider how and when these flags are used. helm upgrade [RELEASE] [CHART] [flags] ### Options --atomic if set, upgrade process rolls back changes made in case of failed upgrade. The --wait flag will be set automatically if --atomic is used --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --cleanup-on-fail allow deletion of new resources created in this upgrade when upgrade fails --create-namespace if --install is set, create the release namespace if not present --dependency-update update dependencies if they are missing before installing the chart --description string add a custom description --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored --disable-openapi-validation if set, the upgrade process will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run string[="client"] simulate an install. If --dry-run is set with no option being specified or as '--dry-run=client', it will not attempt cluster connections. Setting '--dry-run=server' allows attempting cluster connections. --enable-dns enable DNS lookups when rendering templates --force force resource updates through a replacement strategy -h, --help help for upgrade --hide-notes if set, do not show notes in upgrade output. Does not affect presence in chart metadata --hide-secret hide Kubernetes Secrets when also using the --dry-run flag --history-max int limit the maximum number of revisions saved per release. Use 0 for no limit (default 10) --insecure-skip-tls-verify skip tls certificate checks for the chart download -i, --install if a release by this name doesn't already exist, run an install --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") -l, --labels stringToString Labels that would be added to release metadata. Should be separated by comma. Original release labels will be merged with upgrade labels. You can unset label using null. (default []) --no-hooks disable pre/post upgrade hooks -o, --output format prints the output in the specified format. Allowed values: table, json, yaml (default table) --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --post-renderer postRendererString the path to an executable to be used for post rendering. If it exists in $PATH, the binary will be used, otherwise it will try to look for the executable at the given path --post-renderer-args postRendererArgsSlice an argument to the post-renderer (can specify multiple) (default []) --render-subchart-notes if set, render subchart notes along with the parent --repo string chart repository url where to locate the requested chart --reset-then-reuse-values when upgrading, reset the values to the ones built into the chart, apply the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' or '--reuse-values' is specified, this is ignored --reset-values when upgrading, reset the values to the ones built into the chart --reuse-values when upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored --set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray set a literal STRING value on the command line --set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-crds if set, no CRDs will be installed when an upgrade is performed with install flag enabled. By default, CRDs are installed if not already present, when an upgrade is performed with install flag enabled --skip-schema-validation if set, disables JSON schema validation --take-ownership if set, upgrade will ignore the check for helm annotations and take ownership of the existing resources --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --username string chart repository username where to locate the requested chart -f, --values strings specify values in a YAML file or a URL (can specify multiple) --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used --wait if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout --wait-for-jobs if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Show Readme Helm Show Readme ================ helm show readme ---------------- show the chart's README ### Synopsis This command inspects a chart (directory, file, or URL) and displays the contents of the README file helm show readme [CHART] [flags] ### Options --ca-file string verify certificates of HTTPS-enabled servers using this CA bundle --cert-file string identify HTTPS client using this SSL certificate file --devel use development versions, too. Equivalent to version '>0.0.0-0'. If --version is set, this is ignored -h, --help help for readme --insecure-skip-tls-verify skip tls certificate checks for the chart download --key-file string identify HTTPS client using this SSL key file --keyring string location of public keys used for verification (default "~/.gnupg/pubring.gpg") --pass-credentials pass credentials to all domains --password string chart repository password where to locate the requested chart --plain-http use insecure HTTP connections for the chart download --repo string chart repository url where to locate the requested chart --username string chart repository username where to locate the requested chart --verify verify the package before using it --version string specify a version constraint for the chart version to use. This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0). If this is not specified, the latest version is used ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm show](https://helm.sh/docs/helm/helm_show/) - show information of a chart ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Release schedule policy Release schedule policy ======================= For the benefit of its users, Helm defines and announces release dates in advance. This document describes the policy governing Helm's release schedule. Release calendar ---------------- A public calendar showing the upcoming Helm releases can be found [here](https://helm.sh/calendar/release) . Semantic versioning ------------------- Helm versions are expressed as `x.y.z`, where `x` is the major version, `y` is the minor version, and `z` is the patch version, following [Semantic Versioning](https://semver.org/spec/v2.0.0.html) terminology. Patch releases -------------- Patch releases provide users with bug fixes and security fixes. They do not contain new features. A new patch release relating to the latest minor/major release will normally be done once a month on the second Wednesday of each month. A patch release to fix a high priority regression or security issue can be done whenever needed. A patch release will be cancelled for any of the following reasons: * if there is no new content since the previous release * if the patch release date falls within one week before the first release candidate (RC1) of an upcoming minor release * if the patch release date falls within four weeks following a minor release Minor releases -------------- Minor releases contain security and bug fixes as well as new features. They are backwards compatible with respect to the API and the CLI usage. To align with Kubernetes releases, a minor helm release will be done every 4 months (3 releases a year). Extra minor releases can be done if needed but will not affect the timeline of an announced future release, unless the announced release is less than 7 days away. At the same time as a release is published, the date of the next minor release will be announced and posted to Helm's main web page. Major releases -------------- Major releases contain breaking changes. Such releases are rare but are sometimes necessary to allow helm to continue to evolve in important new directions. Major releases can be difficult to plan. With that in mind, a final release date will only be chosen and announced once the first beta version of such a release is available. [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Test Helm Test ========= helm test --------- run tests for a release ### Synopsis The test command runs the tests for a release. The argument this command takes is the name of a deployed release. The tests to be run are defined in the chart that was installed. helm test [RELEASE] [flags] ### Options --filter strings specify tests by attribute (currently "name") using attribute=value syntax or '!attribute=value' to exclude a test (can specify multiple or separate values with commas: name=test1,name=test2) -h, --help help for test --hide-notes if set, do not show notes in test output. Does not affect presence in chart metadata --logs dump the logs from test pods (this runs after all tests are complete, but before any cleanup) --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. --- # Helm | Helm Version Helm Version ============ helm version ------------ print the client version information ### Synopsis Show the version for Helm. This will print a representation the version of Helm. The output will look something like this: version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"} * Version is the semantic version of the release. * GitCommit is the SHA for the commit that this version was built from. * GitTreeState is "clean" if there are no local code changes when this binary was built, and "dirty" if the binary was built from locally modified code. * GoVersion is the version of Go that was used to compile Helm. When using the --template flag the following properties are available to use in the template: * .Version contains the semantic version of Helm * .GitCommit is the git commit * .GitTreeState is the state of the git tree when Helm was built * .GoVersion contains the version of Go that Helm was compiled with For example, --template='Version: {{.Version}}' outputs 'Version: v3.2.1'. helm version [flags] ### Options -h, --help help for version --short print the version number --template string template for version string format ### Options inherited from parent commands --burst-limit int client-side default throttling limit (default 100) --debug enable verbose output --kube-apiserver string the address and the port for the Kubernetes API server --kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups. --kube-as-user string username to impersonate for the operation --kube-ca-file string the certificate authority file for the Kubernetes API server connection --kube-context string name of the kubeconfig context to use --kube-insecure-skip-tls-verify if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure --kube-tls-server-name string server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used --kube-token string bearer token used for authentication --kubeconfig string path to the kubeconfig file -n, --namespace string namespace scope for this request --qps float32 queries per second used when communicating with the Kubernetes API, not including bursting --registry-config string path to the registry config file (default "~/.config/helm/registry/config.json") --repository-cache string path to the directory containing cached repository indexes (default "~/.cache/helm/repository") --repository-config string path to the file containing repository names and URLs (default "~/.config/helm/repositories.yaml") ### SEE ALSO * [helm](https://helm.sh/docs/helm/helm/) - The Helm package manager for Kubernetes. ###### Auto generated by spf13/cobra on 11-Sep-2025 [Helm Project](https://github.com/helm/helm) [Blog](https://helm.sh/blog) [Events](https://www.cncf.io/community/kubecon-cloudnativecon-events/) [Quick Start Guide](https://helm.sh/docs/intro/quickstart/) [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) [Charts](https://artifacthub.io/) [Introduction](https://helm.sh/docs/topics/charts/) [Chart tips & tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) [Developing Charts](https://helm.sh/docs/chart_template_guide/) [Search 800+ Charts](https://artifacthub.io/) [Development](https://github.com/helm/community/blob/main/communication.md) [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) _(slack)_ [Contribution Guide](https://github.com/helm/helm/blob/main/CONTRIBUTING.md) [Maintainers](https://github.com/helm/helm/blob/main/OWNERS) [Weekly Meetings](https://github.com/helm/community/blob/main/communication.md#meetings) [Community](https://github.com/helm/community) [#helm-users](https://kubernetes.slack.com/messages/C0NH30761 "#helm-users on Slack") _(slack)_ [Mailing List](https://lists.cncf.io/g/cncf-helm/topics) [Logos](https://github.com/cncf/artwork/tree/master/projects/helm) & [Art](https://github.com/helm/community/tree/main/art) [Twitter](https://twitter.com/helmpack) [We are a Cloud Native Computing Foundation graduated project.](https://www.cncf.io/ "Cloud Native Computing Foundation") [![We are a Cloud Native Computing Foundation project](https://helm.sh/img/cncf-white.svg)](https://www.cncf.io/ "Cloud Native Computing Foundation") * * * © Helm Authors 2025 | Documentation distributed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0) © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/) page. ---