Skip to main content

Install Helm charts on Cloider Kubernetes

Helm is the package manager for Kubernetes: a chart bundles all the manifests an application needs, and helm install deploys it with your settings in one command. Helm works on Cloider clusters exactly as on any Kubernetes cluster, and it is already installed in every cluster's browser terminal and cloider cluster exec. This page shows how to install, configure, upgrade and remove charts, and what to adjust in charts so their services are reachable on Cloider.

Before you begin​

  • A cluster in the Ready status. See Create a cluster.
  • Helm, in one of these places:
    • the cluster's browser terminal or cloider cluster exec, where helm is preinstalled and connected to the cluster,
    • your computer, with Helm 3 installed and the cluster's kubeconfig set up as in Connect with kubectl,
    • Terraform's helm provider.

Install Helm locally if you want it:

brew install helm

Helm in two minutes​

TermMeaning
ChartA package of Kubernetes manifest templates, for example grafana/grafana
RepositoryA place charts are downloaded from, added with helm repo add. Charts can also come from OCI registries (oci://...)
ValuesThe settings of a chart, given with --set key=value or a values.yaml file (-f values.yaml)
ReleaseOne installed copy of a chart in a namespace, with a name you choose. You can install the same chart several times under different names

The commands you use most:

helm repo add <name> <url> # add a chart repository
helm search repo <keyword> # find charts
helm show values <chart> # see every setting a chart accepts
helm upgrade --install <release> <chart> -n <namespace> --create-namespace -f values.yaml
helm list -A # installed releases
helm history <release> -n <namespace>
helm rollback <release> <revision> -n <namespace>
helm uninstall <release> -n <namespace>

helm upgrade --install installs a release if it doesn't exist and upgrades it if it does, so the same command works for the first deploy and every update.

Install your first chart​

This installs podinfo, a small demo web app, into the demo namespace.

  1. Open Kubernetes in the sidebar and click the cluster's name to open its terminal.
  2. Run:
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm upgrade --install podinfo podinfo/podinfo -n demo --create-namespace --set replicaCount=2
Output
"podinfo" has been added to your repositories
Release "podinfo" does not exist. Installing it now.
NAME: podinfo
LAST DEPLOYED: Mon Oct 19 10:12:31 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 1

The terminal's files, including Helm's repository list, are temporary. After the terminal restarts, run helm repo add again before installing from that repository.

Check the release and its pods:

helm list -n demo
kubectl get pods -n demo
Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
podinfo demo 1 2026-10-19 10:12:31.511 +0000 UTC deployed podinfo-6.7.0 6.7.0

NAME READY STATUS RESTARTS AGE
podinfo-7f9c6b8d9b-k2l8m 1/1 Running 0 30s
podinfo-7f9c6b8d9b-x4w9q 1/1 Running 0 30s

Configure a chart with a values file​

Most charts take dozens of settings. List them with helm show values, copy what you want to change into your own file, and keep that file in git:

helm show values podinfo/podinfo > podinfo-defaults.yaml
values.yaml
replicaCount: 2

ui:
message: "Hello from Cloider"

resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

# Cloider doesn't serve Ingress objects; route a domain to the Service with a target instead
ingress:
enabled: false
helm upgrade --install podinfo podinfo/podinfo -n demo --create-namespace -f values.yaml

Three settings deserve a look in every chart you install on Cloider:

  1. Resources. Each running container is billed on the larger of its request and its use. Charts often ship with no requests (billed on use) or with generous ones (billed on the request). Set resources to what the app really needs. See How is a cluster billed?.
  2. Ingress. Ingress objects inside a Cloider cluster aren't served. Leave the chart's ingress disabled and publish the chart's Service with a target, which also gives you HTTPS.
  3. Service type and persistence. A chart that sets service.type: LoadBalancer gets a public IP that is billed per load balancer (Load balancers). A chart with persistence.enabled: true creates PersistentVolumeClaims that are billed per GiB of their size (Persistent volumes).

Example: Grafana with persistent storage, on your domain​

Grafana dashboards, with its data on a 5 GiB volume and served at https://grafana.example.com.

grafana-values.yaml
persistence:
enabled: true
size: 5Gi

resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi

service:
type: ClusterIP
port: 80

ingress:
enabled: false
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install grafana grafana/grafana -n monitoring --create-namespace -f grafana-values.yaml
kubectl rollout status deployment/grafana -n monitoring

Get the generated admin password:

kubectl get secret grafana -n monitoring -o jsonpath='{.data.admin-password}' | base64 -d; echo

Route your domain to the grafana Service (the domain must already be in your account, see Add a custom domain):

cloider target create grafana.example.com --cluster staging --service monitoring/grafana

Grafana now answers at https://grafana.example.com. Log in as admin with the password above. The chart's 5 GiB claim is billed as 5 GiB of volume for as long as it exists, including after helm uninstall if the chart leaves it behind (see below).

Upgrade, roll back and uninstall​

# Change a value and upgrade
helm upgrade podinfo podinfo/podinfo -n demo -f values.yaml --set replicaCount=3

# Upgrade to a newer chart version
helm repo update
helm upgrade podinfo podinfo/podinfo -n demo -f values.yaml --version 6.7.1

# See what changed between revisions and go back
helm history podinfo -n demo
helm rollback podinfo 1 -n demo

# Remove the release
helm uninstall podinfo -n demo

helm uninstall removes what the chart created, except objects the chart marks to keep. Many charts keep PersistentVolumeClaims so your data survives a reinstall; those claims keep being billed until you delete them:

kubectl get pvc -n monitoring
kubectl delete pvc <claim-name> -n monitoring

Deleting the namespace removes everything left in it:

kubectl delete namespace demo

Charts with CRDs and operators​

Some charts install CustomResourceDefinitions (CRDs) and an operator that manages them, such as database or certificate operators. You install them with Helm the usual way; your kubeconfig is cluster admin, so Helm can create cluster-wide objects. Keep in mind that:

  • the operator's own pods run in your cluster and are billed like any other pods,
  • an operator that creates Ingress objects won't make anything public, since Ingress isn't served; use a target for HTTP,
  • charts built to manage nodes or cluster networking (for example node provisioners or CNI plugins) are meant for self-managed clusters. On Cloider the nodes and the network are managed for you. See Limits and compatibility.

Troubleshooting​

Error: INSTALLATION FAILED: cannot re-use a name that is still in use: a release of that name already exists in the namespace. Use helm upgrade --install instead of helm install, or pick another release name.

Error: INSTALLATION FAILED: ... context deadline exceeded with --wait: the chart's pods didn't become ready in time. Run kubectl get pods -n <namespace> and kubectl describe pod to see why, typically an image pull error, a pending PersistentVolumeClaim or a failing probe.

Error: repo ... not found in the browser terminal: the terminal restarted and forgot its repositories. Run helm repo add again.

The chart's Ingress doesn't work: Ingress isn't served on Cloider. Disable it in the values and create a target for the chart's Service.

The chart's LoadBalancer Service stays <pending>: see Load balancers.

More cases are in Kubernetes troubleshooting.

Next steps​

Frequently asked questions

Does Helm work on Cloider Kubernetes?

Yes. Helm 3 works on Cloider clusters like on any Kubernetes cluster. It is preinstalled in each cluster's browser terminal and in cloider cluster exec, and you can also run it locally with the cluster's kubeconfig or through Terraform's helm provider.

Why does the Ingress of my Helm chart not work on Cloider?

Ingress objects inside a Cloider cluster are not served. Disable the chart's ingress in its values and route a domain to the chart's Service with a target, which also provides HTTPS.

Are PersistentVolumeClaims deleted when I uninstall a Helm chart?

Not always. Many charts keep their PersistentVolumeClaims after helm uninstall so data survives a reinstall. They keep being billed per GiB until you delete them with kubectl delete pvc.

Can I install operators and CRDs with Helm on Cloider?

Yes. The kubeconfig is cluster admin, so Helm can install CustomResourceDefinitions and operators. The operator pods are billed like any other pods.