Skip to content

Commit

Permalink
chore: Add liveness and readiness check for controllers (argoproj#837)
Browse files Browse the repository at this point in the history
* chore: Add liveness and readiness check for controllers

* rename
  • Loading branch information
whynowy committed Aug 17, 2020
1 parent 65880e4 commit 2e67610
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 3 deletions.
20 changes: 19 additions & 1 deletion controllers/eventbus/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
"sigs.k8s.io/controller-runtime/pkg/source"

Expand Down Expand Up @@ -45,18 +46,35 @@ func main() {
if !defined {
logger.Fatalf("required environment variable '%s' not defined", natsMetricsExporterEnvVar)
}
opts := ctrl.Options{}
opts := ctrl.Options{
MetricsBindAddress: ":8080",
HealthProbeBindAddress: ":8081",
}
if namespaced {
opts.Namespace = managedNamespace
}
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), opts)
if err != nil {
logger.Desugar().Fatal("unable to get a controller-runtime manager", zap.Error(err))
}

// Readyness probe
err = mgr.AddReadyzCheck("readiness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a readiness check", zap.Error(err))
}

// Liveness probe
err = mgr.AddHealthzCheck("liveness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a health check", zap.Error(err))
}

err = v1alpha1.AddToScheme(mgr.GetScheme())
if err != nil {
logger.Desugar().Fatal("unable to add scheme", zap.Error(err))
}

// A controller with DefaultControllerRateLimiter
c, err := controller.New(eventbus.ControllerName, mgr, controller.Options{
Reconciler: eventbus.NewReconciler(mgr.GetClient(), mgr.GetScheme(), natsStreamingImage, natsMetricsImage, logger),
Expand Down
19 changes: 18 additions & 1 deletion controllers/eventsource/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
"sigs.k8s.io/controller-runtime/pkg/source"

Expand Down Expand Up @@ -49,7 +50,10 @@ func main() {
if !defined {
logger.Fatalf("required environment variable '%s' not defined", eventSourceImageEnvVar)
}
opts := ctrl.Options{}
opts := ctrl.Options{
MetricsBindAddress: ":8080",
HealthProbeBindAddress: ":8081",
}
if namespaced {
opts.Namespace = managedNamespace
}
Expand All @@ -61,6 +65,19 @@ func main() {
if err != nil {
logger.Desugar().Fatal("unable to add EventSource scheme", zap.Error(err))
}

// Readyness probe
err = mgr.AddReadyzCheck("readiness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a readiness check", zap.Error(err))
}

// Liveness probe
err = mgr.AddHealthzCheck("liveness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a health check", zap.Error(err))
}

err = eventbusv1alpha1.AddToScheme(mgr.GetScheme())
if err != nil {
logger.Desugar().Fatal("unable to add EventBus scheme", zap.Error(err))
Expand Down
19 changes: 18 additions & 1 deletion controllers/sensor/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
"sigs.k8s.io/controller-runtime/pkg/source"

Expand Down Expand Up @@ -64,14 +65,30 @@ func main() {
if !defined {
logger.Fatalf("required environment variable '%s' not defined", sensorImageEnvVar)
}
opts := ctrl.Options{}
opts := ctrl.Options{
MetricsBindAddress: ":8080",
HealthProbeBindAddress: ":8081",
}
if namespaced {
opts.Namespace = managedNamespace
}
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), opts)
if err != nil {
logger.Desugar().Fatal("unable to get a controller-runtime manager", zap.Error(err))
}

// Readyness probe
err = mgr.AddReadyzCheck("readiness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a readiness check", zap.Error(err))
}

// Liveness probe
err = mgr.AddHealthzCheck("liveness", healthz.Ping)
if err != nil {
logger.Desugar().Fatal("unable add a health check", zap.Error(err))
}

err = v1alpha1.AddToScheme(mgr.GetScheme())
if err != nil {
logger.Desugar().Fatal("unable to add Sensor scheme", zap.Error(err))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,16 @@ spec:
value: nats-streaming:0.17.0
- name: NATS_METRICS_EXPORTER_IMAGE
value: synadia/prometheus-nats-exporter:0.6.2
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3

Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,15 @@ spec:
fieldPath: metadata.namespace
- name: EVENTSOURCE_IMAGE
value: argoproj/eventsource:latest
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
12 changes: 12 additions & 0 deletions manifests/base/sensor-controller/sensor-controller-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,15 @@ spec:
fieldPath: metadata.namespace
- name: SENSOR_IMAGE
value: argoproj/sensor:latest
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
36 changes: 36 additions & 0 deletions manifests/install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,19 @@ spec:
value: synadia/prometheus-nats-exporter:0.6.2
image: argoproj/eventbus-controller:v0.17.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: eventbus-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa
---
apiVersion: apps/v1
Expand Down Expand Up @@ -294,7 +306,19 @@ spec:
value: argoproj/eventsource:v0.17.0
image: argoproj/eventsource-controller:v0.17.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: eventsource-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa
---
apiVersion: apps/v1
Expand All @@ -321,5 +345,17 @@ spec:
- name: SENSOR_IMAGE
value: argoproj/sensor:v0.17.0
image: argoproj/sensor-controller:v0.17.0
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: sensor-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa
36 changes: 36 additions & 0 deletions manifests/namespace-install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,19 @@ spec:
value: synadia/prometheus-nats-exporter:0.6.2
image: argoproj/eventbus-controller:v0.17.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: eventbus-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa
---
apiVersion: apps/v1
Expand Down Expand Up @@ -213,7 +225,19 @@ spec:
value: argoproj/eventsource:v0.17.0
image: argoproj/eventsource-controller:v0.17.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: eventsource-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa
---
apiVersion: apps/v1
Expand Down Expand Up @@ -242,5 +266,17 @@ spec:
- name: SENSOR_IMAGE
value: argoproj/sensor:v0.17.0
image: argoproj/sensor-controller:v0.17.0
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
name: sensor-controller
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 3
periodSeconds: 3
serviceAccountName: argo-events-sa

0 comments on commit 2e67610

Please sign in to comment.