Skip to content

[release-1.10] 🌱 Add Scaleway infrastructure provider to clusterctl #12387

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions cmd/clusterctl/client/config/providers_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ const (
IonosCloudProviderName = "ionoscloud-ionoscloud"
VultrProviderName = "vultr-vultr"
OpenNebulaProviderName = "opennebula"
ScalewayProviderName = "scaleway"
)

// Bootstrap providers.
Expand Down Expand Up @@ -339,6 +340,11 @@ func (p *providersClient) defaults() []Provider {
url: "https://github.com/OpenNebula/cluster-api-provider-opennebula/releases/latest/infrastructure-components.yaml",
providerType: clusterctlv1.InfrastructureProviderType,
},
&provider{
name: ScalewayProviderName,
url: "https://github.com/scaleway/cluster-api-provider-scaleway/releases/latest/infrastructure-components.yaml",
providerType: clusterctlv1.InfrastructureProviderType,
},

// Bootstrap providers
&provider{
Expand Down
2 changes: 2 additions & 0 deletions cmd/clusterctl/client/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ func Test_clusterctlClient_GetProvidersConfig(t *testing.T) {
config.OutscaleProviderName,
config.PacketProviderName,
config.ProxmoxProviderName,
config.ScalewayProviderName,
config.SideroProviderName,
config.TinkerbellProviderName,
config.VCloudDirectorProviderName,
Expand Down Expand Up @@ -169,6 +170,7 @@ func Test_clusterctlClient_GetProvidersConfig(t *testing.T) {
config.OutscaleProviderName,
config.PacketProviderName,
config.ProxmoxProviderName,
config.ScalewayProviderName,
config.SideroProviderName,
config.TinkerbellProviderName,
config.VCloudDirectorProviderName,
Expand Down
5 changes: 5 additions & 0 deletions cmd/clusterctl/cmd/config_repositories_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ openstack InfrastructureProvider https://github.com/kubernetes
outscale InfrastructureProvider https://github.com/outscale/cluster-api-provider-outscale/releases/latest/ infrastructure-components.yaml
packet InfrastructureProvider https://github.com/kubernetes-sigs/cluster-api-provider-packet/releases/latest/ infrastructure-components.yaml
proxmox InfrastructureProvider https://github.com/ionos-cloud/cluster-api-provider-proxmox/releases/latest/ infrastructure-components.yaml
scaleway InfrastructureProvider https://github.com/scaleway/cluster-api-provider-scaleway/releases/latest/ infrastructure-components.yaml
sidero InfrastructureProvider https://github.com/siderolabs/sidero/releases/latest/ infrastructure-components.yaml
tinkerbell-tinkerbell InfrastructureProvider https://github.com/tinkerbell/cluster-api-provider-tinkerbell/releases/latest/ infrastructure-components.yaml
vcd InfrastructureProvider https://github.com/vmware/cluster-api-provider-cloud-director/releases/latest/ infrastructure-components.yaml
Expand Down Expand Up @@ -351,6 +352,10 @@ var expectedOutputYaml = `- File: core_components.yaml
Name: proxmox
ProviderType: InfrastructureProvider
URL: https://github.com/ionos-cloud/cluster-api-provider-proxmox/releases/latest/
- File: infrastructure-components.yaml
Name: scaleway
ProviderType: InfrastructureProvider
URL: https://github.com/scaleway/cluster-api-provider-scaleway/releases/latest/
- File: infrastructure-components.yaml
Name: sidero
ProviderType: InfrastructureProvider
Expand Down
1 change: 1 addition & 0 deletions docs/book/src/developer/providers/contracts/clusterctl.md
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ providers.
| CAPO | cluster.x-k8s.io/provider=infrastructure-openstack |
| CAPOCI | cluster.x-k8s.io/provider=infrastructure-oci |
| CAPP | cluster.x-k8s.io/provider=infrastructure-packet |
| CAPS | cluster.x-k8s.io/provider=infrastructure-scaleway |
| CAPT | cluster.x-k8s.io/provider=infrastructure-tinkerbell |
| CAPV | cluster.x-k8s.io/provider=infrastructure-vsphere |
| CAPVC | cluster.x-k8s.io/provider=infrastructure-vcluster |
Expand Down
3 changes: 3 additions & 0 deletions docs/book/src/reference/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ Cluster API Provider Outscale
### CAPOCI
Cluster API Provider Oracle Cloud Infrastructure (OCI)

### CAPS
Cluster API Provider Scaleway

### CAPT
Cluster API Provider Tinkerbell

Expand Down
1 change: 1 addition & 0 deletions docs/book/src/reference/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ updated info about which API version they are supporting.
- [OpenStack](https://github.com/kubernetes-sigs/cluster-api-provider-openstack)
- [Outscale](https://github.com/outscale/cluster-api-provider-outscale)
- [Proxmox](https://github.com/ionos-cloud/cluster-api-provider-proxmox)
- [Scaleway](https://github.com/scaleway/cluster-api-provider-scaleway)
- [Sidero](https://github.com/siderolabs/sidero)
- [Tinkerbell](https://github.com/tinkerbell/cluster-api-provider-tinkerbell)
- [vcluster](https://github.com/loft-sh/cluster-api-provider-vcluster)
Expand Down
72 changes: 69 additions & 3 deletions docs/book/src/user/quick-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ Additional documentation about experimental features can be found in [Experiment
Depending on the infrastructure provider you are planning to use, some additional prerequisites should be satisfied
before getting started with Cluster API. See below for the expected settings for common providers.

{{#tabs name:"tab-installation-infrastructure" tabs:"Akamai (Linode),AWS,Azure,CloudStack,DigitalOcean,Docker,Equinix Metal,GCP,Harvester,Hetzner,Hivelocity,Huawei,IBM Cloud,IONOS Cloud,K0smotron,KubeKey,KubeVirt,Metal3,Nutanix,OCI,OpenNebula,OpenStack,Outscale,Proxmox,VCD,vcluster,Virtink,vSphere,Vultr"}}
{{#tabs name:"tab-installation-infrastructure" tabs:"Akamai (Linode),AWS,Azure,CloudStack,DigitalOcean,Docker,Equinix Metal,GCP,Harvester,Hetzner,Hivelocity,Huawei,IBM Cloud,IONOS Cloud,K0smotron,KubeKey,KubeVirt,Metal3,Nutanix,OCI,OpenNebula,OpenStack,Outscale,Proxmox,Scaleway,VCD,vcluster,Virtink,vSphere,Vultr"}}
{{#tab Akamai (Linode)}}

```bash
Expand Down Expand Up @@ -794,6 +794,15 @@ project][Proxmox getting started guide].

{{#/tab }}

{{#tab Scaleway}}

```bash
# Initialize the management cluster
clusterctl init --infrastructure scaleway
```

{{#/tab }}

{{#tab VCD}}

Please follow the Cluster API Provider for [Cloud Director Getting Started Guide](https://github.com/vmware/cluster-api-provider-cloud-director/blob/main/README.md)
Expand Down Expand Up @@ -916,7 +925,7 @@ before configuring a cluster with Cluster API. Instructions are provided for com
Otherwise, you can look at the `clusterctl generate cluster` [command][clusterctl generate cluster] documentation for details about how to
discover the list of variables required by a cluster templates.

{{#tabs name:"tab-configuration-infrastructure" tabs:"Akamai (Linode),AWS,Azure,CloudStack,DigitalOcean,Docker,Equinix Metal,GCP,Harvester,Huawei,IBM Cloud,IONOS Cloud,K0smotron,KubeKey,KubeVirt,Metal3,Nutanix,OpenNebula,OpenStack,Outscale,Proxmox,Tinkerbell,VCD,vcluster,Virtink,vSphere,Vultr"}}
{{#tabs name:"tab-configuration-infrastructure" tabs:"Akamai (Linode),AWS,Azure,CloudStack,DigitalOcean,Docker,Equinix Metal,GCP,Harvester,Huawei,IBM Cloud,IONOS Cloud,K0smotron,KubeKey,KubeVirt,Metal3,Nutanix,OpenNebula,OpenStack,Outscale,Proxmox,Scaleway,Tinkerbell,VCD,vcluster,Virtink,vSphere,Vultr"}}
{{#tab Akamai (Linode)}}

```bash
Expand Down Expand Up @@ -1430,6 +1439,23 @@ export ALLOWED_NODES="[pve1,pve2,pve3]"

For more information about prerequisites and advanced setups for Proxmox, see the [Proxmox getting started guide].

{{#/tab }}
{{#tab Scaleway}}

```bash
# Scaleway credentials, project ID and region.
export SCW_ACCESS_KEY="<ACCESS_KEY>"
export SCW_SECRET_KEY="<SECRET_KEY>"
export SCW_PROJECT_ID="<PROJECT_ID>"
export SCW_REGION="fr-par"

# Scaleway Instance image names that will be used to provision servers.
export CONTROL_PLANE_MACHINE_IMAGE="<IMAGE_NAME>"
export WORKER_MACHINE_IMAGE="<IMAGE_NAME>"
```

For more information about prerequisites and advanced setups for CAPS, see the [CAPS getting started guide].

{{#/tab }}
{{#tab Tinkerbell}}

Expand Down Expand Up @@ -1715,7 +1741,7 @@ Note: To use the default clusterctl method to retrieve kubeconfig for a workload

The Kubernetes in-tree cloud provider implementations are being [removed](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers) in favor of external cloud providers (also referred to as "out-of-tree"). This requires deploying a new component called the cloud-controller-manager which is responsible for running all the cloud specific controllers that were previously run in the kube-controller-manager. To learn more, see [this blog post](https://kubernetes.io/blog/2019/04/17/the-future-of-cloud-providers-in-kubernetes/).

{{#tabs name:"tab-install-cloud-provider" tabs:"Azure,OpenStack"}}
{{#tabs name:"tab-install-cloud-provider" tabs:"Azure,OpenStack,Scaleway"}}
{{#tab Azure}}

Install the official cloud-provider-azure Helm chart on the workload cluster:
Expand Down Expand Up @@ -1761,6 +1787,45 @@ kubectl apply --kubeconfig=./capi-quickstart.kubeconfig -f https://raw.githubuse

Alternatively, refer to the [helm chart](https://github.com/kubernetes/cloud-provider-openstack/tree/master/charts/openstack-cloud-controller-manager).

{{#/tab }}
{{#tab Scaleway}}

Before deploying the Scaleway external cloud provider, you will need:

- Your Scaleway credentials (access key and secret key)
- Your Scaleway project ID
- The Scaleway region where your workload cluster is deployed
- The Private Network ID of your cluster (optional)

First, create the Secret named `scaleway-secret` in your workload cluster:

```bash
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: scaleway-secret
namespace: kube-system
type: Opaque
stringData:
SCW_ACCESS_KEY: "xxxxxxxxxxxxxxxx"
SCW_SECRET_KEY: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
SCW_DEFAULT_PROJECT_ID: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
SCW_DEFAULT_REGION: "fr-par"
SCW_DEFAULT_ZONE: "fr-par-1"
PN_ID: "" # If your have a private network on your cluster, you may set its ID here.
EOF
```

Finally, you can deploy the `scaleway-cloud-controller-manager`:

```bash
kubectl apply -f https://raw.githubusercontent.com/scaleway/scaleway-cloud-controller-manager/master/examples/k8s-scaleway-ccm-latest.yml
```

For more detailed information on configuring and using the Scaleway external cloud
provider, see the [scaleway-cloud-controller-manager repository](https://github.com/scaleway/scaleway-cloud-controller-manager).

{{#/tab }}
{{#/tabs }}

Expand Down Expand Up @@ -2011,3 +2076,4 @@ kind delete cluster
[Proxmox getting started guide]: https://github.com/ionos-cloud/cluster-api-provider-proxmox/blob/main/docs/Usage.md
[Tinkerbell getting started guide]: https://github.com/tinkerbell/cluster-api-provider-tinkerbell/blob/main/docs/QUICK-START.md
[CAPONE Wiki]: https://github.com/OpenNebula/cluster-api-provider-opennebula/wiki
[CAPS getting started guide]: https://github.com/scaleway/cluster-api-provider-scaleway/blob/main/docs/getting-started.md