Merge pull request #104775 from kerthcet/bug/fix-kubemark-log-defer-conflict-with-exit

fix hollownode flushlogs not working together with exit
This commit is contained in:
Kubernetes Prow Robot 2021-10-27 08:51:25 -07:00 committed by GitHub
commit 12c4095462
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 16 deletions

View File

@ -145,9 +145,9 @@ func newHollowNodeCommand() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "kubemark", Use: "kubemark",
Long: "kubemark", Long: "kubemark",
Run: func(cmd *cobra.Command, args []string) { RunE: func(cmd *cobra.Command, args []string) error {
verflag.PrintAndExitIfRequested() verflag.PrintAndExitIfRequested()
run(cmd, s) return run(cmd, s)
}, },
Args: func(cmd *cobra.Command, args []string) error { Args: func(cmd *cobra.Command, args []string) error {
for _, arg := range args { for _, arg := range args {
@ -166,24 +166,24 @@ func newHollowNodeCommand() *cobra.Command {
return cmd return cmd
} }
func run(cmd *cobra.Command, config *hollowNodeConfig) { func run(cmd *cobra.Command, config *hollowNodeConfig) error {
// To help debugging, immediately log version and print flags. // To help debugging, immediately log version and print flags.
klog.Infof("Version: %+v", version.Get()) klog.Infof("Version: %+v", version.Get())
cliflag.PrintFlags(cmd.Flags()) cliflag.PrintFlags(cmd.Flags())
if !knownMorphs.Has(config.Morph) { if !knownMorphs.Has(config.Morph) {
klog.Fatalf("Unknown morph: %v. Allowed values: %v", config.Morph, knownMorphs.List()) return fmt.Errorf("Unknown morph: %v. allowed values: %v", config.Morph, knownMorphs.List())
} }
// create a client to communicate with API server. // create a client to communicate with API server.
clientConfig, err := config.createClientConfigFromFile() clientConfig, err := config.createClientConfigFromFile()
if err != nil { if err != nil {
klog.Fatalf("Failed to create a ClientConfig: %v. Exiting.", err) return fmt.Errorf("Failed to create a ClientConfig, error: %w. Exiting", err)
} }
client, err := clientset.NewForConfig(clientConfig) client, err := clientset.NewForConfig(clientConfig)
if err != nil { if err != nil {
klog.Fatalf("Failed to create a ClientSet: %v. Exiting.", err) return fmt.Errorf("Failed to create a ClientSet, error: %w. Exiting", err)
} }
if config.Morph == "kubelet" { if config.Morph == "kubelet" {
@ -200,7 +200,7 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) {
heartbeatClientConfig.QPS = float32(-1) heartbeatClientConfig.QPS = float32(-1)
heartbeatClient, err := clientset.NewForConfig(&heartbeatClientConfig) heartbeatClient, err := clientset.NewForConfig(&heartbeatClientConfig)
if err != nil { if err != nil {
klog.Fatalf("Failed to create a ClientSet: %v. Exiting.", err) return fmt.Errorf("Failed to create a ClientSet, error: %w. Exiting", err)
} }
cadvisorInterface := &cadvisortest.Fake{ cadvisorInterface := &cadvisortest.Fake{
@ -221,23 +221,23 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) {
endpoint, err := fakeremote.GenerateEndpoint() endpoint, err := fakeremote.GenerateEndpoint()
if err != nil { if err != nil {
klog.Fatalf("Failed to generate fake endpoint %v.", err) return fmt.Errorf("Failed to generate fake endpoint, error: %w", err)
} }
fakeRemoteRuntime := fakeremote.NewFakeRemoteRuntime() fakeRemoteRuntime := fakeremote.NewFakeRemoteRuntime()
if err = fakeRemoteRuntime.Start(endpoint); err != nil { if err = fakeRemoteRuntime.Start(endpoint); err != nil {
klog.Fatalf("Failed to start fake runtime %v.", err) return fmt.Errorf("Failed to start fake runtime, error: %w", err)
} }
defer fakeRemoteRuntime.Stop() defer fakeRemoteRuntime.Stop()
runtimeService, err := remote.NewRemoteRuntimeService(endpoint, 15*time.Second) runtimeService, err := remote.NewRemoteRuntimeService(endpoint, 15*time.Second)
if err != nil { if err != nil {
klog.Fatalf("Failed to init runtime service %v.", err) return fmt.Errorf("Failed to init runtime service, error: %w", err)
} }
var imageService internalapi.ImageManagerService = fakeRemoteRuntime.ImageService var imageService internalapi.ImageManagerService = fakeRemoteRuntime.ImageService
if config.UseHostImageService { if config.UseHostImageService {
imageService, err = remote.NewRemoteImageService(f.RemoteImageEndpoint, 15*time.Second) imageService, err = remote.NewRemoteImageService(f.RemoteImageEndpoint, 15*time.Second)
if err != nil { if err != nil {
klog.Fatalf("Failed to init image service %v.", err) return fmt.Errorf("Failed to init image service, error: %w", err)
} }
} }
@ -256,7 +256,7 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) {
if config.Morph == "proxy" { if config.Morph == "proxy" {
client, err := clientset.NewForConfig(clientConfig) client, err := clientset.NewForConfig(clientConfig)
if err != nil { if err != nil {
klog.Fatalf("Failed to create API Server client: %v", err) return fmt.Errorf("Failed to create API Server client, error: %w", err)
} }
iptInterface := fakeiptables.NewFake() iptInterface := fakeiptables.NewFake()
sysctl := fakesysctl.NewFake() sysctl := fakesysctl.NewFake()
@ -280,8 +280,10 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) {
config.ProxierMinSyncPeriod, config.ProxierMinSyncPeriod,
) )
if err != nil { if err != nil {
klog.Fatalf("Failed to create hollowProxy instance: %v", err) return fmt.Errorf("Failed to create hollowProxy instance, error: %w", err)
} }
hollowProxy.Run() return hollowProxy.Run()
} }
return nil
} }

View File

@ -132,8 +132,9 @@ func NewHollowProxyOrDie(
}, nil }, nil
} }
func (hp *HollowProxy) Run() { func (hp *HollowProxy) Run() error {
if err := hp.ProxyServer.Run(); err != nil { if err := hp.ProxyServer.Run(); err != nil {
klog.Fatalf("Error while running proxy: %v\n", err) return fmt.Errorf("Error while running proxy: %w", err)
} }
return nil
} }