github.com/koderover/helm@v2.17.0+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 has two major components: 28 29 **The Helm Client** is a command-line client for end users. The client 30 is responsible for the following domains: 31 32 - Local chart development 33 - Managing repositories 34 - Interacting with the Tiller server 35 - Sending charts to be installed 36 - Asking for information about releases 37 - Requesting upgrading or uninstalling of existing releases 38 39 **The Tiller Server** is an in-cluster server that interacts with the 40 Helm client, and interfaces with the Kubernetes API server. The server 41 is responsible for the following: 42 43 - Listening for incoming requests from the Helm client 44 - Combining a chart and configuration to build a release 45 - Installing charts into Kubernetes, and then tracking the subsequent 46 release 47 - Upgrading and uninstalling charts by interacting with Kubernetes 48 49 In a nutshell, the client is responsible for managing charts, and the 50 server is responsible for managing releases. 51 52 ## Implementation 53 54 The Helm client is written in the Go programming language, and uses the 55 gRPC protocol suite to interact with the Tiller server. 56 57 The Tiller server is also written in Go. It provides a gRPC server to 58 connect with the client, and it uses the Kubernetes client library to 59 communicate with Kubernetes. Currently, that library uses REST+JSON. 60 61 The Tiller server stores information in ConfigMaps located inside of 62 Kubernetes. It does not need its own database. 63 64 Configuration files are, when possible, written in YAML.