Helm Workshop: Setup Requirements
This page is for the instructor or cluster administrator who prepares an environment for the Helm workshop, and for attendees who want to check their own setup before starting.
It covers two audiences: the admin preparation (the cluster, attendee projects and roles, a registry for charts, and network access), which is done once before the workshop, and the attendee workstation (the CLIs each attendee runs), which every attendee needs.
Most of the workshop runs entirely on the workstation: modules 1 and 3 and most of module 2 only render charts locally with helm template, and module 4 works against an OCI registry.
The cluster is used only where a chart is actually installed (the walkthrough in Module 2: Helm CLI).
Cluster
-
Platform: any Kubernetes cluster works for the Helm commands, but the content is written for OpenShift 4. It relies on the default
restricted-v2security context constraint (OpenShift 4.11 and later) and explains how to deploy NGINX under it (see Step 7 in Module 2). No exact OpenShift version is pinned by the content. -
Size and topology: each attendee installs at most one small release at a time (one NGINX Deployment with one replica, a Service and a ServiceAccount). No exercise needs more than one worker node, so a single-node OpenShift (SNO) cluster or a compact three-node cluster is enough; size it for roughly one small pod per attendee.
-
Cluster features: none beyond a default installation. The exercises do not use the metrics API, user workload monitoring, Routes, Ingress, persistent storage, or any CRDs. Helm stores release history as Secrets in the attendee’s project, so attendees need to be able to create Secrets there (the
editrole allows this).
Operators and Cluster Components
No operators are required, and nothing has to be enabled beyond a default OpenShift installation. The table lists the components the content relies on.
| Component | Install source | Namespace | Configuration needed | Used in |
|---|---|---|---|---|
|
Built in to OpenShift 4.11+; default for pods created by non-admin users |
Cluster-scoped |
None. Attendees install the default |
Module 2 (content) |
OCI registry that attendees can push charts to |
One of: a local registry each attendee starts with Podman or Docker ( |
Outside the cluster (local registry), or wherever the instructor hosts it |
Attendees need push and pull rights. The local registry serves plain HTTP without authentication, so Helm commands need |
Module 2 (content, |
cert-manager |
Not installed. The Jetstack chart ( |
- |
Do not install it for the workshop. It creates cluster-scoped resources (CRDs, ClusterRoles) that attendees with the |
Module 2 (Exercises 1 and 2) |
Attendee Accounts, Projects and Roles
This repository contains no provisioning automation; the content does not depend on a particular project name.
Helm installs into the current project of the attendee’s oc context, so each attendee needs one project of their own, in which they hold the edit role (or admin, which is what a self-provisioned project gives its creator).
If self-provisioning is enabled (the OpenShift default), attendees create their own project after logging in:
oc login <api-url> -u <user>
oc new-project <user>-helm
If self-provisioning is disabled, the instructor creates one project per attendee and grants edit on it:
for user in user1 user2 user3; do
oc new-project "${user}-helm" --skip-config-write
oc adm policy add-role-to-user edit "${user}" -n "${user}-helm"
done
Attendees then select their project with:
oc project <user>-helm
The edit role covers everything the content does in the cluster: helm install, helm status --show-resources, helm list, and helm uninstall of the default helm create chart (Deployment, Service, ServiceAccount, and the Secrets in which Helm stores releases).
No cluster roles, cluster role bindings, SCC grants, or anyuid access are needed; the nginx-unprivileged override exists so that the release runs under restricted-v2.
Instructor-only:
-
Creating projects and role bindings for attendees, when self-provisioning is disabled.
-
Providing the shared OCI registry and its credentials, if attendees do not run a local registry.
-
Anything cluster-scoped. Installing the cert-manager chart (rather than rendering it) would require cluster-admin and is not part of the workshop.
Attendee Workstation
Exercises show each command for both PowerShell (Windows) and bash (Linux, macOS, or Git Bash).
| Tool | Version | Where it is used |
|---|---|---|
|
Helm 3; tested with 3.16 and 3.22. OCI support needs 3.8 or later, and the |
Every module: |
|
A client matching the cluster version |
Logging in and selecting a project, so that |
|
Any current version |
Module 2 (content, Step 4) and Module 4 Exercise 1: starting the local registry ( |
|
Any current version (not available for Windows) |
Module 4 Exercise 1, Steps 4 to 6: inspecting the chart artifact’s manifest, config and layers. With Podman, |
|
Any version |
Module 4 Exercise 1, Step 6 (bash): |
|
2.1 or later (the content shows the keyring export that GnuPG 2.1+ requires) |
Module 4 content: signing ( |
bash 4+ or PowerShell |
- |
Module 2 Exercise 0: shell completion ( |
|
- |
Filtering |
When this workshop runs as part of OpenShift 102, attendees can use its tools pod (see Shared CLI tools) instead of installing the CLIs locally.
According to Module 4, the tools pod has skopeo installed, and docker there is a shim over skopeo that supports docker manifest inspect; it has no container engine, so it cannot start the local registry, and attendees must push to a registry reachable from the pod instead.
The tools pod also has jq and gpg; check with the commands in the Verification Checklist.
Network and Image Access
Container images:
| Image | Pulled by | Used in |
|---|---|---|
|
Cluster nodes |
Module 2 (content): installing the default chart under |
|
Cluster nodes, only if a chart from |
Default |
|
Cluster nodes, only if an attendee runs |
The |
|
The attendee workstation (Podman or Docker) |
Module 4 Exercise 1: local OCI registry |
The cert-manager chart references images under quay.io/jetstack/, but the exercises only render it, so those images are never pulled.
External URLs fetched by the exercises:
-
https://charts.jetstack.io: Helm repository index and thecert-managerchart package (Module 2, Exercises 1 and 2:helm repo add,helm repo update,helm pull,helm show,helm template). -
The OCI registry attendees push to (Module 2 content, Module 4):
localhost:5000for the local registry, or the registry the instructor provides. -
https://helm.sh/docs/...: documentation links, opened in a browser only.
For disconnected or restricted-egress environments:
-
Mirror
quay.io/nginx/nginx-unprivileged:stable-alpineinto a registry the cluster can pull from, and tell attendees to use the mirrored name in the--set image.repository=…override. -
Make the cert-manager chart available from a reachable location: an internal HTTP chart repository (serve the chart
.tgzand anindex.yaml, then replacehttps://charts.jetstack.ioin thehelm repo addcommands), or allow egress from attendee workstations or the tools pod tocharts.jetstack.io. -
Mirror
quay.io/libpod/registry:2.8.2for workstations that cannot reach Quay.io, or provide a shared OCI registry instead of the local one. -
nginxandbusyboxfrom Docker Hub are needed only if attendees skip the image override or runhelm test.
Verification Checklist
Run these as an attendee (or as the instructor, logged in as a test attendee) from the workstation or tools pod that attendees will use.
-
Helm is installed and is version 3:
helm version --shortExpected:
v3.x.y(tested with v3.16 and v3.22). -
The attendee is logged in and has a project:
oc whoami oc project -qExpected: the attendee’s user name and their project (for example,
user1-helm). -
The attendee can create what a Helm release needs in that project:
for r in deployments services serviceaccounts secrets; do oc auth can-i create "$r" doneExpected:
yesfour times. -
The Jetstack repository is reachable:
helm repo add jetstack https://charts.jetstack.io helm repo update helm show chart jetstack/cert-managerExpected: chart metadata with
name: cert-manager. -
A chart installs and runs under
restricted-v2:helm create smoke-chart helm install smoke ./smoke-chart \ --set image.repository=quay.io/nginx/nginx-unprivileged \ --set image.tag=stable-alpine \ --set service.port=8080 \ --wait \ --timeout 3m helm status smoke helm uninstall smoke rm -rf smoke-chartExpected:
STATUS: deployedfromhelm status, thenrelease "smoke" uninstalled. -
A chart can be pushed to and pulled from the OCI registry. With the local registry (workstation with Podman or Docker):
podman run -d --replace \ --name registry \ -p 5000:5000 \ quay.io/libpod/registry:2.8.2 helm create oci-check helm package ./oci-check helm push oci-check-0.1.0.tgz oci://localhost:5000/charts --plain-http helm show chart oci://localhost:5000/charts/oci-check \ --version 0.1.0 \ --plain-httpExpected:
Pushed: localhost:5000/charts/oci-check:0.1.0and the chart metadata. With a shared registry, first run:helm registry login <registry-url>Then use
oci://<registry-url>/chartswithout--plain-http. Remove the local registry afterwards if attendees will start it themselves:podman rm -f registry -
The optional tools for Module 4 are present:
skopeo --version jq --version gpg --version | head -1Expected: a version line from each;
gpgreports 2.1 or later.