mirror of
https://github.com/kubernetes/node-problem-detector.git
synced 2026-08-28 01:47:20 +00:00
add options pkg
This commit is contained in:
@@ -17,11 +17,9 @@ limitations under the License.
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"net"
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
@@ -29,57 +27,13 @@ import (
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
"k8s.io/node-problem-detector/pkg/kernelmonitor"
|
||||
"k8s.io/node-problem-detector/pkg/options"
|
||||
"k8s.io/node-problem-detector/pkg/problemclient"
|
||||
"k8s.io/node-problem-detector/pkg/problemdetector"
|
||||
"k8s.io/node-problem-detector/pkg/version"
|
||||
)
|
||||
|
||||
// TODO: Move flags to options directory.
|
||||
var (
|
||||
kernelMonitorConfigPath = pflag.String("kernel-monitor", "/config/kernel-monitor.json", "The path to the kernel monitor config file")
|
||||
apiServerOverride = pflag.String("apiserver-override", "", "Custom URI used to connect to Kubernetes ApiServer")
|
||||
printVersion = pflag.Bool("version", false, "Print version information and quit")
|
||||
hostnameOverride = pflag.String("hostname-override", "", "Custom node name used to override hostname")
|
||||
serverPort = pflag.Int("port", 10256, "The port to bind the node problem detector server. Use 0 to disable.")
|
||||
serverAddress = pflag.String("address", "127.0.0.1", "The address to bind the node problem detector server.")
|
||||
)
|
||||
|
||||
func validateCmdParams() {
|
||||
if _, err := url.Parse(*apiServerOverride); err != nil {
|
||||
glog.Fatalf("apiserver-override %q is not a valid HTTP URI: %v", *apiServerOverride, err)
|
||||
}
|
||||
}
|
||||
|
||||
func getNodeNameOrDie() string {
|
||||
var nodeName string
|
||||
|
||||
// Check hostname override first for customized node name.
|
||||
if *hostnameOverride != "" {
|
||||
return *hostnameOverride
|
||||
}
|
||||
|
||||
// Get node name from environment variable NODE_NAME
|
||||
// By default, assume that the NODE_NAME env should have been set with
|
||||
// downward api or user defined exported environment variable. We prefer it because sometimes
|
||||
// the hostname returned by os.Hostname is not right because:
|
||||
// 1. User may override the hostname.
|
||||
// 2. For some cloud providers, os.Hostname is different from the real hostname.
|
||||
nodeName = os.Getenv("NODE_NAME")
|
||||
if nodeName != "" {
|
||||
return nodeName
|
||||
}
|
||||
|
||||
// For backward compatibility. If the env is not set, get the hostname
|
||||
// from os.Hostname(). This may not work for all configurations and
|
||||
// environments.
|
||||
nodeName, err := os.Hostname()
|
||||
if err != nil {
|
||||
glog.Fatalf("Failed to get host name: %v", err)
|
||||
}
|
||||
|
||||
return nodeName
|
||||
}
|
||||
|
||||
func startHTTPServer(p problemdetector.ProblemDetector) {
|
||||
func startHTTPServer(p problemdetector.ProblemDetector, npdo *options.NodeProblemDetectorOptions) {
|
||||
// Add healthz http request handler. Always return ok now, add more health check
|
||||
// logic in the future.
|
||||
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -88,31 +42,36 @@ func startHTTPServer(p problemdetector.ProblemDetector) {
|
||||
})
|
||||
// Add the http handlers in problem detector.
|
||||
p.RegisterHTTPHandlers()
|
||||
err := http.ListenAndServe(net.JoinHostPort(*serverAddress, strconv.Itoa(*serverPort)), nil)
|
||||
|
||||
addr := net.JoinHostPort(npdo.ServerAddress, strconv.Itoa(npdo.ServerPort))
|
||||
err := http.ListenAndServe(addr, nil)
|
||||
if err != nil {
|
||||
glog.Fatalf("Failed to start server: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
|
||||
npdo := options.NewNodeProblemDetectorOptions()
|
||||
npdo.AddFlags(pflag.CommandLine)
|
||||
|
||||
pflag.Parse()
|
||||
|
||||
validateCmdParams()
|
||||
npdo.SetNodeNameOrDie()
|
||||
|
||||
if *printVersion {
|
||||
npdo.ValidOrDie()
|
||||
|
||||
if npdo.PrintVersion {
|
||||
version.PrintVersion()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
nodeName := getNodeNameOrDie()
|
||||
|
||||
k := kernelmonitor.NewKernelMonitorOrDie(*kernelMonitorConfigPath)
|
||||
p := problemdetector.NewProblemDetector(k, *apiServerOverride, nodeName)
|
||||
k := kernelmonitor.NewKernelMonitorOrDie(npdo.KernelMonitorConfigPath)
|
||||
c := problemclient.NewClientOrDie(npdo)
|
||||
p := problemdetector.NewProblemDetector(k, c)
|
||||
|
||||
// Start http server.
|
||||
if *serverPort > 0 {
|
||||
startHTTPServer(p)
|
||||
if npdo.ServerPort > 0 {
|
||||
startHTTPServer(p, npdo)
|
||||
}
|
||||
|
||||
if err := p.Run(); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user