![]()
Helm is a package manager for Kubernetes that simplifies the deployment and management of applications. It uses Helm Charts to define, install, and upgrade Kubernetes applications. Below is a step-by-step guide to deploying a Java application using Helm Charts.
1. Helm Overview
Helm helps you manage Kubernetes applications through Charts, which are collections of files that describe a related set of Kubernetes resources.
Key Concepts:
- Chart: A package of pre-configured Kubernetes resources.
- Release: An instance of a Chart running in a Kubernetes cluster.
- Repository: A place where Charts are stored and shared.
2. Prerequisites
- A Kubernetes cluster (e.g., Minikube, GKE, EKS).
- Helm installed (
helmCLI). - A Dockerized Java application.
- kubectl configured to interact with your cluster.
3. Install Helm
If you haven’t installed Helm, follow these steps:
Install Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Verify Installation:
helm version
4. Create a Helm Chart
Generate a Helm Chart for your Java application.
Step 1: Create a Chart
Run the following command to create a new Chart:
helm create my-java-app
This will create a directory structure like this:
my-java-app/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl
│ └── NOTES.txt
└── .helmignore
Step 2: Customize the Chart
Edit the generated files to suit your Java application.
Chart.yaml: Metadata about your Chart.
apiVersion: v2
name: my-java-app
description: A Helm chart for deploying a Java application
version: 0.1.0
appVersion: "1.0"
values.yaml: Default configuration values.
replicaCount: 1
image:
repository: my-dockerhub-username/my-java-app
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8080
ingress:
enabled: false
templates/deployment.yaml: Define the Kubernetes Deployment.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-java-app.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "my-java-app.name" . }}
template:
metadata:
labels:
app: {{ include "my-java-app.name" . }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 8080
templates/service.yaml: Define the Kubernetes Service.
apiVersion: v1
kind: Service
metadata:
name: {{ include "my-java-app.fullname" . }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 8080
selector:
app: {{ include "my-java-app.name" . }}
5. Package and Deploy the Chart
Step 1: Package the Chart
Package the Chart into a .tgz file:
helm package my-java-app
Step 2: Install the Chart
Install the Chart into your Kubernetes cluster:
helm install my-java-app ./my-java-app-0.1.0.tgz
6. Verify the Deployment
Check the status of your deployment:
kubectl get pods
kubectl get services
7. Upgrade and Manage the Chart
Upgrade the Chart:
If you make changes to your Chart, upgrade the release:
helm upgrade my-java-app ./my-java-app
Uninstall the Chart:
To uninstall the release:
helm uninstall my-java-app
8. Example Project Structure
my-java-app/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl
│ └── NOTES.txt
└── .helmignore
9. Best Practices
- Parameterize Values: Use
values.yamlto parameterize configuration. - Use Helm Secrets: Store sensitive data securely using Helm Secrets.
- Version Control: Store your Helm Charts in version control (e.g., Git).
- Test Locally: Use tools like Minikube or Kind to test your Charts locally.
By following these steps, you can deploy and manage your Java applications on Kubernetes using Helm Charts, simplifying the deployment process and ensuring consistency across environments.
