> ## Documentation Index
> Fetch the complete documentation index at: https://docs.costgraph.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported cloud providers

> Clouds where the operator recognises Kubernetes nodes and volumes

The operator recognises Kubernetes nodes and volumes on these providers.
Machines elsewhere, including on-prem, can be priced by assigning a price.

* Amazon Web Services
* Google Cloud
* Microsoft Azure
* DigitalOcean
* Hetzner
* OVHcloud
* STACKIT
* Akamai (Linode)
* Scaleway
* Exoscale
* Vultr
* Oracle Cloud Infrastructure
* Civo
* UpCloud
* IBM Cloud
* Alibaba Cloud

## UpCloud Managed Kubernetes

UpCloud doesn't record a node's server plan on the node, so CostGraph can't tell
which plan an UpCloud node runs. Until you label them, those nodes aren't priced.
Add the plan as the `node.kubernetes.io/instance-type` label on each node group.

UpCloud only accepts labels when a node group is created, so set the label on new
node groups. For a node group that already exists, label its nodes directly, or
replace the group with a labelled one.

### Find the plan

Run `upctl kubernetes show <cluster>`. The **Plan** column lists each node
group's plan, for example `2xCPU-4GB` or `DEV-2xCPU-4GB`. Use that value exactly.

### Label a new node group

With the UpCloud CLI:

```shell theme={null}
upctl kubernetes nodegroup create <cluster> \
  --name workers --count 3 --plan 2xCPU-4GB \
  --label node.kubernetes.io/instance-type=2xCPU-4GB
```

With Terraform, set the same key in the node group's `labels`. Terraform replaces
an existing node group to apply a label change:

```hcl theme={null}
resource "upcloud_kubernetes_node_group" "workers" {
  cluster    = upcloud_kubernetes_cluster.main.id
  name       = "workers"
  node_count = 3
  plan       = "2xCPU-4GB"
  labels = {
    "node.kubernetes.io/instance-type" = "2xCPU-4GB"
  }
}
```

### Label existing nodes

Label each node with its group's plan:

```shell theme={null}
kubectl label node <node> node.kubernetes.io/instance-type=2xCPU-4GB
```

CostGraph prices the node on its next sync. A label set this way stays only on
that node, so nodes UpCloud adds or replaces later need it again. Labelling the
node group avoids that.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.