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.