Skip to content

Installation

Version placeholder

Throughout this guide, vX.Y.Z represents the version provided by your Valuematic representative. Replace it with the actual version tag (e.g., v1.2.0).

Quick Install

# Step 1: Make the installer executable (provided by your Valuematic representative)
chmod +x slopilot-install.sh

# Step 2: Install
./slopilot-install.sh \
    --username <ghcr-username> \
    --password <ghcr-token> \
    --license-key "SLOPILOT-XXXX" \
    --tag vX.Y.Z

# Step 3: Verify
kubectl get pods -n slopilot -w

Installer Reference

Required flags (install/upgrade mode)

Flag Description
--username USERNAME GHCR username for image and chart pull
--password PASSWORD GHCR token/password
--license-key KEY SLOpilot license key
--tag TAG Image tag to deploy (e.g., v1.2.0)

Required flags (template mode)

Flag Description
--username USERNAME GHCR username for chart pull
--password PASSWORD GHCR token/password
--tag TAG Image tag to render

Note: --license-key is not required in template mode.

Optional flags

Flag Default Description
--namespace NAME slopilot Target Kubernetes namespace
--release-name NAME slopilot-rightsizing Helm release name
--values FILE Extra Helm values file (repeatable)
--admin-password PW Auto-generated Initial admin password
--password-file FILE Read GHCR password from file (mutually exclusive with --password)
--license-key-file FILE Read license key from file (mutually exclusive with --license-key)
--template Render manifests to stdout; do not deploy
--yes Skip confirmation prompt
--help, -h Show help

Verifying the Installation

After a successful install, confirm all pods are running and access the UI:

# Watch pods come up
kubectl get pods -n slopilot -w

# Port-forward to access the UI
kubectl port-forward -n slopilot svc/slopilot-rightsizing 8080:80

# Open in browser
open http://localhost:8080

Template Mode

Template mode renders the full set of Kubernetes manifests to stdout without deploying anything to a cluster. This is useful for reviewing what will be applied, auditing changes before rollout, or feeding output into a GitOps pipeline.

./slopilot-install.sh \
    --username <ghcr-username> \
    --password <ghcr-token> \
    --tag vX.Y.Z \
    --template > manifests.yaml

--license-key is not required in template mode. The rendered output can be piped directly to kubectl apply -f - or committed to a GitOps repository.


Using Custom Values Files

Pass --values one or more times to layer additional Helm values on top of the defaults:

./slopilot-install.sh \
    --username myuser \
    --password ghp_xxxx \
    --license-key "SLOPILOT-XXXX" \
    --tag vX.Y.Z \
    --values my-overrides.yaml

Restricted overrides

Values files must not contain nameOverride or fullnameOverride. These keys break secret name resolution and the installer will reject them with an error.


Reading Credentials from Files

For automation and CI/CD pipelines, credentials can be read from files instead of being passed on the command line:

./slopilot-install.sh \
    --username myuser \
    --password-file ./secrets/ghcr-token \
    --license-key-file ./secrets/license-key \
    --tag vX.Y.Z

--password and --password-file are mutually exclusive. The same applies to --license-key and --license-key-file.


What the Installer Does

The installer performs five steps in order:

  1. Validates inputs — checks that all required flags are present, verifies that helm and kubectl are available in PATH, tests connectivity to the target cluster, and performs RBAC preflight checks to confirm the calling user has sufficient permissions.

  2. Creates the namespace — applies kubectl create namespace <namespace> using --dry-run=client | kubectl apply -f -, making the operation idempotent.

  3. Creates Kubernetes secrets:

    • {release}-license — stores the license key supplied via --license-key (or --license-key-file).
    • {release}-users — stores internal authentication credentials and the initial admin password (auto-generated or provided via --admin-password). All values are read from an existing secret if one already exists, so they are preserved across upgrades.
    • registry-pull-secret — Docker registry credentials for pulling images from ghcr.io.
  4. Authenticates to the Helm OCI registry — logs into ghcr.io using the supplied credentials to pull the Helm chart.

  5. Runs helm upgrade --install — deploys the chart with --atomic, which automatically rolls back to the previous revision if the new release fails its health checks.


Upgrading

Re-run the installer with the new version tag. Existing secrets and data are preserved automatically.

./slopilot-install.sh \
    --username <ghcr-username> \
    --password <ghcr-token> \
    --license-key "SLOPILOT-XXXX" \
    --tag vNEW.VERSION

Key points:

  • Authentication credentials and admin password are read from the existing Kubernetes secret and preserved unchanged.
  • The --atomic flag ensures the cluster is automatically restored to the previous revision if the new release fails health checks.
  • Downtime is limited to the pod restart; the chart uses a Recreate deployment strategy.

Rolling Back

# View release history
helm history slopilot-rightsizing -n slopilot

# Roll back to the previous revision
helm rollback slopilot-rightsizing -n slopilot

Migration from Static Manifests

If you previously deployed SLOpilot using a generated YAML manifest (kubectl apply), follow these steps to migrate to a Helm-managed deployment.

Back up your data before migration

  1. Identify your namespace and release name from the existing manifest metadata.

  2. Remove Namespace and PersistentVolumeClaim objects from your manifest to preserve your data:

    grep -v 'kind: Namespace\|kind: PersistentVolumeClaim' old-manifest.yaml > filtered.yaml
    

  3. Delete the old resources (this preserves the namespace and PVCs):

    kubectl delete -f filtered.yaml --ignore-not-found
    

  4. Clean up cluster-scoped resources:

    kubectl delete clusterrole,clusterrolebinding \
        -l app.kubernetes.io/instance=<RELEASE_NAME>
    

  5. Install via Helm:

    ./slopilot-install.sh \
        --username <ghcr-username> \
        --password <ghcr-token> \
        --license-key "SLOPILOT-XXXX" \
        --tag vX.Y.Z \
        --namespace <NAMESPACE> \
        --release-name <RELEASE_NAME>
    

Your data (user accounts, monitoring configuration) is preserved in the existing PersistentVolumeClaim.


Uninstalling

helm uninstall slopilot-rightsizing -n slopilot

PersistentVolumeClaims are retained

Both the application data PVC and the Prometheus data PVC are annotated with helm.sh/resource-policy: keep. They are not deleted when you uninstall the Helm release. To remove them manually:

kubectl delete pvc -n slopilot -l app.kubernetes.io/instance=slopilot-rightsizing

To also remove the namespace:

kubectl delete namespace slopilot