Skip to content

Commit 4c126b0

Browse files
filter failed pods to prevent Istiod from OOMKills (#58250)
* filter failed pods Signed-off-by: Rama Chavali <rama.rao@salesforce.com> * change all pod clients Signed-off-by: Rama Chavali <rama.rao@salesforce.com> * add krt controllers Signed-off-by: Rama Chavali <rama.rao@salesforce.com> --------- Signed-off-by: Rama Chavali <rama.rao@salesforce.com>
1 parent 96b385a commit 4c126b0

File tree

7 files changed

+7
-0
lines changed

7 files changed

+7
-0
lines changed

pilot/pkg/config/kube/ingress/controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ func NewController(
154154
Pods: krt.NewInformerFiltered[*corev1.Pod](client, kclient.Filter{
155155
ObjectFilter: client.ObjectFilter(),
156156
ObjectTransform: kube.StripPodUnusedFields,
157+
FieldSelector: "status.phase!=Failed",
157158
}, opts.WithName("informer/Pods")...),
158159
MeshConfig: meshConfig.AsCollection(),
159160
}

pilot/pkg/config/kube/ingress/status_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ func makeTestInformers(t *testing.T, name string) informers {
263263
pods := krt.NewInformerFiltered[*corev1.Pod](client, kclient.Filter{
264264
ObjectFilter: client.ObjectFilter(),
265265
ObjectTransform: kube.StripPodUnusedFields,
266+
FieldSelector: "status.phase!=Failed",
266267
}, opts.WithName("informer/Pods")...)
267268
inf := informers{
268269
mesh: meshHolder,

pilot/pkg/controllers/untaint/nodeuntainter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ func NewNodeUntainter(stop <-chan struct{}, kubeClient kubelib.Client, cniNs, sy
6868
podsClient := kclient.NewFiltered[*v1.Pod](kubeClient, kclient.Filter{
6969
ObjectFilter: kubetypes.NewStaticObjectFilter(filterNamespace(ns)),
7070
ObjectTransform: kubelib.StripPodUnusedFields,
71+
FieldSelector: "status.phase!=Failed",
7172
})
7273
nodes := kclient.NewFiltered[*v1.Node](kubeClient, kclient.Filter{ObjectTransform: kubelib.StripNodeUnusedFields})
7374
nt := &NodeUntainter{

pilot/pkg/serviceregistry/kube/controller/ambient/ambientindex.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ func New(options Options) Index {
205205
Pods := krt.NewInformerFiltered[*corev1.Pod](options.Client, kclient.Filter{
206206
ObjectFilter: options.Client.ObjectFilter(),
207207
ObjectTransform: kubeclient.StripPodUnusedFields,
208+
FieldSelector: "status.phase!=Failed",
208209
}, opts.With(
209210
krt.WithName("informer/Pods"),
210211
krt.WithMetadata(krt.Metadata{

pilot/pkg/serviceregistry/kube/controller/ambient/multicluster/cluster.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func (c *Cluster) Run(localMeshConfig meshwatcher.WatcherCollection, debugger *k
219219
Pods := krt.NewInformerFiltered[*corev1.Pod](c.Client, kclient.Filter{
220220
ObjectFilter: c.Client.ObjectFilter(),
221221
ObjectTransform: kube.StripPodUnusedFields,
222+
FieldSelector: "status.phase!=Failed",
222223
}, opts.With(
223224
krt.WithName("informer/Pods"),
224225
krt.WithMetadata(krt.Metadata{

pilot/pkg/serviceregistry/kube/controller/controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ func NewController(kubeClient kubelib.Client, options Options) *Controller {
293293
c.podsClient = kclient.NewFiltered[*v1.Pod](kubeClient, kclient.Filter{
294294
ObjectFilter: kubeClient.ObjectFilter(),
295295
ObjectTransform: kubelib.StripPodUnusedFields,
296+
FieldSelector: "status.phase!=Failed",
296297
})
297298
c.pods = newPodCache(c, c.podsClient, func(key types.NamespacedName) {
298299
c.queue.Push(func() error {

security/pkg/server/ca/node_auth.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ func NewClusterNodeAuthorizer(client kube.Client, trustedNodeAccounts sets.Set[t
7575
pods := kclient.NewFiltered[*v1.Pod](client, kclient.Filter{
7676
ObjectFilter: client.ObjectFilter(),
7777
ObjectTransform: kube.StripPodUnusedFields,
78+
FieldSelector: "status.phase!=Failed",
7879
})
7980
// Add an Index on the pods, storing the service account and node. This allows us to later efficiently query.
8081
index := kclient.CreateIndex[SaNode, *v1.Pod](pods, "saNode", func(pod *v1.Pod) []SaNode {

0 commit comments

Comments
 (0)