Skip to content

Commit 333c719

Browse files
committed
add health endpoints
1 parent 506cb9a commit 333c719

File tree

3 files changed

+52
-11
lines changed

3 files changed

+52
-11
lines changed

cmd/example-provider/main.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"sigs.k8s.io/cluster-api/controllers"
2727
ctrl "sigs.k8s.io/controller-runtime"
2828
"sigs.k8s.io/controller-runtime/pkg/controller"
29+
"sigs.k8s.io/controller-runtime/pkg/healthz"
2930
)
3031

3132
func main() {
@@ -34,17 +35,21 @@ func main() {
3435
flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
3536
"Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.")
3637
var metricsAddr string
38+
var healthAddr string
3739
flag.StringVar(&metricsAddr, "metrics-addr", ":8080",
3840
"The address the metric endpoint binds to.")
41+
flag.StringVar(&healthAddr, "health-addr", ":9440",
42+
"The address the health endpoint binds to.")
3943
flag.Parse()
4044

4145
cfg := ctrl.GetConfigOrDie()
4246

4347
// Setup a Manager
4448
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
45-
Scheme: scheme.Scheme,
46-
LeaderElection: enableLeaderElection,
47-
MetricsBindAddress: metricsAddr,
49+
Scheme: scheme.Scheme,
50+
LeaderElection: enableLeaderElection,
51+
MetricsBindAddress: metricsAddr,
52+
HealthProbeBindAddress: healthAddr,
4853
})
4954
if err != nil {
5055
klog.Fatalf("Failed to set up controller manager: %v", err)
@@ -67,6 +72,14 @@ func main() {
6772
os.Exit(1)
6873
}
6974

75+
if err := mgr.AddReadyzCheck("ping", healthz.Ping); err != nil {
76+
klog.Fatalf("unable to create health check: %v", err)
77+
}
78+
79+
if err := mgr.AddHealthzCheck("ping", healthz.Ping); err != nil {
80+
klog.Fatalf("unable to create health check: %v", err)
81+
}
82+
7083
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
7184
klog.Fatalf("Failed to run manager: %v", err)
7285
}

config/manager/manager.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ spec:
2929
- --enable-leader-election
3030
image: controller:latest
3131
name: manager
32+
ports:
33+
- containerPort: 9440
34+
name: healthz
35+
protocol: TCP
36+
readinessProbe:
37+
httpGet:
38+
path: /readyz
39+
port: healthz
40+
livenessProbe:
41+
httpGet:
42+
path: /healthz
43+
port: healthz
3244
terminationGracePeriodSeconds: 10
3345
tolerations:
3446
- effect: NoSchedule

main.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
clusterv1alpha2 "sigs.k8s.io/cluster-api/api/v1alpha2"
3636
clusterv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3"
3737
"sigs.k8s.io/cluster-api/controllers"
38+
"sigs.k8s.io/controller-runtime/pkg/healthz"
3839
// +kubebuilder:scaffold:imports
3940
)
4041

@@ -65,6 +66,7 @@ func main() {
6566
machinePoolConcurrency int
6667
syncPeriod time.Duration
6768
webhookPort int
69+
healthAddr string
6870
)
6971

7072
flag.StringVar(&metricsAddr, "metrics-addr", ":8080",
@@ -100,6 +102,9 @@ func main() {
100102
flag.IntVar(&webhookPort, "webhook-port", 9443,
101103
"Webhook Server port (set to 0 to disable)")
102104

105+
flag.StringVar(&healthAddr, "health-addr", ":9440",
106+
"The address the health endpoint binds to.")
107+
103108
flag.Parse()
104109

105110
ctrl.SetLogger(klogr.New())
@@ -112,14 +117,15 @@ func main() {
112117
}
113118

114119
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
115-
Scheme: scheme,
116-
MetricsBindAddress: metricsAddr,
117-
LeaderElection: enableLeaderElection,
118-
LeaderElectionID: "controller-leader-election-capi",
119-
Namespace: watchNamespace,
120-
SyncPeriod: &syncPeriod,
121-
NewClient: newClientFunc,
122-
Port: webhookPort,
120+
Scheme: scheme,
121+
MetricsBindAddress: metricsAddr,
122+
LeaderElection: enableLeaderElection,
123+
LeaderElectionID: "controller-leader-election-capi",
124+
Namespace: watchNamespace,
125+
SyncPeriod: &syncPeriod,
126+
NewClient: newClientFunc,
127+
Port: webhookPort,
128+
HealthProbeBindAddress: healthAddr,
123129
})
124130
if err != nil {
125131
setupLog.Error(err, "unable to start manager")
@@ -225,6 +231,16 @@ func main() {
225231
}
226232
}
227233

234+
if err := mgr.AddReadyzCheck("ping", healthz.Ping); err != nil {
235+
setupLog.Error(err, "unable to create ready check")
236+
os.Exit(1)
237+
}
238+
239+
if err := mgr.AddHealthzCheck("ping", healthz.Ping); err != nil {
240+
setupLog.Error(err, "unable to create health check")
241+
os.Exit(1)
242+
}
243+
228244
// +kubebuilder:scaffold:builder
229245
setupLog.Info("starting manager")
230246
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {

0 commit comments

Comments
 (0)