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 admin context is set up and authorized.
$ fuzzball admin context create <context_name> <api_url>
$ fuzzball admin context login -u <admin_username> -p '<admin_password>'
The fuzzball admin scheduler node get command retrieves detailed information about a compute node.
fuzzball admin scheduler node get <node-id>
$ fuzzball admin scheduler node get node-worker-01
The 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 admin scheduler node list command retrieves information about all compute nodes in the cluster.
$ fuzzball admin scheduler node list
The 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 admin scheduler node list | jq '.nodes[] | select(.node.status == 2)'
Get resource summary:
$ fuzzball admin scheduler 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 admin scheduler node list | jq '.nodes | group_by(.node.status) | map({status: .[0].node.status, count: length})'