kubernetes/kops · error
on Akamai (Linode), subnets must include Regions
Error message
on Akamai (Linode), subnets must include Regions
What it means
kops's BuildCloud initializes the cloud provider for a cluster. For the Akamai (Linode) provider, kops derives the Linode region from the first subnet that has a Region set; every subnet declaration is expected to carry a region because Linode has no zone-level abstraction. If no subnet specifies a region, kops cannot construct a Linode cloud client and aborts with this error.
Source
Thrown at upup/pkg/fi/cloudup/utils.go:219
cloud = scwCloud
}
case kops.CloudProviderMetal:
metalCloud, err := metal.NewCloud()
if err != nil {
return nil, fmt.Errorf("error initializing Metal cloud: %w", err)
}
cloud = metalCloud
case kops.CloudProviderLinode:
for _, subnet := range cluster.Spec.Networking.Subnets {
if subnet.Region != "" {
region = subnet.Region
break
}
}
if region == "" {
return nil, fmt.Errorf("on Akamai (Linode), subnets must include Regions")
}
linodeCloud, err := linode.NewCloud(region)
if err != nil {
return nil, fmt.Errorf("error initializing Akamai (Linode) cloud: %w", err)
}
cloud = linodeCloud
default:
return nil, fmt.Errorf("unknown CloudProvider %q", cluster.GetCloudProvider())
}
return cloud, nil
}
func FindDNSHostedZone(dns dnsprovider.Interface, clusterDNSName string, dnsType kops.DNSType) (string, error) {
klog.V(2).Infof("Querying for all DNS zones to find match for %q", clusterDNSName)
clusterDNSName = "." + strings.TrimSuffix(clusterDNSName, ".")View on GitHub (pinned to 4c8573c808)
Solutions
- Set `region:` (a Linode region slug such as us-east or eu-west) on at least one — ideally all — subnets in cluster.spec.networking.subnets.
- Regenerate the manifest with `kops create cluster --cloud linode --zones us-east ...` so kops fills regions automatically.
- Verify the cluster spec: `kops get cluster <name> -o yaml` and confirm each subnet has a non-empty region before re-running.
Example fix
# before subnets: - name: main cidr: 10.0.1.0/24 # after subnets: - name: main cidr: 10.0.1.0/24 region: us-east
Defensive patterns
Strategy: validation
Validate before calling
for _, s := range cluster.Spec.Networking.Subnets {
if s.Region == "" {
return fmt.Errorf("subnet %q: Linode requires region", s.Name)
}
} Prevention
- Always set region on every subnet when cloudProvider is linode/akamai.
- Scaffold clusters with `kops create cluster --cloud linode --zones <region>` instead of hand-editing YAML.
- Validate the manifest with `kops get cluster -o yaml` before apply.
When it happens
Trigger: Running `kops create cluster`, `kops update cluster`, `kops create ig`, `kops delete cluster`, or `kops delete instance` where cluster.Spec.CloudProvider is linode/akamai and every entry in cluster.spec.networking.subnets has an empty region field (or there are no subnets).
Common situations: Hand-written cluster manifests that omit `region:` on subnets (e.g. copying an AWS example that uses only `zone:` or CIDR fields); tooling that generates subnets without the Linode-specific region key; upgrading older configs where region was optional for another provider.
Related errors
- error listing Akamai (Linode) VPC subnets for VPC %s(%d): %w
- error deleting Akamai (Linode) subnet %s(%s): %w
- Subnet.VPC is required
- Subnet.VPC.ID is required
- error listing Akamai (Linode) VPC Subnets: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/e842b3330f5cd136.
Report an issue: GitHub.