kubernetes/kops · error
CloudProvider %q not supported with etcd-manager
Error message
CloudProvider %q not supported with etcd-manager
What it means
etcd-manager replaces the legacy etcd implementation, but kOps only knows how to configure it (volume providers, tags, naming) for a fixed set of cloud providers (AWS, GCE, DO, Hetzner, Linode, OpenStack, Scaleway, metal). buildPod hits the switch's default case when the cluster's cloudProvider is not one of those, and aborts the model build with this error naming the unsupported provider.
Source
Thrown at pkg/model/components/etcdmanager/model.go:550
fmt.Sprintf("%s--%s--", b.Cluster.Name, etcdCluster.Name),
}
staticConfig := &StaticConfig{
EtcdVersion: etcdCluster.Version,
}
staticConfig.Nodes = append(staticConfig.Nodes, StaticConfigNode{
ID: fmt.Sprintf("%s--%s--%d", b.Cluster.Name, etcdCluster.Name, 0),
// TODO: Support multiple control-plane nodes (will be interesting!)
IP: []string{"node0" + "." + etcdCluster.Name + "." + b.Cluster.Name},
})
b, err := json.Marshal(staticConfig)
if err != nil {
return nil, fmt.Errorf("building static config: %w", err)
}
config.StaticConfig = string(b)
default:
return nil, fmt.Errorf("CloudProvider %q not supported with etcd-manager", b.Cluster.GetCloudProvider())
}
}
args, err := flagbuilder.BuildFlagsList(config)
if err != nil {
return nil, err
}
{
container.Command = []string{"/go-runner"}
container.Args = []string{
"--log-file=/var/log/etcd.log",
"--also-stdout",
"/ko-app/etcd-manager",
}
container.Args = append(container.Args, args...)
cpuRequest := resource.MustParse("200m")View on GitHub (pinned to 4c8573c808)
Solutions
- Set spec.cloudProvider in the cluster spec to a supported provider (aws, gce, digitalocean, hetzner, linode, openstack, scaleway, or metal)
- Re-create the cluster on a supported provider if migrating from a removed provider (e.g. vsphere/aliyun are no longer supported)
- Check for typos/case mismatches in cloudProvider; kops get cluster -o yaml to verify the actual value
- If etcd-manager should support the provider, disable it by using legacy etcd or contribute a new case to buildPod
Example fix
// before (cluster.yaml) spec: cloudProvider: vsphere // after spec: cloudProvider: aws
Defensive patterns
Strategy: validation
Validate before calling
// Validate cloudProvider before kops update cluster
provider := cluster.Spec.GetCloudProvider()
supported := map[string]bool{
"aws": true, "gce": true, "digitalocean": true, "hetzner": true,
"linode": true, "openstack": true, "scaleway": true, "metal": true,
}
if !supported[provider] {
return fmt.Errorf("provider %q does not support etcd-manager; migrate cluster first", provider)
} Try / catch
// Wrap and surface the provider name
if err := buildManifest(); err != nil {
if strings.Contains(err.Error(), "not supported with etcd-manager") {
return fmt.Errorf("unsupported provider for etcd-manager, see kops docs: %w", err)
}
return err
} Prevention
- Only use cloud providers listed in current kOps docs
- Run `kops update cluster --dry-run` before applying specs copied from other platforms
- Check kops release notes for removed cloud providers before upgrading
When it happens
Trigger: `kops update cluster`/`create cluster` with spec.cloudProvider set to a provider lacking an etcd-manager case in buildPod — e.g. the legacy "vsphere", "aliyun", or "baiducloud" providers, or an empty/invalid provider value.
Common situations: Users migrating clusters from a deprecated cloud provider, copy-pasting a cluster spec from another platform, or leaving cloudProvider unset/corrupted in the cluster spec.
Related errors
- backupStore must be set for use with etcd-manager
- unknown etcd cluster key %q
- etcd version %q is not supported with etcd-manager, please s
- DNS not implemented on azureCloud
- error identifying node %q: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/e7d8a53d01d55f41.
Report an issue: GitHub.