local-path-provisioner icon indicating copy to clipboard operation
local-path-provisioner copied to clipboard

provisioner assumes that a node's metadata.name == metadata.labels["kubernetes.io/hostname"]

Open jan-g opened this issue 1 year ago • 1 comments

As per https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#built-in-node-labels -

[[[ The value of these labels is cloud provider specific and is not guaranteed to be reliable. For example, the value of kubernetes.io/hostname may be the same as the node name in some environments and a different value in other environments. ]]]

Assumptions around these being equal have caused related bugs with k8s itself, see: https://github.com/kubernetes/kubernetes/issues/125336

For non-shared nodes, using a MatchFields entry instead on metav1.ObjectNameField may prove more robust.

The main visible consequence of this is that the delete helper pod can't be scheduled, for clouds where metadata.name of a node doesn't align with its hostname label.

In terms of forward/backward compatibility, this code in createHelperPod

	if o.Node != "" {
		helperPod.Spec.NodeName = o.Node
	}

probably needs to distinguish between having a node name and having a selector (and just replicating the selector in the latter case, letting the scheduler find the right spot to place the pod).

jan-g avatar Jun 07 '24 08:06 jan-g