Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use zap instead of klog #1606

Merged
merged 2 commits into from
Apr 20, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 46 additions & 26 deletions cmd/machine-controller/main.go
Original file line number Diff line number Diff line change
@@ -20,13 +20,16 @@ import (
"context"
"flag"
"fmt"
"log"
"net"
"net/http"
"net/http/pprof"
"strings"
"time"

"github.com/go-logr/zapr"
"github.com/prometheus/client_golang/prometheus"
"go.uber.org/zap"

clusterv1alpha1 "github.com/kubermatic/machine-controller/pkg/apis/cluster/v1alpha1"
"github.com/kubermatic/machine-controller/pkg/apis/cluster/v1alpha1/migrations"
@@ -39,6 +42,7 @@ import (
machinesetcontroller "github.com/kubermatic/machine-controller/pkg/controller/machineset"
"github.com/kubermatic/machine-controller/pkg/controller/nodecsrapprover"
"github.com/kubermatic/machine-controller/pkg/health"
machinecontrollerlog "github.com/kubermatic/machine-controller/pkg/log"
machinesv1alpha1 "github.com/kubermatic/machine-controller/pkg/machines/v1alpha1"
"github.com/kubermatic/machine-controller/pkg/node"

@@ -48,8 +52,8 @@ import (
"k8s.io/client-go/kubernetes/scheme"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/klog"
"sigs.k8s.io/controller-runtime/pkg/healthz"
ctrlruntimelog "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
"sigs.k8s.io/controller-runtime/pkg/metrics"
@@ -137,12 +141,15 @@ type controllerRunOptions struct {
nodePortRange string

overrideBootstrapKubeletAPIServer string

log *zap.SugaredLogger
}

func main() {
nodeFlags := node.NewFlags(flag.CommandLine)
logFlags := machinecontrollerlog.NewDefaultOptions()
logFlags.AddFlags(flag.CommandLine)

klog.InitFlags(nil)
// This is also being registered in kubevirt.io/kubevirt/pkg/kubecli/kubecli.go so
// we have to guard it.
// TODO: Evaluate alternatives to importing the CLI. Generate our own client? Use a dynamic client?
@@ -183,42 +190,53 @@ func main() {
flag.StringVar(&overrideBootstrapKubeletAPIServer, "override-bootstrap-kubelet-apiserver", "", "Override for the API server address used in worker nodes bootstrap-kubelet.conf")

flag.Parse()

if err := logFlags.Validate(); err != nil {
log.Fatalf("Invalid options: %v", err)
}

rawLog := machinecontrollerlog.New(logFlags.Debug, logFlags.Format)
log := rawLog.Sugar()

// set the logger used by controller-runtime
ctrlruntimelog.SetLogger(zapr.NewLogger(rawLog.WithOptions(zap.AddCallerSkip(1))))

kubeconfig = flag.Lookup("kubeconfig").Value.(flag.Getter).Get().(string)
masterURL = flag.Lookup("master").Value.(flag.Getter).Get().(string)

clusterDNSIPs, err := parseClusterDNSIPs(clusterDNSIPs)
if err != nil {
klog.Fatalf("invalid cluster dns specified: %v", err)
log.Fatalw("Invalid cluster dns specified", zap.Error(err))
}

var parsedJoinClusterTimeout *time.Duration
if joinClusterTimeout != "" {
parsedJoinClusterTimeoutLiteral, err := time.ParseDuration(joinClusterTimeout)
parsedJoinClusterTimeout = &parsedJoinClusterTimeoutLiteral
if err != nil {
klog.Fatalf("failed to parse join-cluster-timeout as duration: %v", err)
log.Fatalw("Failed to parse join-cluster-timeout as duration", zap.Error(err))
}
}

// Needed for migrations
if err := machinesv1alpha1.AddToScheme(scheme.Scheme); err != nil {
klog.Fatalf("failed to add machinesv1alpha1 api to scheme: %v", err)
log.Fatalw("Failed to add api to scheme", "api", machinesv1alpha1.SchemeGroupVersion, zap.Error(err))
}
if err := apiextensionsv1.AddToScheme(scheme.Scheme); err != nil {
klog.Fatalf("failed to add apiextensionsv1 api to scheme: %v", err)
log.Fatalw("Failed to add api to scheme", "api", apiextensionsv1.SchemeGroupVersion, zap.Error(err))
}
if err := clusterv1alpha1.AddToScheme(scheme.Scheme); err != nil {
klog.Fatalf("failed to add clusterv1alpha1 api to scheme: %v", err)
log.Fatalw("Failed to add api to scheme", "api", clusterv1alpha1.SchemeGroupVersion, zap.Error(err))
}

cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)
if err != nil {
klog.Fatalf("error building kubeconfig: %v", err)
log.Fatalw("Failed to build kubeconfig", zap.Error(err))
}

if caBundleFile != "" {
if err := util.SetCABundleFile(caBundleFile); err != nil {
klog.Fatalf("-ca-bundle is invalid: %v", err)
log.Fatalw("-ca-bundle is invalid", zap.Error(err))
}
}

@@ -228,12 +246,12 @@ func main() {
// QPS and Burst config there
machineCfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)
if err != nil {
klog.Fatalf("error building kubeconfig for machines: %v", err)
log.Fatalw("Failed to build kubeconfig for machines", zap.Error(err))
}

kubeClient, err := kubernetes.NewForConfig(cfg)
if err != nil {
klog.Fatalf("error building kubernetes clientset for kubeClient: %v", err)
log.Fatalw("Failed to build kubernetes clientset for kubeClient", zap.Error(err))
}
kubeconfigProvider := clusterinfo.New(cfg, kubeClient)

@@ -251,10 +269,11 @@ func main() {
}
containerRuntimeConfig, err := containerruntime.BuildConfig(containerRuntimeOpts)
if err != nil {
klog.Fatalf("failed to generate container runtime config: %v", err)
log.Fatalw("Failed to generate container runtime config", zap.Error(err))
}

runOptions := controllerRunOptions{
log: log,
kubeClient: kubeClient,
kubeconfigProvider: kubeconfigProvider,
name: name,
@@ -277,7 +296,7 @@ func main() {
}

if err := nodeFlags.UpdateNodeSettings(&runOptions.node); err != nil {
klog.Fatalf("failed to update nodesettings: %v", err)
log.Fatalw("Failed to update nodesettings", zap.Error(err))
}

if parsedJoinClusterTimeout != nil {
@@ -287,24 +306,24 @@ func main() {
if bootstrapTokenServiceAccountName != "" {
flagParts := strings.Split(bootstrapTokenServiceAccountName, "/")
if flagPartsLen := len(flagParts); flagPartsLen != 2 {
klog.Fatalf("Splitting the bootstrap-token-service-account-name flag value in '/' returned %d parts, expected exactly two", flagPartsLen)
log.Fatalf("Splitting the bootstrap-token-service-account-name flag value in '/' returned %d parts, expected exactly two", flagPartsLen)
}
runOptions.bootstrapTokenServiceAccountName = &types.NamespacedName{Namespace: flagParts[0], Name: flagParts[1]}
}

ctx := signals.SetupSignalHandler()
go func() {
<-ctx.Done()
klog.Info("caught signal, shutting down...")
log.Info("Caught signal, shutting down...")
}()

mgr, err := createManager(5*time.Minute, runOptions)
if err != nil {
klog.Fatalf("failed to create runtime manager: %v", err)
log.Fatalw("Failed to create runtime manager", zap.Error(err))
}

if err := mgr.Start(ctx); err != nil {
klog.Errorf("failed to start kubebuilder manager: %v", err)
log.Errorw("Failed to start manager", zap.Error(err))
}
}

@@ -323,14 +342,14 @@ func createManager(syncPeriod time.Duration, options controllerRunOptions) (mana
MetricsBindAddress: metricsAddress,
})
if err != nil {
return nil, fmt.Errorf("error building ctrlruntime manager: %w", err)
return nil, fmt.Errorf("failed to build ctrlruntime manager: %w", err)
}

if err := mgr.AddReadyzCheck("alive", healthz.Ping); err != nil {
return nil, fmt.Errorf("failed to add readiness check: %w", err)
}

if err := mgr.AddHealthzCheck("kubeconfig", health.KubeconfigAvailable(options.kubeconfigProvider)); err != nil {
if err := mgr.AddHealthzCheck("kubeconfig", health.KubeconfigAvailable(options.kubeconfigProvider, options.log)); err != nil {
return nil, fmt.Errorf("failed to add health check: %w", err)
}

@@ -384,12 +403,12 @@ func (bs *controllerBootstrap) Start(ctx context.Context) error {
}

// Migrate MachinesV1Alpha1Machine to ClusterV1Alpha1Machine.
if err := migrations.MigrateMachinesv1Alpha1MachineToClusterv1Alpha1MachineIfNecessary(ctx, client, bs.opt.kubeClient, providerData); err != nil {
if err := migrations.MigrateMachinesv1Alpha1MachineToClusterv1Alpha1MachineIfNecessary(ctx, bs.opt.log, client, bs.opt.kubeClient, providerData); err != nil {
return fmt.Errorf("migration to clusterv1alpha1 failed: %w", err)
}

// Migrate providerConfig field to providerSpec field.
if err := migrations.MigrateProviderConfigToProviderSpecIfNecessary(ctx, bs.opt.cfg, client); err != nil {
if err := migrations.MigrateProviderConfigToProviderSpecIfNecessary(ctx, bs.opt.log, bs.opt.cfg, client); err != nil {
return fmt.Errorf("migration of providerConfig field to providerSpec field failed: %w", err)
}

@@ -398,6 +417,7 @@ func (bs *controllerBootstrap) Start(ctx context.Context) error {

if err := machinecontroller.Add(
ctx,
bs.opt.log,
bs.mgr,
bs.opt.kubeClient,
workerCount,
@@ -416,21 +436,21 @@ func (bs *controllerBootstrap) Start(ctx context.Context) error {
return fmt.Errorf("failed to add Machine controller to manager: %w", err)
}

if err := machinesetcontroller.Add(bs.mgr); err != nil {
if err := machinesetcontroller.Add(bs.mgr, bs.opt.log); err != nil {
return fmt.Errorf("failed to add MachineSet controller to manager: %w", err)
}

if err := machinedeploymentcontroller.Add(bs.mgr); err != nil {
if err := machinedeploymentcontroller.Add(bs.mgr, bs.opt.log); err != nil {
return fmt.Errorf("failed to add MachineDeployment controller to manager: %w", err)
}

if bs.opt.nodeCSRApprover {
if err := nodecsrapprover.Add(bs.mgr); err != nil {
if err := nodecsrapprover.Add(bs.mgr, bs.opt.log); err != nil {
return fmt.Errorf("failed to add NodeCSRApprover controller to manager: %w", err)
}
}

klog.Info("machine controller startup complete")
bs.opt.log.Info("Machine-controller startup complete")

return nil
}
@@ -441,7 +461,7 @@ func parseClusterDNSIPs(s string) ([]net.IP, error) {
for _, sip := range sips {
ip := net.ParseIP(strings.TrimSpace(sip))
if ip == nil {
return nil, fmt.Errorf("unable to parse ip %s", sip)
return nil, fmt.Errorf("failed to parse IP %q", sip)
}
ips = append(ips, ip)
}
22 changes: 17 additions & 5 deletions cmd/userdata/amzn2/main.go
Original file line number Diff line number Diff line change
@@ -22,25 +22,37 @@ package main

import (
"flag"
"log"

"go.uber.org/zap"

machinecontrollerlog "github.com/kubermatic/machine-controller/pkg/log"
"github.com/kubermatic/machine-controller/pkg/userdata/amzn2"
userdataplugin "github.com/kubermatic/machine-controller/pkg/userdata/plugin"

"k8s.io/klog"
)

func main() {
// Parse flags.
var debug bool

flag.BoolVar(&debug, "debug", false, "Switch for enabling the plugin debugging")

logFlags := machinecontrollerlog.NewDefaultOptions()
logFlags.AddFlags(flag.CommandLine)

flag.Parse()

if err := logFlags.Validate(); err != nil {
log.Fatalf("Invalid options: %v", err)
}

rawLog := machinecontrollerlog.New(logFlags.Debug, logFlags.Format)
log := rawLog.Sugar()

// Instantiate provider and start plugin.
var provider = &amzn2.Provider{}
var p = userdataplugin.New(provider, debug)

if err := p.Run(); err != nil {
klog.Fatalf("error running Amazon Linux 2 plugin: %v", err)
if err := p.Run(log); err != nil {
log.Fatalw("Failed to run Amazon Linux 2 plugin", zap.Error(err))
}
}
22 changes: 17 additions & 5 deletions cmd/userdata/centos/main.go
Original file line number Diff line number Diff line change
@@ -22,25 +22,37 @@ package main

import (
"flag"
"log"

"go.uber.org/zap"

machinecontrollerlog "github.com/kubermatic/machine-controller/pkg/log"
"github.com/kubermatic/machine-controller/pkg/userdata/centos"
userdataplugin "github.com/kubermatic/machine-controller/pkg/userdata/plugin"

"k8s.io/klog"
)

func main() {
// Parse flags.
var debug bool

flag.BoolVar(&debug, "debug", false, "Switch for enabling the plugin debugging")

logFlags := machinecontrollerlog.NewDefaultOptions()
logFlags.AddFlags(flag.CommandLine)

flag.Parse()

if err := logFlags.Validate(); err != nil {
log.Fatalf("Invalid options: %v", err)
}

rawLog := machinecontrollerlog.New(logFlags.Debug, logFlags.Format)
log := rawLog.Sugar()

// Instantiate provider and start plugin.
var provider = &centos.Provider{}
var p = userdataplugin.New(provider, debug)

if err := p.Run(); err != nil {
klog.Fatalf("error running CentOS plugin: %v", err)
if err := p.Run(log); err != nil {
log.Fatalw("Failed to run CentOS plugin", zap.Error(err))
}
}
21 changes: 17 additions & 4 deletions cmd/userdata/flatcar/main.go
Original file line number Diff line number Diff line change
@@ -22,24 +22,37 @@ package main

import (
"flag"
"log"

"go.uber.org/zap"

machinecontrollerlog "github.com/kubermatic/machine-controller/pkg/log"
"github.com/kubermatic/machine-controller/pkg/userdata/flatcar"
userdataplugin "github.com/kubermatic/machine-controller/pkg/userdata/plugin"

"k8s.io/klog"
)

func main() {
// Parse flags.
var debug bool
flag.BoolVar(&debug, "debug", false, "Switch for enabling the plugin debugging")

logFlags := machinecontrollerlog.NewDefaultOptions()
logFlags.AddFlags(flag.CommandLine)

flag.Parse()

if err := logFlags.Validate(); err != nil {
log.Fatalf("Invalid options: %v", err)
}

rawLog := machinecontrollerlog.New(logFlags.Debug, logFlags.Format)
log := rawLog.Sugar()

// Instantiate provider and start plugin.
var provider = &flatcar.Provider{}
var p = userdataplugin.New(provider, debug)

if err := p.Run(); err != nil {
klog.Fatalf("error running flatcar plugin: %v", err)
if err := p.Run(log); err != nil {
log.Fatalw("Failed to run Flatcar plugin", zap.Error(err))
}
}
Loading