Node Get and List
The Fuzzball scheduler provides commands to list all compute nodes and retrieve detailed information about specific nodes. These commands are essential for monitoring cluster health, capacity planning, and troubleshooting scheduling issues.
Compute node information requires that a fuzzball context is set up and authorized.
$ fuzzball context create <context_name> <api_url> <oidc_server_url> <oidc_client_id>
$ fuzzball context login -u <admin_username> -p '<admin_password>'The fuzzball node get command retrieves detailed information about a compute node.
$ fuzzball node get <node-id>$ fuzzball node get node-worker-01The command returns JSON output containing detailed information for the compute node:
{
"node": {
"id": "node-worker-01",
"hostname": "worker-node-01.cluster.local",
"status": 2,
"start_time": {
"seconds": 1724025600,
"nanos": 123456789
},
"update_time": {
"seconds": 1724025600,
"nanos": 987654321
}
},
"resource": {
"total": {
"cpu": {
"cores": 8,
"sockets": 1
},
"mem": {
"bytes": 17179869184
},
"devices": {
"cpu/x86_64": 1,
"io.fuzzball/storage": 1
}
},
"free": {
"cpu": {
"cores": 6,
"sockets": 1
},
"mem": {
"bytes": 12884901888
},
"devices": {
"cpu/x86_64": 1,
"io.fuzzball/storage": 1
}
},
"node": {
"cores": [
{"id": 0},
{"id": 1},
{"id": 2},
{"id": 3},
{"id": 4},
{"id": 5},
{"id": 6},
{"id": 7}
],
"free_cores": 6,
"memory_total_bytes": 17179869184,
"memory_free_bytes": 12884901888,
"memory_bytes_by_core": 2147483648,
"numa_nodes": [
{
"cores": [0, 1, 2, 3, 4, 5, 6, 7],
"free_cores": 6,
"memory_total_bytes": 17179869184,
"memory_free_bytes": 12884901888,
"memory_bytes_by_core": 2147483648
}
],
"sockets": [
{
"cores": [0, 1, 2, 3, 4, 5, 6, 7],
"free_cores": 6,
"numa_nodes": [0]
}
]
},
"annotations": {
"fuzzball.io/provisioner_backend": "kubernetes",
"fuzzball.io/provisioner_definition_id": "worker-nodes"
},
"plugin_devices": {
"list": {
"cpu/x86_64": {
"devices": [
{
"id": "cpu/x86_64",
"numa_node": 0
}
]
},
"io.fuzzball/storage": {
"devices": [
{
"id": "nvme0",
"numa_node": 0
}
]
}
}
}
}
}
The fuzzball node list command retrieves information about all compute nodes in the cluster.
$ fuzzball node listThe command returns JSON output containing detailed information for all compute nodes
{
"nodes": [
{
"node": {
"id": "node-worker-01",
"hostname": "worker-node-01.cluster.local",
"status": 2,
"start_time": {
"seconds": 1724025600,
"nanos": 123456789
},
"update_time": {
"seconds": 1724025600,
"nanos": 987654321
}
},
"resource": {
"total": {
"cpu": {
"cores": 8,
"sockets": 1
},
"mem": {
"bytes": 17179869184
},
"devices": {
"cpu/x86_64": 1,
"io.fuzzball/storage": 1
}
},
"free": {
"cpu": {
"cores": 6,
"sockets": 1
},
"mem": {
"bytes": 12884901888
},
"devices": {
"cpu/x86_64": 1,
"io.fuzzball/storage": 1
}
},
"node": {
"cores": [
{"id": 0},
{"id": 1},
{"id": 2},
{"id": 3},
{"id": 4},
{"id": 5},
{"id": 6},
{"id": 7}
],
"free_cores": 6,
"memory_total_bytes": 17179869184,
"memory_free_bytes": 12884901888,
"memory_bytes_by_core": 2147483648,
"numa_nodes": [
{
"cores": [0, 1, 2, 3, 4, 5, 6, 7],
"free_cores": 6,
"memory_total_bytes": 17179869184,
"memory_free_bytes": 12884901888,
"memory_bytes_by_core": 2147483648
}
],
"sockets": [
{
"cores": [0, 1, 2, 3, 4, 5, 6, 7],
"free_cores": 6,
"numa_nodes": [0]
}
]
},
"annotations": {
"fuzzball.io/provisioner_backend": "kubernetes",
"fuzzball.io/provisioner_definition_id": "worker-nodes"
},
"plugin_devices": {
"list": {
"cpu/x86_64": {
"devices": [
{
"id": "cpu/x86_64",
"numa_node": 0
}
]
},
"io.fuzzball/storage": {
"devices": [
{
"id": "nvme0",
"numa_node": 0
}
]
}
}
}
}
}
]
}
| Code | String | Description |
|---|---|---|
| 1 | Not Ready | Node is not ready |
| 2 | Ready | Node is active and operational |
| 3 | Offline | Node is unreachable |
| 4 | Cordoned | Node is unschedulable |
- Calculate utilization by comparing total vs free resources:
- CPU utilization: (total.cpu.cores - free.cpu.cores) / total.cpu.cores * 100%
- Memory utilization: (total.mem.bytes - free.mem.bytes) / total.mem.bytes * 100%
Use jq to filter node information.
Find active nodes:
$ fuzzball node list | jq '.nodes[] | select(.node.status == 2)'Get resource summary:
$ fuzzball node list | jq '.nodes[] | {id: .node.id, hostname: .node.hostname, cpu_free: .resource.free.cpu.cores, mem_free_gb: (.resource.free.mem.bytes / 1073741824 | floor)}'Count nodes by status:
$ fuzzball node list | jq '.nodes | group_by(.node.status) | map({status: .[0].node.status, count: length})'