DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Low-Code Development: Leverage low and no code to streamline your workflow so that you can focus on higher priorities.

DZone Security Research: Tell us your top security strategies in 2024, influence our research, and enter for a chance to win $!

Launch your software development career: Dive head first into the SDLC and learn how to build high-quality software and teams.

Open Source Migration Practices and Patterns: Explore key traits of migrating open-source software and its impact on software development.

Related

  • Mastering Daily Kubernetes Operations: A Guide To Useful kubectl Commands for Software Engineers
  • Establishing a Highly Available Kubernetes Cluster on AWS With Kops
  • Advanced Guide to Helm Charts for Package Management in Kubernetes
  • Install Anypoint Flex Gateway on the Kubernetes as an Ingress Controller in Connected Mode - Part 3

Trending

  • How To Perform JSON Schema Validation in API Testing Using Rest-Assured Java
  • The Rise of Kubernetes: Reshaping the Future of Application Development
  • The Cutting Edge of Web Application Development: What To Expect in 2024
  • AWS CDK: Infrastructure as Abstract Data Types
  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. Automate Your Kubernetes Deployments With Helm

Automate Your Kubernetes Deployments With Helm

As a result, applications have shifted to a microservices architecture. Clouds or Kubernetes now manage the deployment platforms.

By 
Aditya Bhuyan user avatar
Aditya Bhuyan
·
Nov. 25, 22 · Tutorial
Like (6)
Save
Tweet
Share
123.0K Views

Join the DZone community and get the full member experience.

Join For Free

Why We Need Automated Deployments

Over the last decade, there has been a paradigm shift in the way applications are written, deployed, and managed. Businesses have adopted cloud-native as their strategy for dealing with applications. As a result, applications have shifted to a microservices architecture. The deployment platforms are now managed by clouds or Kubernetes.

When applications are written in a microservices way, a single application is broken into many small applications. Each one of these small applications is fully independent. They might have their own DB, cache server, messaging queues, and any such enterprise infrastructure. 

With such changes, the load on an operations engineer increases manifold. The apps may be granular, but he must deploy and manage numerous ones as opposed to just one. Automating the task is the most effective technique to make it easier. If you decide to deploy your applications using Kubernetes, there will be more justifications for doing so. For each application that is to be deployed in Kubernetes, you need to write many manifest files. Again, each application contains numerous deployable components, such as a database, an API, a front end, a database access layer, and many others. For each component, there would be one or more manifest files. So for one microservice suite, one might end up deploying hundreds of Kubernetes manifest files. Each of these files has to be deployed in a particular sequence without fail. Otherwise, the deployment may become corrupt or fail. 

So, what is needed is a tool that could do the following:

  • Understand the microservices and manifest files.
  • Understand the order of pushing the files to Kubernetes.
  • Think of the complete microservices suite as one application.
  • Rollback and Upgrade the application as a single unit with almost ease.
  • Do it in a secure way.

There are multiple tools available for accomplishing this. The most popular among them is Helm.

What Is Helm?

Helm is an open-source software that helps in installing, upgrading, rolling back, and uninstalling Kubernetes workloads in a Kubernetes cluster. Helm does it almost effortlessly. It is also called the package manager for Kubernetes. With Helm, complex Kubernetes deployments could be installed with utmost ease. A very large microservices suite could be installed, uninstalled, and managed with just a single command. Helm also supports running smoke tests before or after installation.

Just notice that the term "installation" is being used in place of "deployment." That is because Helm sees the deployments as applications being installed on a platform, just like any other package manager installs packages on a platform. For example, yum, and apt are popular package managers for Linux distributions, and they install packages.

To use Helm, we need to store our Kubernetes manifest files in a specific folder structure. This folder structure is treated as one package. Helm packages are called charts. Charts could be nested to help install multiple applications using a single folder structure. For convenience in managing the chart as well as several versions of the same chart, the folders may also be archived and stored in a repository.

Most businesses are now releasing their Kubernetes artifacts in the form of charts and uploading them to public CNCF artifact repositories. The charts could be stored locally in a file folder, in a local private chart repository, or in a public chart repository. Helm is capable of reading the charts stored on any of the three and is capable of pulling and installing them. 

How Helm Works

We should have some idea of how helm works. Before that, we will know a little about helm architecture and components. Then it will be easier to know how helm works.

Architecture

Helm Architecture Diagram

Helm contains three key concepts with which we must become familiar.

Chart 

As we know, a chart is a package that contains all necessary Kubernetes artifacts and a few Helm-specific files in a certain folder structure. All these files are necessary to install a Kubernetes application.

Config 

The config consists of one or more yaml files and contains necessary configuration information for deploying a Kubernetes application. These configurations are merged into the chart during helm operations.

Release

A release is called the running instance of a chart. The chart is merged with the config, and that successfully installs an application as a release. One chart can have multiple releases.

Components

Helm, up to version two, worked with a client-server model. However, with the most recent version, Helm 3, Helm works with a client + library model. Helm is written in the GO language. When we install Helm, we are installing both the Helm library and the client.

Helm Client

Helm client is the command line interface to work with the Kubernetes cluster. It reads the Rathercluster information from the ~/.kube/.config file and always points to the current cluster. Any operation the user has to invoke needs to be pushed through the Helm client.

The Helm client is responsible for local chart development, managing chart repositories, managing releases, interacting with the Helm library, and installing, upgrading, rolling back, and uninstalling applications.

Helm Library

The Helm library is the actual Helm engine. It stores the logic for all Helm operations invoked through the Helm client. As previously stated, the logic is written in GO. It interacts with the Kubernetes API server to invoke Helm operations. It uses REST+JSON for its interactions with the Kubernetes API server. It doesn’t use its own database. Rather, it stores all configuration information in Kubernetes ETCD. 

When Helm Client issues a command, the library integrates the Kubernetes artifacts and configuration information and generates the final manifest files to be sent as a POST message to the KUBE API server. 

Popular Helm Commands

Here we will list the most commonly used and powerful Helm commands. These commands are used by a Helm operator on an everyday basis.

  • helm completion: Generate autocompletion scripts for the specified shell.

  • helm create: Create a new chart with the given name.

  • helm dependency: Manage a chart's dependencies.

  • helm env: Helm client environment information.

  • helm get: Download extended information of a named release.

  • helm history: Fetch release history.

  • helm install: Install a chart.

  • helm lint: Examine a chart for possible issues.

  • helm list: List releases.

  • helm package: Package a chart directory into a chart archive.

  • helm plugin: Install, list, or uninstall Helm plugins.

  • helm pull: Download a chart from a repository and (optionally) unpack it in local directory.

  • helm push: Push a chart to the remote.

  • helm registry:  Login to or log out from a registry.

  • helm repo: Add, list, remove, update, and index chart repositories.

  • helm rollback: Roll back a release to a previous revision.

  • helm search: Search for a keyword in charts.

  • helm show: Show information on a chart.

  • helm status: Display the status of the named release.

  • helm template: Locally render templates.

  • helm test: Run tests for a release.

  • helm uninstall: Uninstall a release from.

  • helm upgrade: Upgrade a release.

  • helm verify: Verify that a chart at the given path has been signed and is valid.

  • helm version: Print the client version information.

All the above commands are extracted from the Helm documentation. To know more about the commands and other parameters, please click on the commands, and the hyperlink will land you on the specific pages telling you more about the commands.

Basic Helm Tutorials

In this section, we will look at the use case of deploying a Kubernetes application in a Kubernetes cluster. It will demonstrate how to retrieve a chart from a repository and deploy it on your cluster. We will also uninstall the application.

Prerequisites

For this tutorial, we are assuming the user has basic knowledge of Kubernetes and Linux commands. We also assume that you have access to a Kubernetes cluster. If not, create one using Minikube or use Katakoda. For the tutorial, I am using Katakoda.

Steps

Install Helm

Helm could be installed very easily. All the steps are mentioned on the Helm documentation page. There are separate sections for different operating systems. Choose the section according to the OS you are using. Once Helm is installed successfully, test the version and proceed. 

Create a Helm Local Chart

We will create a basic Helm chart using the “helm create” command. This command will create a fully functional Helm chart with all the necessary files and an appropriate folder structure. You will have a visual representation of a Helm chart. This chart will try to deploy an nginx application to the cluster with all required Kubernetes API objects like a deployment, service, configmap, etc. We will not install and then remove the chart. 

Use the following two commands:

1. helm create nginx-app

2. tree nginx-app

 

You will be able to see a new folder called "nginx-app" created with a few files and sub-folders.

You will be able to see a new folder called "nginx-app" created with a few files and sub-folders. Open and read the files like Chart.yaml, values.yaml, or deployment.yaml. Describing each file is beyond the scope of this article. Finally, delete the chart by executing the following command.

rm -rf nginx-app

Deploy a Helm Chart From Remote Repository

In this section, we will connect our Helm command-line client to a remote chart repository and pull a chart from the repository to install on our cluster. I will be using Bitnami as my remote chart repository. From the Bitnami repo, I will search for and install MySQL. Use the following commands:

helm repo add bitnami 

helm repo list 

Now that the repo has been added, we will use the following commands to search for MySQL and install the chart.Now that the repo has been added, we will use the following commands to search for MySQL and install the chart.


helm search repo bitnami/mysql

helm install mysql bitnami/mysql

Copy the output of the last command into a file that has instructions on how to connect to the MySQL container, as shown in the below image.

Copy the output of the last command into a file that has instructions on how to connect to the MySQL container.


Verify that the release is successful using the below commands.

helm list 

kubectl get all 


The kubectl command will give you the list of API objects the release has created.

The kubectl command will give you the list of API objects the release has created.

Uninstall the Chart

Now uninstall the release by using the command “helm uninstall mysql.” This will remove the release, leaving no trace of it. Use “kubectl get all” to check if any other item was left behind by the release. 

Conclusion

So, it was a short tutorial where we learned what Helm is and how we can install, create, and uninstall Helm charts. Precisely, Helm is the Kubernetes package manager, which constructs packages called charts and installs, updates, and rollbacks and uninstalls them using the Helm command line. You can try more using the Helm documentation.

Chart Kubernetes Command (computing)

Opinions expressed by DZone contributors are their own.

Related

  • Mastering Daily Kubernetes Operations: A Guide To Useful kubectl Commands for Software Engineers
  • Establishing a Highly Available Kubernetes Cluster on AWS With Kops
  • Advanced Guide to Helm Charts for Package Management in Kubernetes
  • Install Anypoint Flex Gateway on the Kubernetes as an Ingress Controller in Connected Mode - Part 3

Partner Resources


Comments

ABOUT US

  • About DZone
  • Send feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: