In the previous blog, we discussed the challenges of deploying and managing applications on Kubernetes using raw manifests and Kustomize. We also introduced Helm as a powerful tool to simplify application deployment through templating, packaging, versioning, and dependency management. In this blog, we’ll walk you through setting up your environment for Helm, and guide you through building your very first Helm chart.
In this blog, we’ll explore:
- Installing Kubernetes with Kind (Kubernetes in Docker).
- Installing kubectl (Kubernetes command-line tool).
- Installing Helm.
- Setting up your first Kubernetes cluster and deploying your first Helm chart.
Prerequisites
Before diving into Helm, you’ll need a few tools installed and configured:
- Docker: Since we’re using Kind (Kubernetes in Docker), Docker is required.
- Kubectl: Kubernetes command-line tool for interacting with your cluster.
- Helm: Helm command-line tool to manage Helm charts.
Step 1: Install Docker
If Docker is not already installed on your machine, download and install Docker from docker.com.
To verify Docker is installed properly:
docker --version
Step 2: Install Kind (Kubernetes in Docker)
Kind is a tool for running Kubernetes clusters in Docker containers, ideal for testing Kubernetes applications locally.
To install Kind:
On macOS (using Homebrew):
brew install kind
On Linux (using curl):
curl -Lo /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/v0.17.0/kind-linux-amd64 chmod +x /usr/local/bin/kind
Verify the installation:
kind --version
Step 3: Install kubectl
kubectl is the command-line tool used to interact with your Kubernetes cluster.
To install kubectl:
On macOS (using Homebrew):
brew install kubectl
On Linux (using curl):
curl -LO "https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl" chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
Verify the installation:
kubectl version --client
Step 4: Install Helm
Helm is the Kubernetes package manager that simplifies deployment and management of applications.
To install Helm:
On macOS (using Homebrew):
brew install helm
On Linux (using curl):
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Verify the installation:
helm version
Step 5: Create a Kubernetes Cluster with Kind
Now that you have Kind installed, let’s create a local Kubernetes cluster.
Create a Kubernetes Cluster with Kind:
Create a new cluster:
kind create cluster --name my-first-cluster
Check the cluster status: After the cluster is created, you can check the status by running:
kubectl cluster-info --context kind-my-first-cluster
You should now have a running Kubernetes cluster locally, and kubectl will be configured to interact with it.
Step 6: Initialize Helm in Your Cluster
To start using Helm with your Kind cluster, you need to initialize Helm's default configurations and repositories.
Initialize Helm:
helm repo add stable https://charts.helm.sh/stable helm repo update
This will add the default Helm repository containing a collection of publicly available charts.
Verify Helm Initialization:
helm search repo nginx
This command should return a list of available charts from the stable repository, confirming that Helm is set up correctly.
I'll help you convert the content into markdown format. Here's the markdown version:
Step 7: Create Your First Helm Chart
With Helm set up, it’s time to create your first chart!
Create a new Helm chart:
Navigate to the directory where you want to store your Helm charts and run:
helm create my-first-chart
This will generate a folder structure with the following contents:
my-first-chart/
├── Chart.yaml # Metadata for the chart
├── values.yaml # Default configuration values
├── charts/ # Dependencies (if any)
├── templates/ # Kubernetes manifest templates
│ ├── deployment.yaml
│ ├── service.yaml
│ └── ...
└── README.md # Documentation
Chart.yaml
: Metadata about the chart (name, version, description).
values.yaml
: Default configuration values for your chart.
templates/
: A folder containing YAML files for the Kubernetes resources (e.g., Deployment, Service).
Inspect the generated files: In my-first-chart/
, you’ll see templates for the most common Kubernetes resources, such as a Deployment and Service.
Chart.yaml
: Defines basic chart metadata.
values.yaml
: Contains default values, such as the number of replicas and the container image.
templates/deployment.yaml
: Defines the Deployment resource, with dynamic values pulled from values.yaml.
templates/service.yaml
: Defines the Service resource for exposing your application.
Here’s an example snippet from templates/deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
Edit the values.yaml
: Modify values.yaml to adjust configuration parameters like the container image, replicas, etc.
Example:
replicaCount: 2
image:
repository: nginx
tag: stable
Install the Helm Chart: Now, deploy the chart to your cluster using the following command:
helm install my-app ./my-first-chart
Verify the Deployment: To ensure that your deployment was successful, check the status of your pods:
kubectl get pods
You should see your my-app pod running.
Checkout my article on adavanced concepts of helm chart: https://dev.to/manjunath_kotabal_3d1e736/advanced-concepts-in-helm-templates-1oo6
Top comments (0)