cilium/cilium · warning
clustermesh is not deployed
Error message
clustermesh is not deployed
What it means
The clustermesh-apiserver deployment lookup failed and no clustermesh Pod state exists, so the collector warns 'clustermesh is not deployed'. This is the multi-cluster feature check in cilium-cli status distinguishing an absent component from a broken one.
Source
Thrown at cilium-cli/status/k8s.go:613
defer status.mutex.Unlock()
status.CollectionError(err)
}
}
return nil
},
},
{
name: defaults.ClusterMeshDeploymentName,
task: func(_ context.Context) error {
disabled, err := k.deploymentStatus(ctx, status, defaults.ClusterMeshDeploymentName)
status.mutex.Lock()
defer status.mutex.Unlock()
status.SetDisabled(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, disabled)
if err != nil {
if _, ok := status.PodState[defaults.ClusterMeshDeploymentName]; !ok {
status.AddAggregatedWarning(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, fmt.Errorf("clustermesh is not deployed"))
} else {
status.AddAggregatedError(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, err)
status.CollectionError(err)
}
}
// pod status for relay is only validated if the deployment exists
if _, ok := status.PodState[defaults.ClusterMeshDeploymentName]; ok {
err = k.podStatus(ctx, status, defaults.ClusterMeshDeploymentName, "k8s-app=clustermesh-apiserver", nil)
if err != nil {
status.mutex.Lock()
defer status.mutex.Unlock()
status.CollectionError(err)
}
}
return nil
},View on GitHub (pinned to ac7b90affa)
Solutions
- If multi-cluster is wanted: `cilium clustermesh enable` then connect clusters with `cilium clustermesh connect`
- If not, ignore the warning — clustermesh is optional
- Verify absence with `kubectl -n kube-system get deploy clustermesh-apiserver`
- Ensure required `cluster.name` config differs per cluster before enabling
Example fix
// before $ cilium status ⚠️ clustermesh is not deployed // after $ cilium clustermesh enable $ cilium clustermesh connect --context cluster2 $ cilium status ✅ clustermesh-apiserver: Ok
Defensive patterns
Strategy: validation
Validate before calling
kubectl -n kube-system get deployment clustermesh-apiserver || echo 'clustermesh not enabled'
Prevention
- Only run clustermesh commands after `cilium clustermesh enable`
- Set unique cluster.name per cluster before enabling clustermesh
- Treat the 'not deployed' warning as informational on single-cluster setups
- Verify clustermesh state with `cilium clustermesh status` before multi-cluster operations
When it happens
Trigger: Running `cilium-cli status` when deploymentStatus() for the clustermesh-apiserver Deployment errors (typically NotFound) and status.PodState lacks ClusterMeshDeploymentName.
Common situations: Single-cluster installs where clustermesh was never enabled (`clustermesh.useAPIServer=false` default); checking status after disconnecting/removing clustermesh; users running `cilium clustermesh status` before `cilium clustermesh enable`.
Related errors
- %s is not set in ConfigMap %q
- unable to parse %s: %w
- unable to get clustermesh service %q: %w
- unable to get client secret to access clustermesh service: %
- unable to retrieve the CA certificate: %w
AI-assisted analysis of cilium/cilium@ac7b90affa (2026-08-31).
Data as JSON: /api/errors/76383b552f8a6051.
Report an issue: GitHub.