Reduce log noise on SELinux mount mismatch

The Desired State of World can require a different SELinux mount context than
is in the Actual State of World and it's perfectly OK. For example when
user changes SELinux context of Pods or when the context is reconstructed
after kubelet restart.

Don't spam log and don't report errors to the user as event - reconciler
will do the right thing and unmount the old volume (with wrong context) and
mount a new one in the next reconciliation. It's not an error, it's
expected workflow.
This commit is contained in:
Jan Safranek 2022-10-26 14:05:23 +02:00
parent 7ad4b04632
commit a910d83070

View File

@ -220,10 +220,10 @@ func (rc *reconciler) mountOrAttachVolumes() {
volMounted, devicePath, err := rc.actualStateOfWorld.PodExistsInVolume(volumeToMount.PodName, volumeToMount.VolumeName, volumeToMount.PersistentVolumeSize, volumeToMount.SELinuxLabel) volMounted, devicePath, err := rc.actualStateOfWorld.PodExistsInVolume(volumeToMount.PodName, volumeToMount.VolumeName, volumeToMount.PersistentVolumeSize, volumeToMount.SELinuxLabel)
volumeToMount.DevicePath = devicePath volumeToMount.DevicePath = devicePath
if cache.IsSELinuxMountMismatchError(err) { if cache.IsSELinuxMountMismatchError(err) {
// TODO: check error message + lower frequency, this can be noisy // The volume is mounted, but with an unexpected SELinux context.
klog.ErrorS(err, volumeToMount.GenerateErrorDetailed("mount precondition failed, please report this error in https://github.com/kubernetes/enhancements/issues/1710, together with full Pod yaml file", err).Error(), "pod", klog.KObj(volumeToMount.Pod)) // It will get unmounted in unmountVolumes / unmountDetachDevices and
// TODO: report error better, this may be too noisy // then removed from actualStateOfWorld.
rc.desiredStateOfWorld.AddErrorToPod(volumeToMount.PodName, err.Error()) continue
} else if cache.IsVolumeNotAttachedError(err) { } else if cache.IsVolumeNotAttachedError(err) {
rc.waitForVolumeAttach(volumeToMount) rc.waitForVolumeAttach(volumeToMount)
} else if !volMounted || cache.IsRemountRequiredError(err) { } else if !volMounted || cache.IsRemountRequiredError(err) {