mirror of https://github.com/portainer/portainer
fix(node): check more node role labels [EE-6968] (#11658)
Co-authored-by: testa113 <testa113>pull/11666/head
parent
48cf27a3b8
commit
2463648161
|
@ -23,14 +23,12 @@ function StatusCell({
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="whitespace-nowrap">
|
<div className="inline-flex whitespace-nowrap gap-x-2">
|
||||||
<StatusBadge color={status === 'Ready' ? 'success' : 'warning'}>
|
<StatusBadge color={status === 'Ready' ? 'success' : 'warning'}>
|
||||||
{status}
|
{status}
|
||||||
</StatusBadge>
|
</StatusBadge>
|
||||||
{node.spec?.unschedulable && (
|
{node.spec?.unschedulable && (
|
||||||
<StatusBadge color="warning" className="mt-2">
|
<StatusBadge color="warning">SchedulingDisabled</StatusBadge>
|
||||||
SchedulingDisabled
|
|
||||||
</StatusBadge>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,14 +7,35 @@ export function getInternalNodeIpAddress(node?: Node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// most kube clusters set control-plane label, older clusters set master, microk8s doesn't have either but instead sets microk8s-controlplane
|
// most kube clusters set control-plane label, older clusters set master, microk8s doesn't have either but instead sets microk8s-controlplane
|
||||||
const masterLabels = [
|
const controlPlaneLabels = [
|
||||||
'node-role.kubernetes.io/control-plane',
|
'node-role.kubernetes.io/control-plane',
|
||||||
'node-role.kubernetes.io/master',
|
'node-role.kubernetes.io/master',
|
||||||
'node.kubernetes.io/microk8s-controlplane',
|
'node.kubernetes.io/microk8s-controlplane',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const roleLabels = ['kubernetes.io/role'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the role of the node based on the labels.
|
||||||
|
* @param node The node to get the role of.
|
||||||
|
* It uses similar logic to https://github.com/kubernetes/kubectl/blob/04bb64c802171066ed0d886c437590c0b7ff1ed3/pkg/describe/describe.go#L5523C1-L5541C2 ,
|
||||||
|
* but only returns 'Control plane' or 'Worker'. It also has an additional check for microk8s.
|
||||||
|
*/
|
||||||
export function getRole(node: Node): 'Control plane' | 'Worker' {
|
export function getRole(node: Node): 'Control plane' | 'Worker' {
|
||||||
return masterLabels.some((label) => node.metadata?.labels?.[label])
|
const hasControlPlaneLabel = controlPlaneLabels.some(
|
||||||
? 'Control plane'
|
(label) =>
|
||||||
: 'Worker';
|
// the label can be set to an empty string, so we need to check for undefined
|
||||||
|
// e.g. node-role.kubernetes.io/control-plane: ""
|
||||||
|
node.metadata?.labels?.[label] !== undefined
|
||||||
|
);
|
||||||
|
const hasControlPlaneLabelValue = roleLabels.some(
|
||||||
|
(label) =>
|
||||||
|
node.metadata?.labels?.[label] === 'control-plane' ||
|
||||||
|
node.metadata?.labels?.[label] === 'master'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hasControlPlaneLabel || hasControlPlaneLabelValue) {
|
||||||
|
return 'Control plane';
|
||||||
|
}
|
||||||
|
return 'Worker';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue