Skip to content

Commit b27f976

Browse files
committed
feat: add readiness/liveness checks
This is using standard webhook-based checks. Signed-off-by: Andrey Smirnov <[email protected]>
1 parent c7a7265 commit b27f976

File tree

2 files changed

+51
-13
lines changed

2 files changed

+51
-13
lines changed

config/manager/manager.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ spec:
2525
image: controller:latest
2626
imagePullPolicy: Always
2727
name: manager
28+
ports:
29+
- containerPort: 9440
30+
name: healthz
31+
protocol: TCP
32+
readinessProbe:
33+
httpGet:
34+
path: /readyz
35+
port: healthz
36+
livenessProbe:
37+
httpGet:
38+
path: /healthz
39+
port: healthz
2840
resources:
2941
limits:
3042
cpu: 500m

main.go

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
ctrl "sigs.k8s.io/controller-runtime"
2020
"sigs.k8s.io/controller-runtime/pkg/controller"
2121
"sigs.k8s.io/controller-runtime/pkg/log/zap"
22+
"sigs.k8s.io/controller-runtime/pkg/manager"
2223

2324
bootstrapv1alpha3 "github.com/talos-systems/cluster-api-bootstrap-provider-talos/api/v1alpha3"
2425
"github.com/talos-systems/cluster-api-bootstrap-provider-talos/controllers"
@@ -29,6 +30,7 @@ var (
2930
setupLog = ctrl.Log.WithName("setup")
3031

3132
metricsAddr string
33+
healthAddr string
3234
enableLeaderElection bool
3335
webhookPort int
3436
watchFilterValue string
@@ -47,6 +49,9 @@ func InitFlags(fs *pflag.FlagSet) {
4749
fs.StringVar(&watchFilterValue, "watch-filter", "",
4850
fmt.Sprintf("Label value that the controller watches to reconcile cluster-api objects. Label key is always %s. If unspecified, the controller watches for all cluster-api objects.", capiv1.WatchLabel))
4951

52+
flag.StringVar(&healthAddr, "health-addr", ":9440",
53+
"The address the health endpoint binds to.")
54+
5055
feature.MutableGates.AddFlag(fs)
5156
}
5257

@@ -68,20 +73,35 @@ func main() {
6873
})
6974

7075
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
71-
MetricsBindAddress: metricsAddr,
72-
LeaderElection: enableLeaderElection,
73-
LeaderElectionID: "controller-leader-election-cabpt",
74-
Port: webhookPort,
75-
EventBroadcaster: broadcaster,
76+
MetricsBindAddress: metricsAddr,
77+
LeaderElection: enableLeaderElection,
78+
LeaderElectionID: "controller-leader-election-cabpt",
79+
Port: webhookPort,
80+
EventBroadcaster: broadcaster,
81+
HealthProbeBindAddress: healthAddr,
7682
})
7783
if err != nil {
7884
setupLog.Error(err, "unable to start manager")
7985
os.Exit(1)
8086
}
8187

82-
ctx := context.Background()
88+
ctx := ctrl.SetupSignalHandler()
89+
90+
setupReconcilers(ctx, mgr)
91+
setupWebhooks(mgr)
92+
setupChecks(mgr)
8393

84-
if err = (&controllers.TalosConfigReconciler{
94+
// +kubebuilder:scaffold:builder
95+
96+
setupLog.Info("starting manager")
97+
if err := mgr.Start(ctx); err != nil {
98+
setupLog.Error(err, "problem running manager")
99+
os.Exit(1)
100+
}
101+
}
102+
103+
func setupReconcilers(ctx context.Context, mgr manager.Manager) {
104+
if err := (&controllers.TalosConfigReconciler{
85105
Client: mgr.GetClient(),
86106
Log: ctrl.Log.WithName("controllers").WithName("TalosConfig"),
87107
Scheme: mgr.GetScheme(),
@@ -90,21 +110,27 @@ func main() {
90110
setupLog.Error(err, "unable to create controller", "controller", "TalosConfig")
91111
os.Exit(1)
92112
}
113+
}
93114

94-
if err = (&bootstrapv1alpha3.TalosConfigTemplate{}).SetupWebhookWithManager(mgr); err != nil {
115+
func setupWebhooks(mgr manager.Manager) {
116+
if err := (&bootstrapv1alpha3.TalosConfigTemplate{}).SetupWebhookWithManager(mgr); err != nil {
95117
setupLog.Error(err, "unable to create webhook", "webhook", "TalosConfigTemplate")
96118
os.Exit(1)
97119
}
98-
if err = (&bootstrapv1alpha3.TalosConfig{}).SetupWebhookWithManager(mgr); err != nil {
120+
if err := (&bootstrapv1alpha3.TalosConfig{}).SetupWebhookWithManager(mgr); err != nil {
99121
setupLog.Error(err, "unable to create webhook", "webhook", "TalosConfig")
100122
os.Exit(1)
101123
}
124+
}
102125

103-
// +kubebuilder:scaffold:builder
126+
func setupChecks(mgr ctrl.Manager) {
127+
if err := mgr.AddReadyzCheck("webhook", mgr.GetWebhookServer().StartedChecker()); err != nil {
128+
setupLog.Error(err, "unable to create ready check")
129+
os.Exit(1)
130+
}
104131

105-
setupLog.Info("starting manager")
106-
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
107-
setupLog.Error(err, "problem running manager")
132+
if err := mgr.AddHealthzCheck("webhook", mgr.GetWebhookServer().StartedChecker()); err != nil {
133+
setupLog.Error(err, "unable to create health check")
108134
os.Exit(1)
109135
}
110136
}

0 commit comments

Comments
 (0)