diff --git a/cmd/controller/controller.go b/cmd/controller/controller.go index d3cc4d5e62b5..79aa9de66139 100644 --- a/cmd/controller/controller.go +++ b/cmd/controller/controller.go @@ -460,11 +460,7 @@ func (c *command) start(ctx context.Context) error { } if c.EnableMetricsScraper { - metricsSaver, err := controller.NewManifestsSaver("metrics", c.K0sVars.DataDir) - if err != nil { - return fmt.Errorf("failed to create metrics manifests saver: %w", err) - } - metrics, err := controller.NewMetrics(c.K0sVars, metricsSaver, adminClientFactory, nodeConfig.Spec.Storage.Type) + metrics, err := controller.NewMetrics(c.K0sVars, adminClientFactory, nodeConfig.Spec.Storage.Type) if err != nil { return fmt.Errorf("failed to create metrics reconciler: %w", err) } diff --git a/pkg/component/controller/metrics.go b/pkg/component/controller/metrics.go index bf59a44bb1d4..848aeebb49a4 100644 --- a/pkg/component/controller/metrics.go +++ b/pkg/component/controller/metrics.go @@ -25,14 +25,18 @@ import ( "net/http" "os" "path" + "path/filepath" "time" "k8s.io/client-go/rest" + "github.com/k0sproject/k0s/internal/pkg/dir" + "github.com/k0sproject/k0s/internal/pkg/file" "github.com/k0sproject/k0s/internal/pkg/templatewriter" "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1" "github.com/k0sproject/k0s/pkg/component/manager" "github.com/k0sproject/k0s/pkg/config" + "github.com/k0sproject/k0s/pkg/constant" kubeutil "github.com/k0sproject/k0s/pkg/kubernetes" "github.com/sirupsen/logrus" ) @@ -48,7 +52,6 @@ type Metrics struct { hostname string K0sVars *config.CfgVars - saver manifestsSaver restClient rest.Interface storageType v1beta1.StorageType @@ -61,7 +64,7 @@ var _ manager.Component = (*Metrics)(nil) var _ manager.Reconciler = (*Metrics)(nil) // NewMetrics creates new Metrics reconciler -func NewMetrics(k0sVars *config.CfgVars, saver manifestsSaver, clientCF kubeutil.ClientFactoryInterface, storageType v1beta1.StorageType) (*Metrics, error) { +func NewMetrics(k0sVars *config.CfgVars, clientCF kubeutil.ClientFactoryInterface, storageType v1beta1.StorageType) (*Metrics, error) { hostname, err := os.Hostname() if err != nil { return nil, err @@ -82,13 +85,16 @@ func NewMetrics(k0sVars *config.CfgVars, saver manifestsSaver, clientCF kubeutil storageType: storageType, hostname: hostname, K0sVars: k0sVars, - saver: saver, restClient: restClient, }, nil } -// Init does nothing -func (m *Metrics) Init(_ context.Context) error { +// Init implements [manager.Component]. +func (m *Metrics) Init(context.Context) error { + if err := dir.Init(filepath.Join(m.K0sVars.ManifestsDir, "metrics"), constant.ManifestsDirMode); err != nil { + return err + } + var j *job j, err := m.newJob("kube-scheduler", "https://localhost:10259/metrics") if err != nil { @@ -121,7 +127,8 @@ func (m *Metrics) Init(_ context.Context) error { return nil } -// Run runs the metric server reconciler +// Start implements [manager.Component]. +// Starts the metric server reconciler. func (m *Metrics) Start(ctx context.Context) error { ctx, m.tickerDone = context.WithCancel(ctx) @@ -132,7 +139,8 @@ func (m *Metrics) Start(ctx context.Context) error { return nil } -// Stop stops the reconciler +// Stop implements [manager.Component]. +// Stops the metric server reconciler. func (m *Metrics) Stop() error { if m.tickerDone != nil { m.tickerDone() @@ -159,7 +167,9 @@ func (m *Metrics) Reconcile(_ context.Context, clusterConfig *v1beta1.ClusterCon if err != nil { return err } - err = m.saver.Save("pushgateway.yaml", output.Bytes()) + err = file.AtomicWithTarget(filepath.Join(m.K0sVars.ManifestsDir, "metrics", "pushgateway.yaml")). + WithPermissions(constant.CertMode). + Write(output.Bytes()) if err != nil { return err }