local-path-provisioner
local-path-provisioner copied to clipboard
provisioner assumes that a node's metadata.name == metadata.labels["kubernetes.io/hostname"]
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).