Exoscale¶
Exoscale cloud provider requires you to input the credentials as an apikey and an apisecret.
Compute and DNS example¶
apiVersion: v1
kind: Secret
metadata:
name: exoscale-secret
data:
apikey: <base64-encoded-api-key>
apisecret: <base64-encoded-api-secret>
type: Opaque
Create Exoscale API credentials¶
You can create Exoscale API credentials by following this guide. The required permissions for the API key are:
- Compute: full access (instances, security groups, SSH keys)
- DNS: full access (if using Exoscale as DNS provider)
DNS setup¶
If you wish to use Exoscale as your DNS provider where Claudie creates DNS records pointing to Claudie managed clusters, you will need to create a DNS zone by following this guide.
Exoscale is not my domain registrar
If you haven't acquired a domain via Exoscale and wish to utilize Exoscale for hosting your zone, you will need to point your domain's nameservers to Exoscale's DNS servers (ns1.exoscale.io, ns1.exoscale.com, ns1.exoscale.net, ns1.exoscale.ch). Alternatively, you can delegate a subdomain to Exoscale.
Available regions¶
Exoscale operates in the following regions:
| Region | Location |
|---|---|
ch-gva-2 |
Geneva, Switzerland |
de-fra-1 |
Frankfurt, Germany |
de-muc-1 |
Munich, Germany |
at-vie-1 |
Vienna, Austria |
at-vie-2 |
Vienna, Austria |
bg-sof-1 |
Sofia, Bulgaria |
GPU instances¶
Exoscale offers GPU instance types with built-in NVIDIA GPUs. GPU instances are used by setting the serverType to a GPU instance type (e.g., gpu2.small). No additional machineSpec configuration is needed — the GPU is included in the instance type.
GPU availability
GPU instance types and availability may vary by zone and require account authorization. You can list available GPU instance types using the Exoscale CLI:
exo compute instance-type list --verbose | grep -i gpu
Alternatively, check the Exoscale instance types page for current offerings.
Input manifest examples¶
Create a secret for Exoscale provider¶
The secret for an Exoscale provider must include the following mandatory fields: apikey and apisecret.
kubectl create secret generic exoscale-secret-1 --namespace=<your-namespace> --from-literal=apikey='<your-api-key>' --from-literal=apisecret='<your-api-secret>'
Single-provider, multi-region cluster example¶
apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
name: exoscale-example-manifest
labels:
app.kubernetes.io/part-of: claudie
spec:
providers:
- name: exoscale-1
providerType: exoscale
# Exoscale templates are supported from claudie-config v0.9.17+
templates:
repository: "https://github.com/berops/claudie-config"
tag: v0.9.17
path: "templates/terraformer/exoscale"
secretRef:
name: exoscale-secret-1
namespace: <your-namespace>
nodePools:
dynamic:
- name: control-exo
providerSpec:
# Name of the provider instance.
name: exoscale-1
# Region of the nodepool.
region: ch-gva-2
count: 1
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
- name: compute-1-exo
providerSpec:
# Name of the provider instance.
name: exoscale-1
# Region of the nodepool.
region: de-fra-1
count: 2
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
storageDiskSize: 50
- name: compute-2-exo
providerSpec:
# Name of the provider instance.
name: exoscale-1
# Region of the nodepool.
region: at-vie-1
count: 2
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
storageDiskSize: 50
kubernetes:
clusters:
- name: exoscale-cluster
version: v1.31.0
network: 192.168.2.0/24
pools:
control:
- control-exo
compute:
- compute-1-exo
- compute-2-exo
Multi-provider, multi-region clusters example¶
kubectl create secret generic exoscale-secret-1 --namespace=<your-namespace> --from-literal=apikey='<your-api-key>' --from-literal=apisecret='<your-api-secret>'
kubectl create secret generic exoscale-secret-2 --namespace=<your-namespace> --from-literal=apikey='<your-api-key>' --from-literal=apisecret='<your-api-secret>'
apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
name: exoscale-example-manifest
labels:
app.kubernetes.io/part-of: claudie
spec:
providers:
- name: exoscale-1
providerType: exoscale
# Exoscale templates are supported from claudie-config v0.9.17+
templates:
repository: "https://github.com/berops/claudie-config"
tag: v0.9.17
path: "templates/terraformer/exoscale"
secretRef:
name: exoscale-secret-1
namespace: <your-namespace>
- name: exoscale-2
providerType: exoscale
# Exoscale templates are supported from claudie-config v0.9.17+
templates:
repository: "https://github.com/berops/claudie-config"
tag: v0.9.17
path: "templates/terraformer/exoscale"
secretRef:
name: exoscale-secret-2
namespace: <your-namespace>
nodePools:
dynamic:
- name: control-exo-1
providerSpec:
# Name of the provider instance.
name: exoscale-1
# Region of the nodepool.
region: ch-gva-2
count: 1
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
- name: control-exo-2
providerSpec:
# Name of the provider instance.
name: exoscale-2
# Region of the nodepool.
region: de-fra-1
count: 2
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
- name: compute-exo-1
providerSpec:
# Name of the provider instance.
name: exoscale-1
# Region of the nodepool.
region: ch-gva-2
count: 2
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
storageDiskSize: 50
- name: compute-exo-2
providerSpec:
# Name of the provider instance.
name: exoscale-2
# Region of the nodepool.
region: at-vie-1
count: 2
# Instance type name.
serverType: standard.medium
# OS image template name.
image: "Linux Ubuntu 24.04 LTS 64-bit"
storageDiskSize: 50
kubernetes:
clusters:
- name: exoscale-cluster
version: v1.31.0
network: 192.168.2.0/24
pools:
control:
- control-exo-1
- control-exo-2
compute:
- compute-exo-1
- compute-exo-2