Skip to content

Commit

Permalink
Merge pull request #2156 from cpanato/GH-1855
Browse files Browse the repository at this point in the history
✨ Add liveness/readiness probes
  • Loading branch information
k8s-ci-robot committed Jan 28, 2020
2 parents 52117a9 + 333c719 commit 54420c4
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 11 deletions.
19 changes: 16 additions & 3 deletions cmd/example-provider/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"sigs.k8s.io/cluster-api/controllers"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/healthz"
)

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

cfg := ctrl.GetConfigOrDie()

// Setup a Manager
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
Scheme: scheme.Scheme,
LeaderElection: enableLeaderElection,
MetricsBindAddress: metricsAddr,
Scheme: scheme.Scheme,
LeaderElection: enableLeaderElection,
MetricsBindAddress: metricsAddr,
HealthProbeBindAddress: healthAddr,
})
if err != nil {
klog.Fatalf("Failed to set up controller manager: %v", err)
Expand All @@ -67,6 +72,14 @@ func main() {
os.Exit(1)
}

if err := mgr.AddReadyzCheck("ping", healthz.Ping); err != nil {
klog.Fatalf("unable to create health check: %v", err)
}

if err := mgr.AddHealthzCheck("ping", healthz.Ping); err != nil {
klog.Fatalf("unable to create health check: %v", err)
}

if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
klog.Fatalf("Failed to run manager: %v", err)
}
Expand Down
12 changes: 12 additions & 0 deletions config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,18 @@ spec:
- --enable-leader-election
image: controller:latest
name: manager
ports:
- containerPort: 9440
name: healthz
protocol: TCP
readinessProbe:
httpGet:
path: /readyz
port: healthz
livenessProbe:
httpGet:
path: /healthz
port: healthz
terminationGracePeriodSeconds: 10
tolerations:
- effect: NoSchedule
Expand Down
32 changes: 24 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
clusterv1alpha2 "sigs.k8s.io/cluster-api/api/v1alpha2"
clusterv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3"
"sigs.k8s.io/cluster-api/controllers"
"sigs.k8s.io/controller-runtime/pkg/healthz"
// +kubebuilder:scaffold:imports
)

Expand Down Expand Up @@ -65,6 +66,7 @@ func main() {
machinePoolConcurrency int
syncPeriod time.Duration
webhookPort int
healthAddr string
)

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

flag.StringVar(&healthAddr, "health-addr", ":9440",
"The address the health endpoint binds to.")

flag.Parse()

ctrl.SetLogger(klogr.New())
Expand All @@ -112,14 +117,15 @@ func main() {
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
Scheme: scheme,
MetricsBindAddress: metricsAddr,
LeaderElection: enableLeaderElection,
LeaderElectionID: "controller-leader-election-capi",
Namespace: watchNamespace,
SyncPeriod: &syncPeriod,
NewClient: newClientFunc,
Port: webhookPort,
Scheme: scheme,
MetricsBindAddress: metricsAddr,
LeaderElection: enableLeaderElection,
LeaderElectionID: "controller-leader-election-capi",
Namespace: watchNamespace,
SyncPeriod: &syncPeriod,
NewClient: newClientFunc,
Port: webhookPort,
HealthProbeBindAddress: healthAddr,
})
if err != nil {
setupLog.Error(err, "unable to start manager")
Expand Down Expand Up @@ -225,6 +231,16 @@ func main() {
}
}

if err := mgr.AddReadyzCheck("ping", healthz.Ping); err != nil {
setupLog.Error(err, "unable to create ready check")
os.Exit(1)
}

if err := mgr.AddHealthzCheck("ping", healthz.Ping); err != nil {
setupLog.Error(err, "unable to create health check")
os.Exit(1)
}

// +kubebuilder:scaffold:builder
setupLog.Info("starting manager")
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
Expand Down

0 comments on commit 54420c4

Please sign in to comment.