diff --git a/discovery/k8s.go b/discovery/k8s.go index 9ba91d7..95a6bb4 100644 --- a/discovery/k8s.go +++ b/discovery/k8s.go @@ -1,6 +1,7 @@ package discovery import ( + "errors" "sync" corev1 "k8s.io/api/core/v1" @@ -9,6 +10,7 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" + "k8s.io/klog" ) type PodEventType int @@ -41,6 +43,10 @@ type K8S struct { func NewK8S() (*K8S, error) { config, err := rest.InClusterConfig() if err != nil { + if errors.Is(err, rest.ErrNotInCluster) { + klog.Infoln("not running inside a kubernetes cluster") + return nil, nil + } return nil, err } @@ -59,6 +65,9 @@ func NewK8S() (*K8S, error) { } func (k8s *K8S) Start() { + if len(k8s.subscribers) == 0 { + return + } go k8s.start() } diff --git a/main.go b/main.go index 870a5df..bd74b44 100644 --- a/main.go +++ b/main.go @@ -37,11 +37,6 @@ func main() { klog.Exitln(err) } - k8s, err := discovery.NewK8S() - if err != nil { - klog.Exitln(err) - } - ms, err := metrics.NewMetrics() if err != nil { klog.Exitln(err) @@ -51,20 +46,26 @@ func main() { router.Handle("/metrics", ms.HttpHandler()) } - ps, err := profiles.NewProfiles() + cu.Start() + defer cu.Stop() + + k8s, err := discovery.NewK8S() if err != nil { klog.Exitln(err) } - if ps != nil { - k8s.Subscribe(ps) - ps.Start() - } - cu.Start() - defer cu.Stop() - - k8s.Start() - defer k8s.Stop() + if k8s != nil { + ps, err := profiles.NewProfiles() + if err != nil { + klog.Exitln(err) + } + if ps != nil { + k8s.Subscribe(ps) + ps.Start() + } + k8s.Start() + defer k8s.Stop() + } klog.Infoln("listening on", *flags.ListenAddress) klog.Exitln(http.ListenAndServe(*flags.ListenAddress, router))