Skip to content

Commit 467bbe8

Browse files
committed
OPTIM/MINOR: watch only specific configmaps
1 parent d50d53f commit 467bbe8

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

pkg/k8s/main.go

+23-5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import (
3333
k8ssync "github.com/haproxytech/kubernetes-ingress/pkg/k8s/sync"
3434
"github.com/haproxytech/kubernetes-ingress/pkg/utils"
3535
crdclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
36+
"k8s.io/apimachinery/pkg/fields"
37+
3638
errGw "k8s.io/apimachinery/pkg/api/errors"
3739
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3840
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -155,7 +157,7 @@ func (k k8s) MonitorChanges(eventChan chan k8ssync.SyncDataEvent, stop chan stru
155157
informersSynced := &[]cache.InformerSynced{}
156158
k.runPodInformer(eventChan, stop, informersSynced)
157159
for _, namespace := range k.whiteListedNS {
158-
k.runInformers(eventChan, stop, namespace, informersSynced)
160+
k.runInformers(eventChan, stop, namespace, informersSynced, osArgs)
159161
k.runCRInformers(eventChan, stop, namespace, informersSynced, k.crs)
160162
if gatewayAPIInstalled {
161163
k.runInformersGwAPI(eventChan, stop, namespace, informersSynced)
@@ -206,7 +208,21 @@ func (k k8s) runCRInformers(eventChan chan k8ssync.SyncDataEvent, stop chan stru
206208
}
207209
}
208210

209-
func (k k8s) runInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct{}, namespace string, informersSynced *[]cache.InformerSynced) {
211+
func (k k8s) runConfigMapInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct{}, informersSynced *[]cache.InformerSynced, configMap utils.NamespaceValue) {
212+
if configMap.Name != "" {
213+
fieldSelector := fields.OneTermEqualSelector("metadata.name", configMap.Name).String()
214+
factory := k8sinformers.NewSharedInformerFactoryWithOptions(k.builtInClient, k.cacheResyncPeriod, k8sinformers.WithNamespace(configMap.Namespace),
215+
k8sinformers.WithTweakListOptions(func(opts *metav1.ListOptions) {
216+
opts.FieldSelector = fieldSelector
217+
}))
218+
219+
cmi := k.getConfigMapInformer(eventChan, factory)
220+
go cmi.Run(stop)
221+
*informersSynced = append(*informersSynced, cmi.HasSynced)
222+
}
223+
}
224+
225+
func (k k8s) runInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct{}, namespace string, informersSynced *[]cache.InformerSynced, osArgs utils.OSArgs) {
210226
factory := k8sinformers.NewSharedInformerFactoryWithOptions(k.builtInClient, k.cacheResyncPeriod, k8sinformers.WithNamespace(namespace))
211227
// Core.V1 Resources
212228
nsi := k.getNamespaceInfomer(eventChan, factory)
@@ -215,10 +231,12 @@ func (k k8s) runInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct
215231
go svci.Run(stop)
216232
seci := k.getSecretInformer(eventChan, factory)
217233
go seci.Run(stop)
218-
cmi := k.getConfigMapInformer(eventChan, factory)
219-
go cmi.Run(stop)
234+
*informersSynced = append(*informersSynced, svci.HasSynced, nsi.HasSynced, seci.HasSynced)
220235

221-
*informersSynced = append(*informersSynced, svci.HasSynced, nsi.HasSynced, seci.HasSynced, cmi.HasSynced)
236+
k.runConfigMapInformers(eventChan, stop, informersSynced, osArgs.ConfigMap)
237+
k.runConfigMapInformers(eventChan, stop, informersSynced, osArgs.ConfigMapTCPServices)
238+
k.runConfigMapInformers(eventChan, stop, informersSynced, osArgs.ConfigMapErrorFiles)
239+
k.runConfigMapInformers(eventChan, stop, informersSynced, osArgs.ConfigMapPatternFiles)
222240

223241
// Ingress and IngressClass Resources
224242
ii, ici := k.getIngressInformers(eventChan, factory)

pkg/store/events.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,9 @@ func (k *K8s) EventConfigMap(ns *Namespace, data *ConfigMap) (updateRequired boo
212212
}
213213
*cm = *data
214214
cm.Loaded = true
215-
updateRequired = true
215+
if !cm.Empty() {
216+
updateRequired = true
217+
}
216218
logger.Debugf("configmap '%s/%s' processed", cm.Namespace, cm.Name)
217219
case MODIFIED:
218220
if cm.Equal(data) {
@@ -224,7 +226,9 @@ func (k *K8s) EventConfigMap(ns *Namespace, data *ConfigMap) (updateRequired boo
224226
case DELETED:
225227
cm.Loaded = false
226228
cm.Annotations = map[string]string{}
227-
updateRequired = true
229+
if !cm.Empty() {
230+
updateRequired = true
231+
}
228232
logger.Debugf("configmap '%s/%s' deleted", cm.Namespace, cm.Name)
229233
}
230234
return updateRequired

pkg/store/types-equal.go

+11
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ func (a *ConfigMap) Equal(b *ConfigMap) bool {
7777
return true
7878
}
7979

80+
// Empty checks if configmap is empty
81+
func (a *ConfigMap) Empty() bool {
82+
if a == nil {
83+
return true
84+
}
85+
if len(a.Annotations) == 0 {
86+
return true
87+
}
88+
return false
89+
}
90+
8091
// Equal compares two secrets, ignores statuses and old values
8192
func (a *Secret) Equal(b *Secret) bool {
8293
if a == nil || b == nil {

0 commit comments

Comments
 (0)