diff --git a/install.yaml b/install.yaml index dd38664ad..626624e74 100644 --- a/install.yaml +++ b/install.yaml @@ -147,6 +147,13 @@ spec: containers: - env: [] image: gcr.io/dm-k8s-testing/manager:latest + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 30 + timeoutSeconds: 1 name: manager ports: - containerPort: 8080 diff --git a/manager/main.go b/manager/main.go index 5296c58fa..0009a41d4 100644 --- a/manager/main.go +++ b/manager/main.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "github.com/kubernetes/deployment-manager/util" "github.com/kubernetes/deployment-manager/version" "flag" @@ -38,7 +39,9 @@ type Route struct { Type string } -var routes = []Route{} +var routes = []Route{ + {"HealthCheck", "/healthz", "GET", healthCheckHandlerFunc, ""}, +} // port to listen on var port = flag.Int("port", 8080, "The port to listen on") @@ -80,3 +83,9 @@ func main() { log.Printf("Listening on port %d...", *port) log.Fatal(http.ListenAndServe(address, handler)) } + +func healthCheckHandlerFunc(w http.ResponseWriter, r *http.Request) { + handler := "manager: get health" + util.LogHandlerEntry(handler, r) + util.LogHandlerExitWithText(handler, w, "OK", http.StatusOK) +} diff --git a/util/httputil.go b/util/httputil.go index a7a21484e..7a97c742f 100644 --- a/util/httputil.go +++ b/util/httputil.go @@ -129,6 +129,15 @@ func LogAndReturnError(handler string, statusCode int, err error, w http.Respons http.Error(w, err.Error(), statusCode) } +// LogHandlerExitWithText converts the given string to []byte, +// writes it to the response body, returns the given status, +// and then logs the response +func LogHandlerExitWithText(handler string, w http.ResponseWriter, v string, statusCode int) { + msg := []byte(v) + WriteResponse(handler, w, msg, "text/plain; charset=UTF-8", statusCode) + LogHandlerExit(handler, statusCode, string(msg), w) +} + // LogHandlerExitWithJSON marshals the given object as JSON, // writes it to the response body, returns the given status, and then logs the // response.