Prerequisites checklist
Run these checks before helm install. Each command should print the expected output; any failure blocks install.
One-shot verification script
#!/usr/bin/env bash
set -e
echo "== Kubernetes version =="
kubectl version --output=json | jq -r '.serverVersion.gitVersion'
# Expect: v1.27.x or later
echo "== Nodes ready =="
NODES=$(kubectl get nodes --no-headers | grep -c ' Ready ')
echo "$NODES nodes Ready"
# Expect: >= 8 for prod, >= 3 for dev
echo "== metrics-server =="
kubectl get deployment metrics-server -n kube-system \
-o jsonpath='{.status.readyReplicas}' | grep -q 1 && echo "OK" || echo "MISSING"
echo "== StorageClass (default) =="
kubectl get storageclass \
-o jsonpath='{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io/is-default-class=="true")].metadata.name}'
# Expect: at least one name printed
echo "== IngressClass =="
kubectl get ingressclass --no-headers | awk '{print $1}'
# Expect: at least one line (nginx/alb/istio/traefik)
echo "== helm CLI =="
helm version --short
# Expect: v3.12.x or later
echo "== kubectl CLI =="
kubectl version --client --output=json | jq -r '.clientVersion.gitVersion'
# Expect: v1.27.x or later
echo "== Namespace 'openbox' (create if missing) =="
kubectl get namespace openbox >/dev/null 2>&1 || kubectl create namespace openbox
echo "== Optional CRDs =="
kubectl get crd rollouts.argoproj.io >/dev/null 2>&1 \
&& echo "Argo Rollouts: present" \
|| echo "Argo Rollouts: MISSING (set openbox-guardrails-service.rollout.enabled=false)"
kubectl get crd externalsecrets.external-secrets.io >/dev/null 2>&1 \
&& echo "External Secrets: present" \
|| echo "External Secrets: missing (use plain K8s Secrets)"
kubectl get crd clusterissuers.cert-manager.io >/dev/null 2>&1 \
&& echo "cert-manager: present" \
|| echo "cert-manager: missing (TLS certs are manual)"
echo "== Cluster egress (image pull test) =="
kubectl run tmp-pull-test --image=alpine:3.19 --rm -it --restart=Never -- \
wget -qO- https://google.com >/dev/null && echo "OK" || echo "EGRESS BLOCKED"
echo "All checks complete. Fix any missing items before proceeding to helm install."
Save as preflight.sh, chmod +x preflight.sh, run before install.
Manual checklist (if script not applicable)
- Kubernetes API server reachable (
kubectl cluster-info) - Server version ≥ 1.27
- ≥ 3 worker nodes Ready (production: ≥ 8)
-
metrics-serverrunning inkube-system - Default StorageClass present
- At least one IngressClass installed
-
helm≥ 3.12 on your workstation -
kubectl≥ 1.27 on your workstation - Namespace
openboxcreated (or you have create-namespace RBAC) - Argo Rollouts CRD installed (OR you set
rollout.enabled: falsein values) - Cluster can pull images from
ghcr.io/openbox-ai/*(adjust if using private registry)
Common blockers
"metrics-server not found"
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
"no StorageClass has default annotation" — mark one as default:
kubectl patch storageclass <your-class-name> \
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
"cluster can't pull ghcr.io images" — check egress firewall, or mirror images to your registry and override image.repository in values.