Skip to content

Commit a2b3288

Browse files
Merge pull request kubernetes#18060 from tnozicka/backport-statefulset-report-event-on-pod-recreate
Automatic merge from submit-queue (batch tested with PRs 15739, 18060). UPSTREAM: 55316: Make StatefulSet report an event when recreating failed pod /assign @mfojtik Origin-commit: 40c7741d493ea52cbb7333835f8eb00f48fff19d
2 parents 4a5a5b3 + f3fdbca commit a2b3288

File tree

4 files changed

+16
-6
lines changed

4 files changed

+16
-6
lines changed

pkg/controller/statefulset/stateful_set.go

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ func NewStatefulSetController(
101101
recorder),
102102
NewRealStatefulSetStatusUpdater(kubeClient, setInformer.Lister()),
103103
history.NewHistory(kubeClient, revInformer.Lister()),
104+
recorder,
104105
),
105106
pvcListerSynced: pvcInformer.Informer().HasSynced,
106107
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "statefulset"),

pkg/controller/statefulset/stateful_set_control.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
apps "k8s.io/api/apps/v1beta1"
2626
"k8s.io/api/core/v1"
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28+
"k8s.io/client-go/tools/record"
2829
"k8s.io/kubernetes/pkg/controller/history"
2930
)
3031

@@ -53,14 +54,16 @@ type StatefulSetControlInterface interface {
5354
func NewDefaultStatefulSetControl(
5455
podControl StatefulPodControlInterface,
5556
statusUpdater StatefulSetStatusUpdaterInterface,
56-
controllerHistory history.Interface) StatefulSetControlInterface {
57-
return &defaultStatefulSetControl{podControl, statusUpdater, controllerHistory}
57+
controllerHistory history.Interface,
58+
recorder record.EventRecorder) StatefulSetControlInterface {
59+
return &defaultStatefulSetControl{podControl, statusUpdater, controllerHistory, recorder}
5860
}
5961

6062
type defaultStatefulSetControl struct {
6163
podControl StatefulPodControlInterface
6264
statusUpdater StatefulSetStatusUpdaterInterface
6365
controllerHistory history.Interface
66+
recorder record.EventRecorder
6467
}
6568

6669
// UpdateStatefulSet executes the core logic loop for a stateful set, applying the predictable and
@@ -367,7 +370,8 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet(
367370
for i := range replicas {
368371
// delete and recreate failed pods
369372
if isFailed(replicas[i]) {
370-
glog.V(4).Infof("StatefulSet %s/%s is recreating failed Pod %s",
373+
ssc.recorder.Eventf(set, v1.EventTypeWarning, "RecreatingFailedPod",
374+
"StatefulSet %s/%s is recreating failed Pod %s",
371375
set.Namespace,
372376
set.Name,
373377
replicas[i].Name)

pkg/controller/statefulset/stateful_set_control_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import (
4141
appslisters "k8s.io/client-go/listers/apps/v1beta1"
4242
corelisters "k8s.io/client-go/listers/core/v1"
4343
"k8s.io/client-go/tools/cache"
44+
"k8s.io/client-go/tools/record"
4445
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
4546
"k8s.io/kubernetes/pkg/controller"
4647
"k8s.io/kubernetes/pkg/controller/history"
@@ -52,7 +53,8 @@ func setupController(client clientset.Interface) (*fakeStatefulPodControl, *fake
5253
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
5354
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
5455
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
55-
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()))
56+
recorder := record.NewFakeRecorder(10)
57+
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder)
5658

5759
stop := make(chan struct{})
5860
informerFactory.Start(stop)
@@ -452,7 +454,8 @@ func TestStatefulSetControl_getSetRevisions(t *testing.T) {
452454
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
453455
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
454456
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
455-
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())}
457+
recorder := record.NewFakeRecorder(10)
458+
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder}
456459

457460
stop := make(chan struct{})
458461
defer close(stop)

pkg/controller/statefulset/stateful_set_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"k8s.io/client-go/informers"
2929
"k8s.io/client-go/kubernetes/fake"
3030
"k8s.io/client-go/tools/cache"
31+
"k8s.io/client-go/tools/record"
3132
"k8s.io/kubernetes/pkg/controller"
3233
"k8s.io/kubernetes/pkg/controller/history"
3334
)
@@ -585,7 +586,8 @@ func newFakeStatefulSetController(initialObjects ...runtime.Object) (*StatefulSe
585586
ssh := history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())
586587
ssc.podListerSynced = alwaysReady
587588
ssc.setListerSynced = alwaysReady
588-
ssc.control = NewDefaultStatefulSetControl(fpc, ssu, ssh)
589+
recorder := record.NewFakeRecorder(10)
590+
ssc.control = NewDefaultStatefulSetControl(fpc, ssu, ssh, recorder)
589591

590592
return ssc, fpc
591593
}

0 commit comments

Comments
 (0)