Skip to content

Helm Chart Deployment

EasyLab is available as a Helm chart published on Docker Hub as an OCI artifact.

Prerequisites

  • Kubernetes cluster (v1.24+)
  • Helm 3.8+ (OCI support required)

Install

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  --set secrets.adminPassword="your-secure-password"

Versions follow SemVer without the v prefix.

Available versions

Check available versions on Docker Hub or with:

helm show chart oci://registry-1.docker.io/yodamad/easylab-helm --version 0.8.0

Configuration

All configuration is done through values.yaml overrides. You can either pass --set flags or provide a custom values file:

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  -f my-values.yaml

Key values

Parameter Description Default
namespace.create Create a dedicated namespace true
namespace.name Namespace name easylab
image.repository Docker image repository docker.io/yodamad/easylab
image.tag Docker image tag (defaults to chart appVersion) ""
image.pullPolicy Image pull policy Always
replicaCount Number of replicas 1
config.port Application port "8080"
config.workDir Job workspace directory "/app/jobs"
config.dataDir Data persistence directory "/app/data"
secrets.create Create a Kubernetes secret true
secrets.adminPassword Admin login password ""
secrets.studentPassword Student login password ""
secrets.ovh.applicationKey OVH application key ""
secrets.ovh.applicationSecret OVH application secret ""
secrets.ovh.consumerKey OVH consumer key ""
secrets.ovh.serviceName OVH service name ""
secrets.ovh.endpoint OVH API endpoint "ovh-eu"
persistence.jobs.size PVC size for jobs storage 1Gi
persistence.jobs.storageClass Storage class for jobs PVC ""
persistence.data.size PVC size for data storage 200Mi
persistence.data.storageClass Storage class for data PVC ""
service.type Kubernetes service type ClusterIP
service.port Service port 80
service.annotations Service annotations {}
ingress.enabled Enable ingress false
ingress.className Ingress class name traefik
ingress.annotations Ingress annotations {}
ingress.host Ingress hostname easylab.example.com
ingress.tls.enabled Enable TLS false
ingress.tls.secretName TLS secret name easylab-tls
resources.requests.memory Memory request 1024Mi
resources.requests.cpu CPU request 500m
resources.limits.memory Memory limit 4096Mi
resources.limits.cpu CPU limit 3000m

Examples

Minimal install

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  --set secrets.adminPassword="SuperAdmin"

With ingress and TLS

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  --set secrets.adminPassword="SuperAdmin" \
  --set ingress.enabled=true \
  --set ingress.host="easylab.example.com" \
  --set ingress.tls.enabled=true \
  --set ingress.className=nginx \
  --set ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt

With OVH credentials

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  --set secrets.adminPassword="SuperAdmin" \
  --set secrets.ovh.applicationKey="your-key" \
  --set secrets.ovh.applicationSecret="your-secret" \
  --set secrets.ovh.consumerKey="your-consumer-key" \
  --set secrets.ovh.serviceName="your-service-name"

Using a custom values file

Create a my-values.yaml:

namespace:
  name: my-lab

secrets:
  adminPassword: "SuperAdmin"
  studentPassword: "StudentPass"
  ovh:
    applicationKey: "your-key"
    applicationSecret: "your-secret"
    consumerKey: "your-consumer-key"
    serviceName: "your-service-name"

ingress:
  enabled: true
  host: easylab.mycompany.com
  tls:
    enabled: true

persistence:
  jobs:
    size: 5Gi
    storageClass: longhorn
  data:
    size: 1Gi
    storageClass: longhorn

Then install:

helm install easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  -f my-values.yaml

Upgrade

helm upgrade easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  -f my-values.yaml

Uninstall

helm uninstall easylab

PersistentVolumeClaims are not deleted by helm uninstall

To fully clean up, delete the PVCs manually:

kubectl delete pvc -n easylab -l app.kubernetes.io/name=easylab

Generate raw Kubernetes manifests

If you prefer deploying with plain kubectl instead of Helm, you can use helm template to render the chart into standard Kubernetes YAML manifests.

Render to stdout

helm template easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  --set secrets.adminPassword="SuperAdmin" \
  > easylab-manifests.yaml

Render with custom values

helm template easylab oci://registry-1.docker.io/yodamad/easylab-helm \
  --version 0.8.0 \
  -f my-values.yaml \
  > easylab-manifests.yaml

Apply with kubectl

kubectl apply -f easylab-manifests.yaml

All Helm values work with helm template

The same --set flags and -f values.yaml files used with helm install work identically with helm template. The only difference is that the output goes to a file instead of being applied to the cluster.