1
0
Files
monitor/pkg/k8s/k8s.go
2023-04-07 16:54:10 +08:00

80 lines
2.0 KiB
Go

package k8s
import (
"fmt"
"net/http"
"net/http/pprof"
v1 "monitor/pkg/apis/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client/config"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
)
type Config struct {
ctrl.Options
PProf bool
}
type Manager struct {
mgr ctrl.Manager
}
func NewManager(conf Config) (*Manager, error) {
restConfig, err := config.GetConfig()
if err != nil {
return nil, err
}
mgr, err := ctrl.NewManager(restConfig, conf.Options)
if err != nil {
return nil, fmt.Errorf("could not create manager %w", err)
}
if err = corev1.AddToScheme(mgr.GetScheme()); err != nil {
return nil, fmt.Errorf("unable to add scheme %w", err)
}
if err = v1.AddToScheme(mgr.GetScheme()); err != nil {
return nil, fmt.Errorf("unable to add scheme %w", err)
}
if conf.PProf {
mgr.AddMetricsExtraHandler("/debug/pprof/", http.HandlerFunc(pprof.Index))
mgr.AddMetricsExtraHandler("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline))
mgr.AddMetricsExtraHandler("/debug/pprof/profile", http.HandlerFunc(pprof.Profile))
mgr.AddMetricsExtraHandler("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol))
mgr.AddMetricsExtraHandler("/debug/pprof/trace", http.HandlerFunc(pprof.Trace))
}
return &Manager{mgr: mgr}, nil
}
func (s *Manager) Add(r manager.Runnable) error {
return s.mgr.Add(r)
}
func (s *Manager) Setup(f func(manager.Manager) error) error {
return f(s.mgr)
}
func (s *Manager) WebHook(obj runtime.Object) error {
return ctrl.NewWebhookManagedBy(s.mgr).For(obj).Complete()
}
func (s *Manager) Start() error {
if err := s.mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
return fmt.Errorf("unable to set up health check %w", err)
}
if err := s.mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
return fmt.Errorf("unable to set up ready check %w", err)
}
return s.mgr.Start(signals.SetupSignalHandler())
}