Skip to content

Commit 571801f

Browse files
authored
Merge pull request #6430 from seanlaii/webhook-sl
JSON logging support for Karmada Webhook component
2 parents b85f298 + 58a5763 commit 571801f

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

artifacts/deploy/karmada-webhook.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ spec:
4141
- --cert-dir=/etc/karmada/pki/server
4242
- --feature-gates=AllAlpha=true,AllBeta=true
4343
- --allow-no-execute-taint-policy=true
44+
- --logging-format=json
4445
- --v=4
4546
ports:
4647
- containerPort: 8443

cmd/webhook/app/webhook.go

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"github.com/spf13/cobra"
2727
"k8s.io/client-go/util/flowcontrol"
2828
cliflag "k8s.io/component-base/cli/flag"
29+
"k8s.io/component-base/logs"
30+
logsv1 "k8s.io/component-base/logs/api/v1"
2931
"k8s.io/component-base/term"
3032
"k8s.io/klog/v2"
3133
controllerruntime "sigs.k8s.io/controller-runtime"
@@ -37,6 +39,7 @@ import (
3739
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
3840

3941
"github.com/karmada-io/karmada/cmd/webhook/app/options"
42+
"github.com/karmada-io/karmada/pkg/features"
4043
versionmetrics "github.com/karmada-io/karmada/pkg/metrics"
4144
"github.com/karmada-io/karmada/pkg/sharedcli"
4245
"github.com/karmada-io/karmada/pkg/sharedcli/klogflag"
@@ -65,12 +68,37 @@ import (
6568

6669
// NewWebhookCommand creates a *cobra.Command object with default parameters
6770
func NewWebhookCommand(ctx context.Context) *cobra.Command {
71+
logConfig := logsv1.NewLoggingConfiguration()
72+
fss := cliflag.NamedFlagSets{}
73+
74+
logsFlagSet := fss.FlagSet("logs")
75+
logs.AddFlags(logsFlagSet, logs.SkipLoggingConfigurationFlags())
76+
logsv1.AddFlags(logConfig, logsFlagSet)
77+
klogflag.Add(logsFlagSet)
78+
79+
genericFlagSet := fss.FlagSet("generic")
6880
opts := options.NewOptions()
81+
genericFlagSet.AddGoFlagSet(flag.CommandLine)
82+
opts.AddFlags(genericFlagSet)
6983

7084
cmd := &cobra.Command{
7185
Use: names.KarmadaWebhookComponentName,
7286
Long: `The karmada-webhook starts a webhook server and manages policies about how to mutate and validate
7387
Karmada resources including 'PropagationPolicy', 'OverridePolicy' and so on.`,
88+
PersistentPreRunE: func(_ *cobra.Command, _ []string) error {
89+
if err := logsv1.ValidateAndApply(logConfig, features.FeatureGate); err != nil {
90+
return err
91+
}
92+
logs.InitLogs()
93+
94+
// Starting from version 0.15.0, controller-runtime expects its consumers to set a logger through log.SetLogger.
95+
// If SetLogger is not called within the first 30 seconds of a binaries lifetime, it will get
96+
// set to a NullLogSink and report an error. Here's to silence the "log.SetLogger(...) was never called; logs will not be displayed" error
97+
// by setting a logger through log.SetLogger.
98+
// More info refer to: https://github.com/karmada-io/karmada/pull/4885.
99+
controllerruntime.SetLogger(klog.Background())
100+
return nil
101+
},
74102
RunE: func(_ *cobra.Command, _ []string) error {
75103
// validate options
76104
if errs := opts.Validate(); len(errs) != 0 {
@@ -91,16 +119,6 @@ Karmada resources including 'PropagationPolicy', 'OverridePolicy' and so on.`,
91119
},
92120
}
93121

94-
fss := cliflag.NamedFlagSets{}
95-
96-
genericFlagSet := fss.FlagSet("generic")
97-
genericFlagSet.AddGoFlagSet(flag.CommandLine)
98-
opts.AddFlags(genericFlagSet)
99-
100-
// Set klog flags
101-
logsFlagSet := fss.FlagSet("logs")
102-
klogflag.Add(logsFlagSet)
103-
104122
cmd.AddCommand(sharedcommand.NewCmdVersion(names.KarmadaWebhookComponentName))
105123
cmd.Flags().AddFlagSet(genericFlagSet)
106124
cmd.Flags().AddFlagSet(logsFlagSet)

cmd/webhook/main.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,18 @@ import (
2020
"os"
2121

2222
"k8s.io/component-base/cli"
23+
"k8s.io/component-base/logs"
2324
_ "k8s.io/component-base/logs/json/register" // for JSON log format registration
24-
"k8s.io/klog/v2"
2525
controllerruntime "sigs.k8s.io/controller-runtime"
2626

2727
"github.com/karmada-io/karmada/cmd/webhook/app"
2828
)
2929

3030
func main() {
3131
ctx := controllerruntime.SetupSignalHandler()
32-
// Starting from version 0.15.0, controller-runtime expects its consumers to set a logger through log.SetLogger.
33-
// If SetLogger is not called within the first 30 seconds of a binaries lifetime, it will get
34-
// set to a NullLogSink and report an error. Here's to silence the "log.SetLogger(...) was never called; logs will not be displayed" error
35-
// by setting a logger through log.SetLogger.
36-
// More info refer to: https://github.com/karmada-io/karmada/pull/4885.
37-
controllerruntime.SetLogger(klog.Background())
3832
cmd := app.NewWebhookCommand(ctx)
39-
code := cli.Run(cmd)
40-
os.Exit(code)
33+
exitCode := cli.Run(cmd)
34+
// Ensure any buffered log entries are flushed
35+
logs.FlushLogs()
36+
os.Exit(exitCode)
4137
}

0 commit comments

Comments
 (0)