Thursday, January 11, 2024

Deploying a Simple Web Application with Helm

 Kubernetes package management with Helm is a powerful way to manage Kubernetes applications. Helm helps you define, install, and upgrade even the most complex Kubernetes applications using Helm charts. Here’s a comprehensive example to illustrate how you can use Helm for package management.

Example: Deploying a Simple Web Application with Helm

1. Install Helm

Before you begin, ensure you have Helm installed. You can install Helm using the following command:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Verify the installation:


helm version

2. Create a Helm Chart

To create a new Helm chart for your application, use the following command:


helm create my-web-app

This command creates a new directory named my-web-app with a basic Helm chart structure:


my-web-app/ ├── .helmignore ├── Chart.yaml ├── values.yaml ├── charts/ ├── templates/ │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ └── _helpers.tpl └── templates/tests/

3. Customize the Chart

Edit the Chart.yaml file to define your chart’s metadata:


apiVersion: v2 name: my-web-app description: A Helm chart for deploying a simple web application version: 0.1.0 appVersion: "1.0"

Update the values.yaml file to configure default values for your application:


replicaCount: 1 image: repository: nginx pullPolicy: IfNotPresent tag: "latest" service: type: ClusterIP port: 80 ingress: enabled: false name: "" annotations: {} path: / hosts: - host: chart-example.local paths: [] tls: []

Edit templates/deployment.yaml to define your application’s deployment:


apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "my-web-app.fullname" . }} labels: app: {{ include "my-web-app.name" . }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ include "my-web-app.name" . }} template: metadata: labels: app: {{ include "my-web-app.name" . }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 80

Edit templates/service.yaml to define your service:


apiVersion: v1 kind: Service metadata: name: {{ include "my-web-app.fullname" . }} labels: app: {{ include "my-web-app.name" . }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http selector: app: {{ include "my-web-app.name" . }}

4. Package the Chart

To package your Helm chart into a .tgz file, use the following command:


helm package my-web-app

This creates a my-web-app-0.1.0.tgz file that you can distribute or upload to a Helm repository.

5. Install the Chart

To install your chart into a Kubernetes cluster, use the following command:


helm install my-web-app ./my-web-app-0.1.0.tgz

To specify custom values during installation, use:


helm install my-web-app ./my-web-app-0.1.0.tgz --values custom-values.yaml

6. Upgrade the Chart

To upgrade your release with new chart changes, use:


helm upgrade my-web-app ./my-web-app-0.1.0.tgz

7. Uninstall the Chart

To remove the deployed release, use:


helm uninstall my-web-app

8. Helm Repositories

You can also use Helm repositories to manage and share charts. To add a Helm repository:


helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update

To search for charts in the repository:


helm search repo bitnami

To install a chart from a repository:


helm install my-web-app bitnami/nginx

Summary

  • Helm Charts are used to define, install, and upgrade Kubernetes applications.
  • Helm allows you to package, configure, and deploy applications with a single command.
  • Charts consist of templates and values to customize the Kubernetes manifests for your application.

By following these steps, you can effectively manage Kubernetes applications using Helm, making it easier to deploy, update, and maintain complex applications in a Kubernetes environment.

No comments:

Post a Comment