Skip to content

Commit

Permalink
[release-v1.16] Add health check config and clean up duplicated code (k…
Browse files Browse the repository at this point in the history
…native#8308) (#1059)

* Add health check config and clean up duplicated code (knative#8308)

* Remove the duplicated health check

* Add the missing health check config

* Add the missing health check

* Remove the duplicated health check

* Fix non-blocking test

* Fix receive adapter probes path

* run `make generate-release`

---------

Co-authored-by: Yukun Wang <airycanon@airycanon.me>
  • Loading branch information
creydr and airycanon authored Feb 6, 2025
1 parent b71c3a2 commit e230f19
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 55 deletions.
38 changes: 0 additions & 38 deletions cmd/controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ import (
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"

"errors"
"log"
"net/http"
"os"
"time"

"knative.dev/pkg/injection/sharedmain"

filteredFactory "knative.dev/pkg/client/injection/kube/informers/factory/filtered"
Expand All @@ -51,36 +45,8 @@ import (
)

func main() {

ctx := signals.NewContext()

port := os.Getenv("PROBES_PORT")
if port == "" {
port = "8080"
}

// sets up liveness and readiness probes.
server := http.Server{
ReadTimeout: 5 * time.Second,
Handler: http.HandlerFunc(handler),
Addr: ":" + port,
}

go func() {

go func() {
<-ctx.Done()
_ = server.Shutdown(ctx)
}()

// start the web server on port and accept requests
log.Printf("Readiness and health check server listening on port %s", port)

if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal(err)
}
}()

ctx = filteredFactory.WithSelectors(ctx,
auth.OIDCLabelSelector,
eventingtls.TrustBundleLabelSelector,
Expand Down Expand Up @@ -115,7 +81,3 @@ func main() {
sugartrigger.NewController,
)
}

func handler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
19 changes: 19 additions & 0 deletions config/brokers/mt-channel-broker/deployments/controller.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,27 @@ spec:
drop:
- ALL

livenessProbe:
httpGet:
path: /health
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /readiness
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5

ports:
- name: metrics
containerPort: 9090
- name: profiling
containerPort: 8008
- name: probes
containerPort: 8080
19 changes: 19 additions & 0 deletions config/core/deployments/pingsource-mt-adapter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ spec:
- containerPort: 9090
name: metrics
protocol: TCP
- name: probes
containerPort: 8080
resources:
requests:
cpu: 125m
Expand All @@ -102,4 +104,21 @@ spec:
drop:
- ALL

livenessProbe:
httpGet:
path: /health
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /readiness
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5

serviceAccountName: pingsource-mt-adapter
19 changes: 19 additions & 0 deletions openshift/release/artifacts/eventing-core.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6506,6 +6506,8 @@ spec:
- containerPort: 9090
name: metrics
protocol: TCP
- name: probes
containerPort: 8080
resources:
requests:
cpu: 125m
Expand All @@ -6521,6 +6523,23 @@ spec:
drop:
- ALL

livenessProbe:
httpGet:
path: /health
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /readiness
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5

serviceAccountName: pingsource-mt-adapter
---
# Copyright 2018 The Knative Authors
Expand Down
19 changes: 19 additions & 0 deletions openshift/release/artifacts/mt-channel-broker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -799,11 +799,30 @@ spec:
drop:
- ALL

livenessProbe:
httpGet:
path: /health
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /readiness
port: probes
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5

ports:
- name: metrics
containerPort: 9090
- name: profiling
containerPort: 8008
- name: probes
containerPort: 8080
---
# Copyright 2020 The Knative Authors
#
Expand Down
13 changes: 0 additions & 13 deletions pkg/adapter/apiserver/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package apiserver
import (
"context"
"fmt"
"net/http"
"time"

cloudevents "github.com/cloudevents/sdk-go/v2"
Expand Down Expand Up @@ -126,20 +125,8 @@ func (a *apiServerAdapter) start(ctx context.Context, stopCh <-chan struct{}) er
}
}

srv := &http.Server{
Addr: ":8080",
// Configure read header timeout to overcome potential Slowloris Attack because ReadHeaderTimeout is not
// configured in the http.Server.
ReadHeaderTimeout: 10 * time.Second,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}),
}
go srv.ListenAndServe()

<-stopCh
stop <- struct{}{}
srv.Shutdown(ctx)
return nil
}

Expand Down
11 changes: 11 additions & 0 deletions pkg/adapter/v2/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,14 @@ func ConfiguratorOptionsFromContext(ctx context.Context) []ConfiguratorOption {
}
return value.([]ConfiguratorOption)
}

type healthProbesDisabledKey struct{}

// WithHealthProbesDisabled signals to MainWithContext that it should disable default probes (readiness and liveness).
func WithHealthProbesDisabled(ctx context.Context) context.Context {
return context.WithValue(ctx, healthProbesDisabledKey{}, struct{}{})
}

func HealthProbesDisabled(ctx context.Context) bool {
return ctx.Value(healthProbesDisabledKey{}) != nil
}
8 changes: 8 additions & 0 deletions pkg/adapter/v2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,14 @@ func MainWithInformers(ctx context.Context, component string, env EnvConfigAcces
}()
}

if !HealthProbesDisabled(ctx) {
wg.Add(1)
go func() {
defer wg.Done()
injection.ServeHealthProbes(ctx, injection.HealthCheckDefaultPort)
}()
}

// Finally start the adapter (blocking)
if err := adapter.Start(ctx); err != nil {
logger.Fatalw("Start returned an error", zap.Error(err))
Expand Down
1 change: 1 addition & 0 deletions pkg/adapter/v2/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ func TestMainWithContext(t *testing.T) {
}()

ctx := context.TODO()
ctx = WithHealthProbesDisabled(ctx)
ctx, _ = fakekubeclient.With(ctx)

MainWithContext(ctx, "mycomponent",
Expand Down
13 changes: 11 additions & 2 deletions pkg/reconciler/apiserversource/resources/receive_adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,22 @@ func MakeReceiveAdapter(args *ReceiveAdapterArgs) (*appsv1.Deployment, error) {
Name: "metrics",
ContainerPort: 9090,
}, {
Name: "health",
Name: "probes",
ContainerPort: 8080,
}},
ReadinessProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Port: intstr.FromString("health"),
Path: "readiness",
Port: intstr.FromString("probes"),
},
},
},
LivenessProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "health",
Port: intstr.FromString("probes"),
},
},
},
Expand Down
13 changes: 11 additions & 2 deletions pkg/reconciler/apiserversource/resources/receive_adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ O2dgzikq8iSy1BlRsVw=
Name: "metrics",
ContainerPort: 9090,
}, {
Name: "health",
Name: "probes",
ContainerPort: 8080,
}},
Env: []corev1.EnvVar{
Expand Down Expand Up @@ -187,7 +187,16 @@ O2dgzikq8iSy1BlRsVw=
ReadinessProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Port: intstr.FromString("health"),
Port: intstr.FromString("probes"),
Path: "readiness",
},
},
},
LivenessProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Port: intstr.FromString("probes"),
Path: "health",
},
},
},
Expand Down

0 comments on commit e230f19

Please sign in to comment.