From a5307305f1e893b0ace48c4efc91062d832b42cb Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Mon, 14 Sep 2015 13:08:55 +0000 Subject: [PATCH] avoid recovery for mirrored pods on failover --- contrib/mesos/pkg/scheduler/scheduler.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contrib/mesos/pkg/scheduler/scheduler.go b/contrib/mesos/pkg/scheduler/scheduler.go index fc722a5370c..e0bbf69cdf3 100644 --- a/contrib/mesos/pkg/scheduler/scheduler.go +++ b/contrib/mesos/pkg/scheduler/scheduler.go @@ -44,6 +44,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" + "k8s.io/kubernetes/pkg/kubelet" "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/tools" @@ -923,6 +924,12 @@ func (ks *KubernetesScheduler) recoverTasks() error { ks.slaves.checkAndAdd(slaveId, t.Offer.Host()) } for _, pod := range podList.Items { + if _, isMirrorPod := pod.Annotations[kubelet.ConfigMirrorAnnotationKey]; isMirrorPod { + // mirrored pods are never reconciled because the scheduler isn't responsible for + // scheduling them; they're started by the executor/kubelet upon instantiation and + // reflected in the apiserver afterward. the scheduler has no knowledge of them. + continue + } if t, ok, err := podtask.RecoverFrom(pod); err != nil { log.Errorf("failed to recover task from pod, will attempt to delete '%v/%v': %v", pod.Namespace, pod.Name, err) err := ks.client.Pods(pod.Namespace).Delete(pod.Name, nil)