diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 8e69c3de..1a9326c1 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -28,7 +28,6 @@ func init() { // +kubebuilder:scaffold:scheme } -// nolint:gocyclo func main() { var ( provisionerName string diff --git a/pkg/controller/eviction_controller.go b/pkg/controller/eviction_controller.go index 62aeaba3..d6f75c00 100644 --- a/pkg/controller/eviction_controller.go +++ b/pkg/controller/eviction_controller.go @@ -83,15 +83,6 @@ func (r *CsiDriverLvmReconciler) Reconcile(ctx context.Context, req ctrl.Request return ctrl.Result{}, fmt.Errorf("unable to fetch pod %q: %w", req.NamespacedName, err) } - //on node drain -> pod gets evicted - hasDisruptionTarget := hasDisruptionCondition(pod.Status.Conditions) - //on missed disruptionTarget - isUnscheduled := isUnscheduled(pod.Status.Conditions) - - if !hasDisruptionTarget && !isUnscheduled { - return ctrl.Result{}, nil - } - belongs := map[string]bool{} for _, or := range pod.OwnerReferences { if or.Kind != "StatefulSet" { @@ -153,22 +144,25 @@ func (r *CsiDriverLvmReconciler) Reconcile(ctx context.Context, req ctrl.Request continue } - if isUnscheduled { - if pv.Spec.NodeAffinity != nil && pv.Spec.NodeAffinity.Required != nil { - if len(pv.Spec.NodeAffinity.Required.NodeSelectorTerms) != 1 { - return ctrl.Result{}, fmt.Errorf("unexpected node-affinity in pv in csi-driver-lvm managed pv %s", pv.Name) - } + if pv.Spec.NodeAffinity == nil || pv.Spec.NodeAffinity.Required == nil { + // no node affinity on the pv => we do not need to delete anything + continue + } - var node corev1.Node - if err := r.Get(ctx, types.NamespacedName{Name: pv.Spec.NodeAffinity.Required.NodeSelectorTerms[0].MatchExpressions[0].Values[0]}, &node); err != nil { - return ctrl.Result{}, fmt.Errorf("unable to fetch node %q: %w", pod.Spec.NodeName, err) - } - if !node.Spec.Unschedulable { - continue - } - } else { - continue - } + if len(pv.Spec.NodeAffinity.Required.NodeSelectorTerms) != 1 { + return ctrl.Result{}, fmt.Errorf("unexpected node-affinity in pv in csi-driver-lvm managed pv %s", pv.Name) + } + + var node corev1.Node + err = r.Get(ctx, types.NamespacedName{Name: pv.Spec.NodeAffinity.Required.NodeSelectorTerms[0].MatchExpressions[0].Values[0]}, &node) + if client.IgnoreNotFound(err) != nil { + return ctrl.Result{}, fmt.Errorf("unable to fetch node %q: %w", pod.Spec.NodeName, err) + } + + if err == nil && !node.Spec.Unschedulable { + // as long as the node is present and schedulable, we do not need to delete the pvc + // this can happen for instance on pod eviction through a pod autoscaler + continue } r.Log.Info("trying to delete pvc because of eviction",