meshctl install: Install Gloo From CI
meshctl install deploys the Gloo control plane into the current-context cluster, with a version and optional Helm value overrides.
meshctl install is the CLI path to stand up Gloo in a pipeline; pin the version and follow it with meshctl check to confirm the rollout.
What it does
meshctl install applies the Gloo management components (and, for enterprise, requires a license) to the cluster your kube context points at. You choose the version and can override chart values with --set or a values file, mirroring a Helm install.
Common usage
meshctl install --version 2.5.0
# with a license key and value overrides
meshctl install --version 2.5.0 \
--set licensing.glooMeshLicenseKey=$GLOO_LICENSE \
--set glooMgmtServer.enabled=trueOptions
| Flag | What it does |
|---|---|
| --version <ver> | Pin the Gloo version to install |
| --set <path=value> | Override a Helm value (repeatable) |
| --chart-values-file <f> | Supply a values file |
| --kubecontext <name> | Target cluster context |
| --dry-run | Render manifests without applying |
In CI
Pin --version for reproducibility and pass the license via a secret env var, never inline. Chain meshctl install && meshctl check so the pipeline only continues when the install verified healthy.
Common errors in CI
"a valid Gloo ... license is required" or a license-expired message means the license env var is empty or stale. "Error: could not ... context ... not found" is a KUBECONFIG problem. "release ... already exists" means Gloo is already installed; use meshctl upgrade instead of a second install.
Using this in CI
A runner has no kubeconfig, no cached context, and no interactive auth. Every kubectl invocation in CI needs the context supplied explicitly, and most confusing CI failures here are the command running against the wrong cluster or no cluster at all.
# never rely on the ambient context on a runner
kubectl --context "$KUBE_CONTEXT" -n "$NAMESPACE" get pods
# confirm what you are actually connected to before mutating anything
kubectl config current-context
kubectl cluster-info
# fail fast instead of hanging on an unreachable API server
kubectl --request-timeout=30s get nodes