mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-18 16:21:13 +00:00
Make StatefulSet report an event when recreating failed pod
This commit is contained in:
parent
33f873dbbe
commit
f6af1904cd
@ -99,6 +99,7 @@ func NewStatefulSetController(
|
|||||||
recorder),
|
recorder),
|
||||||
NewRealStatefulSetStatusUpdater(kubeClient, setInformer.Lister()),
|
NewRealStatefulSetStatusUpdater(kubeClient, setInformer.Lister()),
|
||||||
history.NewHistory(kubeClient, revInformer.Lister()),
|
history.NewHistory(kubeClient, revInformer.Lister()),
|
||||||
|
recorder,
|
||||||
),
|
),
|
||||||
pvcListerSynced: pvcInformer.Informer().HasSynced,
|
pvcListerSynced: pvcInformer.Informer().HasSynced,
|
||||||
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "statefulset"),
|
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "statefulset"),
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1beta1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/client-go/tools/record"
|
||||||
"k8s.io/kubernetes/pkg/controller/history"
|
"k8s.io/kubernetes/pkg/controller/history"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -53,14 +54,16 @@ type StatefulSetControlInterface interface {
|
|||||||
func NewDefaultStatefulSetControl(
|
func NewDefaultStatefulSetControl(
|
||||||
podControl StatefulPodControlInterface,
|
podControl StatefulPodControlInterface,
|
||||||
statusUpdater StatefulSetStatusUpdaterInterface,
|
statusUpdater StatefulSetStatusUpdaterInterface,
|
||||||
controllerHistory history.Interface) StatefulSetControlInterface {
|
controllerHistory history.Interface,
|
||||||
return &defaultStatefulSetControl{podControl, statusUpdater, controllerHistory}
|
recorder record.EventRecorder) StatefulSetControlInterface {
|
||||||
|
return &defaultStatefulSetControl{podControl, statusUpdater, controllerHistory, recorder}
|
||||||
}
|
}
|
||||||
|
|
||||||
type defaultStatefulSetControl struct {
|
type defaultStatefulSetControl struct {
|
||||||
podControl StatefulPodControlInterface
|
podControl StatefulPodControlInterface
|
||||||
statusUpdater StatefulSetStatusUpdaterInterface
|
statusUpdater StatefulSetStatusUpdaterInterface
|
||||||
controllerHistory history.Interface
|
controllerHistory history.Interface
|
||||||
|
recorder record.EventRecorder
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateStatefulSet executes the core logic loop for a stateful set, applying the predictable and
|
// UpdateStatefulSet executes the core logic loop for a stateful set, applying the predictable and
|
||||||
@ -367,7 +370,8 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet(
|
|||||||
for i := range replicas {
|
for i := range replicas {
|
||||||
// delete and recreate failed pods
|
// delete and recreate failed pods
|
||||||
if isFailed(replicas[i]) {
|
if isFailed(replicas[i]) {
|
||||||
glog.V(4).Infof("StatefulSet %s/%s is recreating failed Pod %s",
|
ssc.recorder.Eventf(set, v1.EventTypeWarning, "RecreatingFailedPod",
|
||||||
|
"StatefulSet %s/%s is recreating failed Pod %s",
|
||||||
set.Namespace,
|
set.Namespace,
|
||||||
set.Name,
|
set.Name,
|
||||||
replicas[i].Name)
|
replicas[i].Name)
|
||||||
|
@ -41,6 +41,7 @@ import (
|
|||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
|
"k8s.io/client-go/tools/record"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/controller/history"
|
"k8s.io/kubernetes/pkg/controller/history"
|
||||||
@ -52,7 +53,8 @@ func setupController(client clientset.Interface) (*fakeStatefulPodControl, *fake
|
|||||||
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
||||||
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
||||||
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
||||||
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()))
|
recorder := record.NewFakeRecorder(10)
|
||||||
|
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder)
|
||||||
|
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
@ -452,7 +454,8 @@ func TestStatefulSetControl_getSetRevisions(t *testing.T) {
|
|||||||
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
||||||
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
||||||
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
||||||
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())}
|
recorder := record.NewFakeRecorder(10)
|
||||||
|
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder}
|
||||||
|
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
|
"k8s.io/client-go/tools/record"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/controller/history"
|
"k8s.io/kubernetes/pkg/controller/history"
|
||||||
)
|
)
|
||||||
@ -585,7 +586,8 @@ func newFakeStatefulSetController(initialObjects ...runtime.Object) (*StatefulSe
|
|||||||
ssh := history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())
|
ssh := history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())
|
||||||
ssc.podListerSynced = alwaysReady
|
ssc.podListerSynced = alwaysReady
|
||||||
ssc.setListerSynced = alwaysReady
|
ssc.setListerSynced = alwaysReady
|
||||||
ssc.control = NewDefaultStatefulSetControl(fpc, ssu, ssh)
|
recorder := record.NewFakeRecorder(10)
|
||||||
|
ssc.control = NewDefaultStatefulSetControl(fpc, ssu, ssh, recorder)
|
||||||
|
|
||||||
return ssc, fpc
|
return ssc, fpc
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user