diff --git a/node/pod.go b/node/pod.go index bb07cef44..5176b5338 100644 --- a/node/pod.go +++ b/node/pod.go @@ -259,6 +259,12 @@ func (pc *PodController) updatePodStatus(ctx context.Context, podFromKubernetes kPod.Lock() podFromProvider := kPod.lastPodStatusReceivedFromProvider.DeepCopy() kPod.Unlock() + + if podFromProvider == nil { + log.G(ctx).Debug("No pod status received from provider yet, skipping update") + return nil + } + // Pod deleted by provider due some reasons. e.g. a K8s provider, pod created by deployment would be evicted when node is not ready. // If we do not delete pod in K8s, deployment would not create a new one. if podFromProvider.DeletionTimestamp != nil && podFromKubernetes.DeletionTimestamp == nil { diff --git a/node/podcontroller.go b/node/podcontroller.go index 3680784d3..b8a5e4c3e 100644 --- a/node/podcontroller.go +++ b/node/podcontroller.go @@ -358,6 +358,7 @@ func (pc *PodController) Run(ctx context.Context, podSyncWorkers int) (retErr er kPod := obj.(*knownPod) kPod.Lock() if kPod.lastPodStatusUpdateSkipped && + kPod.lastPodStatusReceivedFromProvider != nil && (!cmp.Equal(newPod.Status, kPod.lastPodStatusReceivedFromProvider.Status) || !cmp.Equal(newPod.Annotations, kPod.lastPodStatusReceivedFromProvider.Annotations) || !cmp.Equal(newPod.Labels, kPod.lastPodStatusReceivedFromProvider.Labels) ||