k8s-pulse/helm-chart/INSTALL.md

4.9 KiB

k8s-pulse Helm Chart

This Helm chart provides a production-ready Kubernetes deployment for k8s-pulse, a Python web application that visualizes cluster metrics and resource usage.

Prerequisites

  • A running Kubernetes cluster (v1.19+ recommended).
  • Helm v3+ installed.
  • (Optional) Metrics Server installed in your cluster for detailed container CPU & memory usage.

Kubeconfig & Secret Setup

To mirror the docker-compose.yml setup where KUBECONFIG=/root/.kube/config is mounted into the container, the Helm chart mounts a Kubernetes Secret containing your kubeconfig file to /root/.kube/config and sets the KUBECONFIG environment variable.

You can configure and set up the kubeconfig secret using one of the following methods:

  1. Create a secret containing your .kube/config file:

    kubectl create secret generic k8s-pulse-kubeconfig --from-file=config=$HOME/.kube/config
    
  2. Install or upgrade the Helm chart specifying the existing secret:

    helm install k8s-pulse ./helm-chart \
      --set kubeconfig.enabled=true \
      --set kubeconfig.secretName=k8s-pulse-kubeconfig
    

Method 2: Create the Secret via Helm using --set-file

You can have Helm create the Secret resource directly from your local kubeconfig file during installation:

helm install k8s-pulse ./helm-chart \
  --set kubeconfig.enabled=true \
  --set kubeconfig.createSecret=true \
  --set-file kubeconfig.content=$HOME/.kube/config

Method 3: Use a custom values.yaml file

Create a custom values file (e.g. my-values.yaml):

kubeconfig:
  enabled: true
  createSecret: true
  secretName: "k8s-pulse-kubeconfig"
  secretKey: "config"
  mountPath: "/root/.kube/config"
  content: |
    apiVersion: v1
    clusters:
    - cluster:
        server: https://127.0.0.1:6443
      name: my-cluster
    ...    

Then install the chart using:

helm install k8s-pulse ./helm-chart -f my-values.yaml

Quick Start

1. Install the Chart

Default installation (uses kubeconfig.enabled=true with secret <release-name>-kubeconfig):

# 1. Create the secret
kubectl create secret generic k8s-pulse-kubeconfig --from-file=config=$HOME/.kube/config

# 2. Install the chart
helm install k8s-pulse ./helm-chart --set kubeconfig.secretName=k8s-pulse-kubeconfig

2. Custom Configuration

You can override default settings by passing a custom values.yaml file or using --set:

helm install k8s-pulse ./helm-chart -f custom-values.yaml

Example: Enable Ingress and change image tag:

helm install k8s-pulse ./helm-chart \
  --set image.tag="1.0.0" \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host="k8s-pulse.example.com"

3. Upgrade the Release

helm upgrade k8s-pulse ./helm-chart

4. Uninstall

helm uninstall k8s-pulse

Configuration Parameters

Parameter Description Default
replicaCount Number of application replicas 1
image.repository Docker image repository k8s-pulse
image.tag Docker image tag latest
image.pullPolicy Image pull policy IfNotPresent
kubeconfig.enabled Enable mounting kubeconfig Secret and KUBECONFIG env var true
kubeconfig.secretName Name of existing Secret containing kubeconfig file "" (defaults to <release-fullname>-kubeconfig)
kubeconfig.createSecret Create Secret resource via Helm from kubeconfig.content false
kubeconfig.content Raw kubeconfig content when createSecret is true ""
kubeconfig.secretKey Secret data key containing kubeconfig file content "config"
kubeconfig.mountPath Container path to mount kubeconfig file and set KUBECONFIG env "/root/.kube/config"
service.type Kubernetes service type ClusterIP
service.port Service port exposed 80
service.targetPort Container application port 5000
rbac.create Create ClusterRole & ClusterRoleBinding for K8s API access true
serviceAccount.create Create ServiceAccount for the deployment true
serviceAccount.name Explicit ServiceAccount name ""
ingress.enabled Enable Ingress resource false
resources Pod CPU/Memory resource limits & requests { limits: { cpu: 200m, memory: 256Mi }, requests: { cpu: 100m, memory: 128Mi } }
persistence.enabled Enable optional PersistentVolumeClaim false

RBAC Requirements

k8s-pulse requires read access to cluster nodes, pods, and metrics.k8s.io custom objects. By default, rbac.create: true creates a ClusterRole and ClusterRoleBinding bound to the pod's ServiceAccount.

Verification

Check the deployment status:

kubectl get pods -l app.kubernetes.io/name=k8s-pulse
kubectl get svc -l app.kubernetes.io/name=k8s-pulse