Commit 02f878cf authored by k8s-merge-robot's avatar k8s-merge-robot

Merge pull request #14553 from mesosphere/sttts-fix-daemonsets-on-mesos

Auto commit by PR queue bot
parents b3348c32 74e57e85
...@@ -85,6 +85,7 @@ apiserver: ...@@ -85,6 +85,7 @@ apiserver:
--cloud-config=/opt/mesos-cloud.conf --cloud-config=/opt/mesos-cloud.conf
--tls-cert-file=/var/run/kubernetes/auth/apiserver.crt --tls-cert-file=/var/run/kubernetes/auth/apiserver.crt
--tls-private-key-file=/var/run/kubernetes/auth/apiserver.key --tls-private-key-file=/var/run/kubernetes/auth/apiserver.key
--runtime-config=experimental/v1alpha1
--v=4 --v=4
ports: [ "8888:8888", "6443:6443" ] ports: [ "8888:8888", "6443:6443" ]
environment: environment:
......
...@@ -36,6 +36,7 @@ import ( ...@@ -36,6 +36,7 @@ import (
"k8s.io/kubernetes/contrib/mesos/pkg/node" "k8s.io/kubernetes/contrib/mesos/pkg/node"
"k8s.io/kubernetes/contrib/mesos/pkg/scheduler/meta" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/meta"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
unversionedapi "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/cache"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/controller/framework" "k8s.io/kubernetes/pkg/controller/framework"
...@@ -376,21 +377,25 @@ func (k *KubernetesExecutor) handleChangedApiserverPod(pod *api.Pod) { ...@@ -376,21 +377,25 @@ func (k *KubernetesExecutor) handleChangedApiserverPod(pod *api.Pod) {
oldPod := k.pods[task.podName] oldPod := k.pods[task.podName]
// terminating pod? // terminating pod?
if oldPod != nil && oldPod.DeletionTimestamp == nil && if oldPod != nil && pod.Status.Phase == api.PodRunning {
pod.DeletionTimestamp != nil && pod.Status.Phase == api.PodRunning && timeModified := differentTime(oldPod.DeletionTimestamp, pod.DeletionTimestamp)
pod.DeletionGracePeriodSeconds != nil && *pod.DeletionGracePeriodSeconds > 0 { graceModified := differentPeriod(oldPod.DeletionGracePeriodSeconds, pod.DeletionGracePeriodSeconds)
if timeModified || graceModified {
log.Infof("pod %s/%s is terminating at %v with %vs grace period, telling kubelet", pod.Namespace, pod.Name, *pod.DeletionTimestamp, *pod.DeletionGracePeriodSeconds) log.Infof("pod %s/%s is terminating at %v with %vs grace period, telling kubelet", pod.Namespace, pod.Name, *pod.DeletionTimestamp, *pod.DeletionGracePeriodSeconds)
// modify pod in our registry to avoid that other changed bleed into the kubelet // modify the pod in our registry instead of sending the new pod. The later
oldPod.DeletionTimestamp = pod.DeletionTimestamp // would allow that other changes bleed into the kubelet. For now we are
oldPod.DeletionGracePeriodSeconds = pod.DeletionGracePeriodSeconds // very conservative changing this behaviour.
// TODO(sttts): check whether we can and should send all changes down to the kubelet
update := kubelet.PodUpdate{ oldPod.DeletionTimestamp = pod.DeletionTimestamp
Op: kubelet.UPDATE, oldPod.DeletionGracePeriodSeconds = pod.DeletionGracePeriodSeconds
Pods: []*api.Pod{oldPod},
update := kubelet.PodUpdate{
Op: kubelet.UPDATE,
Pods: []*api.Pod{oldPod},
}
k.updateChan <- update
} }
k.updateChan <- update
} }
} }
...@@ -940,3 +945,11 @@ func (k *KubernetesExecutor) sendLoop() { ...@@ -940,3 +945,11 @@ func (k *KubernetesExecutor) sendLoop() {
} }
} }
} }
func differentTime(a, b *unversionedapi.Time) bool {
return (a == nil) != (b == nil) || (a != nil && b != nil && *a != *b)
}
func differentPeriod(a, b *int64) bool {
return (a == nil) != (b == nil) || (a != nil && b != nil && *a != *b)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment