fix(node): check more node role labels [EE-6968] (#11658)

Co-authored-by: testa113 <testa113>
pull/11666/head
Ali 7 months ago committed by GitHub
parent 48cf27a3b8
commit 2463648161
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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…
Cancel
Save