github.com/umeshredd/helm@v3.0.0-alpha.1+incompatible/docs/architecture.md (about) 1 # The Kubernetes Helm Architecture 2 3 This document describes the Helm architecture at a high level. 4 5 ## The Purpose of Helm 6 7 Helm is a tool for managing Kubernetes packages called _charts_. Helm 8 can do the following: 9 10 - Create new charts from scratch 11 - Package charts into chart archive (tgz) files 12 - Interact with chart repositories where charts are stored 13 - Install and uninstall charts into an existing Kubernetes cluster 14 - Manage the release cycle of charts that have been installed with Helm 15 16 For Helm, there are three important concepts: 17 18 1. The _chart_ is a bundle of information necessary to create an 19 instance of a Kubernetes application. 20 2. The _config_ contains configuration information that can be merged 21 into a packaged chart to create a releasable object. 22 3. A _release_ is a running instance of a _chart_, combined with a 23 specific _config_. 24 25 ## Components 26 27 Helm is an executable which is implemented into two distinct parts: 28 29 **The Helm Client** is a command-line client for end users. The client 30 is responsible for the following: 31 32 - Local chart development 33 - Managing repositories 34 - Managing releases 35 - Interfacing with the Helm library 36 - Sending charts to be installed 37 - Requesting upgrading or uninstalling of existing releases 38 39 **The Helm Library** provides the logic for executing all Helm operations. 40 It interfaces with the Kubernetes API server and provides the following capability: 41 42 - Combining a chart and configuration to build a release 43 - Installing charts into Kubernetes, and providing the subsequent release object 44 - Upgrading and uninstalling charts by interacting with Kubernetes 45 46 The standalone Helm library encapsulates the Helm logic so that it can be leveraged by different clients. 47 48 ## Implementation 49 50 The Helm client and library is written in the Go programming language. 51 52 The library uses the Kubernetes client library to communicate with Kubernetes. Currently, 53 that library uses REST+JSON. It stores information in Secrets located inside of Kubernetes. 54 It does not need its own database. 55 56 Configuration files are, when possible, written in YAML.