diff --git a/pkg/k8sclient/k8sclient.go b/pkg/k8sclient/k8sclient.go index a96113538..988621468 100644 --- a/pkg/k8sclient/k8sclient.go +++ b/pkg/k8sclient/k8sclient.go @@ -91,6 +91,11 @@ func (c *ClientInfo) GetPodContext(ctx context.Context, namespace, name string) return c.Client.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{}) } +// GetPodLive does a live API query for the pod, instead of using informers, for cases when a failure occurred, as to prevent a cache miss. +func (c *ClientInfo) GetPodLive(namespace, name string) (*v1.Pod, error) { + return c.Client.CoreV1().Pods(namespace).Get(context.TODO(), name, metav1.GetOptions{}) +} + // DeletePod deletes a pod from kubernetes func (c *ClientInfo) DeletePod(namespace, name string) error { return c.Client.CoreV1().Pods(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{}) diff --git a/pkg/multus/multus.go b/pkg/multus/multus.go index 532ec1193..8d4f0e90d 100644 --- a/pkg/multus/multus.go +++ b/pkg/multus/multus.go @@ -558,9 +558,7 @@ func GetPod(kubeClient *k8s.ClientInfo, k8sArgs *types.K8sArgs, isDel bool) (*v1 // Try one more time to get the pod directly from the apiserver; // TODO: figure out why static pods don't show up via the informer // and always hit this case. - ctx, cancel := context.WithTimeout(context.TODO(), pollDuration) - defer cancel() - pod, err = kubeClient.GetPodContext(ctx, podNamespace, podName) + pod, err = kubeClient.GetPodLive(podNamespace, podName) if err != nil { return nil, cmdErr(k8sArgs, "error waiting for pod: %v", err) }