Skip to content

Commit 9f1c29d

Browse files
committed
Add filter labels to catalog pod cache
Add catalogsource and update labels to pod cache to filter out the pods that are not managed by catalog-operator in OLM. The intention is to reduce the amount of cache for pod resources. Signed-off-by: Vu Dinh <[email protected]>
1 parent f87b076 commit 9f1c29d

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

pkg/controller/bundle/bundle_unpacker.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/operator-framework/operator-registry/pkg/api"
1111
"github.com/operator-framework/operator-registry/pkg/configmap"
12+
"github.com/sirupsen/logrus"
1213
batchv1 "k8s.io/api/batch/v1"
1314
corev1 "k8s.io/api/core/v1"
1415
rbacv1 "k8s.io/api/rbac/v1"
@@ -39,6 +40,7 @@ const (
3940
// The time duration should be in the same format as accepted by time.ParseDuration()
4041
// e.g 1m30s
4142
BundleUnpackTimeoutAnnotationKey = "operatorframework.io/bundle-unpack-timeout"
43+
BundleUnpackPodLabel = "job-name"
4244
)
4345

4446
type BundleUnpackResult struct {
@@ -225,6 +227,7 @@ type Unpacker interface {
225227
}
226228

227229
type ConfigMapUnpacker struct {
230+
logger *logrus.Logger
228231
opmImage string
229232
utilImage string
230233
client kubernetes.Interface
@@ -272,6 +275,12 @@ func WithUtilImage(utilImage string) ConfigMapUnpackerOption {
272275
}
273276
}
274277

278+
func WithLogger(logger *logrus.Logger) ConfigMapUnpackerOption {
279+
return func(unpacker *ConfigMapUnpacker) {
280+
unpacker.logger = logger
281+
}
282+
}
283+
275284
func WithClient(client kubernetes.Interface) ConfigMapUnpackerOption {
276285
return func(unpacker *ConfigMapUnpacker) {
277286
unpacker.client = client
@@ -505,9 +514,10 @@ func (c *ConfigMapUnpacker) UnpackBundle(lookup *operatorsv1alpha1.BundleLookup,
505514
func (c *ConfigMapUnpacker) pendingContainerStatusMessages(job *batchv1.Job) (string, error) {
506515
containerStatusMessages := []string{}
507516
// List pods for unpack job
508-
podLabel := map[string]string{"job-name": job.GetName()}
509-
pods, listErr := c.podLister.Pods(job.GetNamespace()).List(k8slabels.SelectorFromSet(podLabel))
517+
podLabel := map[string]string{BundleUnpackPodLabel: job.GetName()}
518+
pods, listErr := c.podLister.Pods(job.GetNamespace()).List(k8slabels.SelectorFromValidatedSet(podLabel))
510519
if listErr != nil {
520+
c.logger.Errorf("Failed to list pods for job(%s): %v", job.GetName(), listErr)
511521
return "", fmt.Errorf("Failed to list pods for job(%s): %v", job.GetName(), listErr)
512522
}
513523

pkg/controller/operators/catalog/operator.go

+29-5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"k8s.io/apimachinery/pkg/labels"
2727
"k8s.io/apimachinery/pkg/runtime"
2828
"k8s.io/apimachinery/pkg/runtime/schema"
29+
"k8s.io/apimachinery/pkg/selection"
2930
utilclock "k8s.io/apimachinery/pkg/util/clock"
3031
utilerrors "k8s.io/apimachinery/pkg/util/errors"
3132
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -310,10 +311,32 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
310311
op.lister.CoreV1().RegisterServiceLister(metav1.NamespaceAll, serviceInformer.Lister())
311312
sharedIndexInformers = append(sharedIndexInformers, serviceInformer.Informer())
312313

313-
// Wire Pods
314-
podInformer := k8sInformerFactory.Core().V1().Pods()
315-
op.lister.CoreV1().RegisterPodLister(metav1.NamespaceAll, podInformer.Lister())
316-
sharedIndexInformers = append(sharedIndexInformers, podInformer.Informer())
314+
// Wire Pods for CatalogSource
315+
catsrcReq, err := labels.NewRequirement(reconciler.CatalogSourceLabelKey, selection.Exists, nil)
316+
if err != nil {
317+
return nil, err
318+
}
319+
320+
csPodLabels := labels.NewSelector()
321+
csPodLabels = csPodLabels.Add(*catsrcReq)
322+
csPodInformer := informers.NewSharedInformerFactoryWithOptions(op.opClient.KubernetesInterface(), resyncPeriod(), informers.WithTweakListOptions(func(options *metav1.ListOptions) {
323+
options.LabelSelector = csPodLabels.String()
324+
})).Core().V1().Pods()
325+
op.lister.CoreV1().RegisterPodLister(metav1.NamespaceAll, csPodInformer.Lister())
326+
sharedIndexInformers = append(sharedIndexInformers, csPodInformer.Informer())
327+
328+
// Wire Pods for BundleUnpack job
329+
buReq, err := labels.NewRequirement(bundle.BundleUnpackPodLabel, selection.Exists, nil)
330+
if err != nil {
331+
return nil, err
332+
}
333+
334+
buPodLabels := labels.NewSelector()
335+
buPodLabels = buPodLabels.Add(*buReq)
336+
buPodInformer := informers.NewSharedInformerFactoryWithOptions(op.opClient.KubernetesInterface(), resyncPeriod(), informers.WithTweakListOptions(func(options *metav1.ListOptions) {
337+
options.LabelSelector = buPodLabels.String()
338+
})).Core().V1().Pods()
339+
sharedIndexInformers = append(sharedIndexInformers, buPodInformer.Informer())
317340

318341
// Wire ConfigMaps
319342
configMapInformer := k8sInformerFactory.Core().V1().ConfigMaps()
@@ -344,11 +367,12 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
344367

345368
// Setup the BundleUnpacker
346369
op.bundleUnpacker, err = bundle.NewConfigmapUnpacker(
370+
bundle.WithLogger(op.logger),
347371
bundle.WithClient(op.opClient.KubernetesInterface()),
348372
bundle.WithCatalogSourceLister(catsrcInformer.Lister()),
349373
bundle.WithConfigMapLister(configMapInformer.Lister()),
350374
bundle.WithJobLister(jobInformer.Lister()),
351-
bundle.WithPodLister(podInformer.Lister()),
375+
bundle.WithPodLister(buPodInformer.Lister()),
352376
bundle.WithRoleLister(roleInformer.Lister()),
353377
bundle.WithRoleBindingLister(roleBindingInformer.Lister()),
354378
bundle.WithOPMImage(configmapRegistryImage),

0 commit comments

Comments
 (0)