@@ -18,16 +18,18 @@ import (
18
18
"github.com/spf13/cobra"
19
19
corev1 "k8s.io/api/core/v1"
20
20
"k8s.io/apimachinery/pkg/api/errors"
21
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21
22
"k8s.io/apimachinery/pkg/runtime"
22
23
"k8s.io/apimachinery/pkg/types"
23
24
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
24
25
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
25
26
_ "k8s.io/client-go/plugin/pkg/client/auth"
26
27
"k8s.io/client-go/util/retry"
28
+ "k8s.io/utils/pointer"
27
29
ctrl "sigs.k8s.io/controller-runtime"
30
+ "sigs.k8s.io/controller-runtime/pkg/builder"
28
31
"sigs.k8s.io/controller-runtime/pkg/client"
29
32
"sigs.k8s.io/controller-runtime/pkg/controller"
30
- "sigs.k8s.io/controller-runtime/pkg/event"
31
33
"sigs.k8s.io/controller-runtime/pkg/handler"
32
34
"sigs.k8s.io/controller-runtime/pkg/healthz"
33
35
"sigs.k8s.io/controller-runtime/pkg/metrics"
@@ -60,6 +62,10 @@ var runCmd = &cobra.Command{
60
62
LeaderElection : true ,
61
63
LeaderElectionID : "node-labeler.gitpod.io" ,
62
64
Namespace : namespace ,
65
+ // default sync period is 10h.
66
+ // in case node-labeler is restarted and not change happens, we could waste (at least) 20m in a node
67
+ // that never will run workspaces and the additional nodes cluster-autoscaler adds to compensate
68
+ SyncPeriod : pointer .Duration (1 * time .Minute ),
63
69
})
64
70
if err != nil {
65
71
log .WithError (err ).Fatal ("unable to start node-labeber" )
@@ -74,35 +80,32 @@ var runCmd = &cobra.Command{
74
80
client ,
75
81
}
76
82
77
- c , err := controller .New ("pod-watcher" , mgr , controller.Options {
78
- Reconciler : r ,
79
- MaxConcurrentReconciles : 20 ,
83
+ filterPredicate , err := predicate .LabelSelectorPredicate (metav1.LabelSelector {
84
+ MatchLabels : map [string ]string {
85
+ "required-by-node-labeler" : "true" ,
86
+ },
80
87
})
88
+ if err != nil {
89
+ log .WithError (err ).Fatal ("unable to create predicate" )
90
+ }
91
+
92
+ err = ctrl .NewControllerManagedBy (mgr ).
93
+ Named ("pod-watcher" ).
94
+ For (& corev1.Pod {}).
95
+ Watches (
96
+ & source.Kind {Type : & corev1.Pod {}},
97
+ & handler.EnqueueRequestForObject {},
98
+ builder .WithPredicates (filterPredicate ),
99
+ ).
100
+ WithOptions (controller.Options {MaxConcurrentReconciles : 20 }).
101
+ Complete (r )
81
102
if err != nil {
82
103
log .WithError (err ).Fatal ("unable to bind controller watch event handler" )
83
104
}
84
105
85
106
metrics .Registry .MustRegister (NodeLabelerCounterVec )
86
107
metrics .Registry .MustRegister (NodeLabelerTimeHistVec )
87
108
88
- err = c .Watch (& source.Kind {Type : & corev1.Pod {}}, & handler.EnqueueRequestForObject {}, predicate.Funcs {
89
- CreateFunc : func (ce event.CreateEvent ) bool {
90
- return processPodEvent (ce .Object )
91
- },
92
- UpdateFunc : func (ue event.UpdateEvent ) bool {
93
- return processPodEvent (ue .ObjectNew )
94
- },
95
- DeleteFunc : func (deleteEvent event.DeleteEvent ) bool {
96
- return processPodEvent (deleteEvent .Object )
97
- },
98
- GenericFunc : func (genericEvent event.GenericEvent ) bool {
99
- return false
100
- },
101
- })
102
- if err != nil {
103
- log .WithError (err ).Fatal ("unable to create controller" )
104
- }
105
-
106
109
err = mgr .AddHealthzCheck ("healthz" , healthz .Ping )
107
110
if err != nil {
108
111
log .WithError (err ).Fatal ("unable to set up health check" )
@@ -132,14 +135,6 @@ var (
132
135
scheme = runtime .NewScheme ()
133
136
)
134
137
135
- func processPodEvent (pod client.Object ) bool {
136
- if strings .HasPrefix (pod .GetName (), registryFacade ) || strings .HasPrefix (pod .GetName (), wsDaemon ) {
137
- return true
138
- }
139
-
140
- return false
141
- }
142
-
143
138
type PodReconciler struct {
144
139
client.Client
145
140
}
@@ -181,7 +176,7 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req reconcile.Request) (r
181
176
ipAddress = pod .Status .PodIP
182
177
port = strconv .Itoa (wsdaemonPort )
183
178
default :
184
- log . WithField ( "pod" , pod . Name ). Info ( "Invalid pod. Skipping..." )
179
+ // nothing to do
185
180
return reconcile.Result {}, nil
186
181
}
187
182
0 commit comments