diff --git a/ui/src/pages/admin/Nodes.tsx b/ui/src/pages/admin/Nodes.tsx
index 4dff4473..8d5674bf 100644
--- a/ui/src/pages/admin/Nodes.tsx
+++ b/ui/src/pages/admin/Nodes.tsx
@@ -397,7 +397,7 @@ export default function AdminNodes() {
};
const isNodeSchedulable = (node: NodeInfo) => {
- return !node.taints.some(t => t.effect === 'NoSchedule' || t.effect === 'NoExecute');
+ return !node.taints?.some(t => t.effect === 'NoSchedule' || t.effect === 'NoExecute');
};
if (loading) {
@@ -494,7 +494,7 @@ export default function AdminNodes() {
Total CPU
- {stats.totalCapacity.cpu}
+ {stats.totalCapacity?.cpu ?? 'N/A'}
{stats.totalUsage && (
@@ -519,7 +519,7 @@ export default function AdminNodes() {
Total Memory
- {stats.totalCapacity.memory}
+ {stats.totalCapacity?.memory ?? 'N/A'}
{stats.totalUsage && (
@@ -537,6 +537,18 @@ export default function AdminNodes() {
)}
+ {nodes.length === 0 && !loading && (
+
+ No nodes found. This could mean:
+
+ - The Kubernetes cluster is not accessible
+ - The API server cannot connect to the cluster
+ - No nodes have been registered yet
+
+ Check that your kubeconfig is properly configured and the cluster is running.
+
+ )}
+
{nodes.map((node) => (
@@ -551,7 +563,7 @@ export default function AdminNodes() {
- {node.info.osImage} • {node.info.kubeletVersion}
+ {node.info?.osImage ?? 'Unknown OS'} • {node.info?.kubeletVersion ?? 'Unknown version'}
{node.provider && (
@@ -579,7 +591,7 @@ export default function AdminNodes() {
CPU
- {node.allocatable.cpu} cores
+ {node.allocatable?.cpu ?? 'N/A'} cores
{node.usage && (
@@ -592,7 +604,7 @@ export default function AdminNodes() {
Memory
- {node.allocatable.memory}
+ {node.allocatable?.memory ?? 'N/A'}
{node.usage && (
@@ -605,10 +617,10 @@ export default function AdminNodes() {
Pods
- {node.pods} / {node.allocatable.pods}
+ {node.pods ?? 0} / {node.allocatable?.pods ?? 'N/A'}
- {node.allocatable['nvidia.com/gpu'] && (
+ {node.allocatable?.['nvidia.com/gpu'] && (
GPUs
@@ -629,7 +641,7 @@ export default function AdminNodes() {
setLabelDialogOpen(true);
}}
>
- Labels ({Object.keys(node.labels).length})
+ Labels ({Object.keys(node.labels ?? {}).length})
@@ -690,7 +702,7 @@ export default function AdminNodes() {
Current Labels
- {selectedNode && Object.entries(selectedNode.labels).map(([key, value]) => (
+ {selectedNode && Object.entries(selectedNode.labels ?? {}).map(([key, value]) => (
- {selectedNode?.taints.map((taint) => (
+ {selectedNode?.taints?.map((taint) => (