move metrics to service port, add healthz, pprof (#1318)

* combine metrics and healthz

* use root mux and bind pprof routes on debug config opt

Signed-off-by: Evan Baker <rbtr@users.noreply.github.com>

Co-authored-by: Paul Miller <pmiller@microsoft.com>
This commit is contained in:
Evan Baker 2022-04-05 17:22:49 -05:00 коммит произвёл GitHub
Родитель 739c1a26dc
Коммит 5ec6a3f2a8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 33 добавлений и 14 удалений

Просмотреть файл

@ -22,7 +22,7 @@ type CNSConfig struct {
ChannelMode string
InitializeFromCNI bool
ManagedSettings ManagedSettings
MetricsBindAddress string
Debug bool
SyncHostNCTimeoutMs int
SyncHostNCVersionIntervalMs int
TLSCertificatePath string
@ -150,9 +150,6 @@ func SetCNSConfigDefaults(config *CNSConfig) {
if config.ChannelMode == "" {
config.ChannelMode = cns.Direct
}
if config.MetricsBindAddress == "" {
config.MetricsBindAddress = ":9090"
}
if config.SyncHostNCVersionIntervalMs == 0 {
config.SyncHostNCVersionIntervalMs = 1000 //nolint:gomnd // default times
}

Просмотреть файл

@ -61,7 +61,6 @@ func TestReadConfigFromFile(t *testing.T) {
NodeID: "abc",
NodeSyncIntervalInSeconds: 30,
},
MetricsBindAddress: ":9091",
SyncHostNCTimeoutMs: 5,
SyncHostNCVersionIntervalMs: 5,
TLSCertificatePath: "/test",
@ -191,7 +190,7 @@ func TestSetCNSConfigDefaults(t *testing.T) {
ManagedSettings: ManagedSettings{
NodeSyncIntervalInSeconds: 30,
},
MetricsBindAddress: ":9090",
Debug: false,
SyncHostNCTimeoutMs: 500,
SyncHostNCVersionIntervalMs: 1000,
TelemetrySettings: TelemetrySettings{
@ -210,7 +209,6 @@ func TestSetCNSConfigDefaults(t *testing.T) {
ManagedSettings: ManagedSettings{
NodeSyncIntervalInSeconds: 1,
},
MetricsBindAddress: ":9091",
SyncHostNCTimeoutMs: 5,
SyncHostNCVersionIntervalMs: 1,
TelemetrySettings: TelemetrySettings{
@ -226,7 +224,6 @@ func TestSetCNSConfigDefaults(t *testing.T) {
ManagedSettings: ManagedSettings{
NodeSyncIntervalInSeconds: 1,
},
MetricsBindAddress: ":9091",
SyncHostNCTimeoutMs: 5,
SyncHostNCVersionIntervalMs: 1,
TelemetrySettings: TelemetrySettings{

Просмотреть файл

@ -9,6 +9,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"net/http/pprof"
"os"
"os/signal"
"runtime"
@ -46,6 +47,7 @@ import (
"github.com/Azure/azure-container-networking/store"
"github.com/avast/retry-go/v3"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus/promhttp"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/types"
@ -53,6 +55,8 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/metrics"
)
const (
@ -334,8 +338,8 @@ func sendRegisterNodeRequest(
httpc *http.Client,
httpRestService cns.HTTPService,
nodeRegisterRequest cns.NodeRegisterRequest,
registerURL string) error {
registerURL string,
) error {
var body bytes.Buffer
err := json.NewEncoder(&body).Encode(nodeRegisterRequest)
if err != nil {
@ -992,7 +996,6 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
manager, err := ctrl.NewManager(kubeConfig, ctrl.Options{
Scheme: nodenetworkconfig.Scheme,
MetricsBindAddress: cnsconfig.MetricsBindAddress,
Namespace: "kube-system", // TODO(rbtr): namespace should be in the cns config
NewCache: nodeScopedCache,
})
@ -1013,6 +1016,27 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
return errors.Wrapf(err, "failed to setup reconciler with manager")
}
// adding some routes to the root serve mux
mux := httpRestServiceImplementation.Listener.GetMux()
if cnsconfig.Debug {
// add pprof endpoints
mux.HandleFunc("/debug/pprof/", pprof.Index)
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
}
// add metrics endpoints
mux.Handle("/metrics", promhttp.HandlerFor(metrics.Registry, promhttp.HandlerOpts{
ErrorHandling: promhttp.HTTPErrorOnError,
}))
// add healthz endpoints
healthzhandler := healthz.Handler{}
mux.Handle("/healthz", http.StripPrefix("/healthz", &healthzhandler))
// Start the Manager which starts the reconcile loop.
// The Reconciler will send an initial NodeNetworkConfig update to the PoolMonitor, starting the
// Monitor's internal loop.
@ -1057,6 +1081,7 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
}
}
}()
logger.Printf("initialized and started SyncHostNCVersion loop")
return nil