Skip to content

Commit

Permalink
Consistently handle component exit on shutdown
Browse files Browse the repository at this point in the history
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
  • Loading branch information
brandond committed Feb 8, 2024
1 parent 85abe99 commit c190124
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 10 deletions.
6 changes: 4 additions & 2 deletions pkg/agent/containerd/containerd.go
Expand Up @@ -99,10 +99,12 @@ func Run(ctx context.Context, cfg *config.Node) error {
cmd.Env = append(env, cenv...)

addDeathSig(cmd)
if err := cmd.Run(); err != nil {
err := cmd.Run()
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("containerd exited: %s", err)
os.Exit(1)
}
os.Exit(1)
os.Exit(0)
}()

if err := cri.WaitForService(ctx, cfg.Containerd.Address, "containerd"); err != nil {
Expand Down
8 changes: 7 additions & 1 deletion pkg/agent/cridockerd/cridockerd.go
Expand Up @@ -5,6 +5,7 @@ package cridockerd

import (
"context"
"errors"
"os"
"runtime/debug"
"strings"
Expand Down Expand Up @@ -37,7 +38,12 @@ func Run(ctx context.Context, cfg *config.Node) error {
logrus.WithField("stack", string(debug.Stack())).Fatalf("cri-dockerd panic: %v", err)
}
}()
logrus.Fatalf("cri-dockerd exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("cri-dockerd exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return cri.WaitForService(ctx, cfg.CRIDockerd.Address, "cri-dockerd")
Expand Down
5 changes: 4 additions & 1 deletion pkg/agent/flannel/setup.go
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"net"
"os"
"os/exec"
"path/filepath"
goruntime "runtime"
Expand Down Expand Up @@ -83,8 +84,10 @@ func Run(ctx context.Context, nodeConfig *config.Node, nodes typedcorev1.NodeInt
go func() {
err := flannel(ctx, nodeConfig.FlannelIface, nodeConfig.FlannelConfFile, nodeConfig.AgentConfig.KubeConfigKubelet, nodeConfig.FlannelIPv6Masq, nodeConfig.MultiClusterCIDR, netMode)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Fatalf("flannel exited: %v", err)
logrus.Errorf("flannel exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand Down
43 changes: 37 additions & 6 deletions pkg/daemons/executor/embed.go
Expand Up @@ -7,6 +7,7 @@ import (
"context"
"flag"
"net/http"
"os"
"runtime"
"runtime/debug"
"strconv"
Expand Down Expand Up @@ -90,7 +91,12 @@ func (e *Embedded) Kubelet(ctx context.Context, args []string) error {
if err := util.WaitForAPIServerReady(ctx, e.nodeConfig.AgentConfig.KubeConfigKubelet, util.DefaultAPIServerReadyTimeout); err != nil {
logrus.Fatalf("Kubelet failed to wait for apiserver ready: %v", err)
}
logrus.Fatalf("kubelet exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("kubelet exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand All @@ -106,7 +112,12 @@ func (e *Embedded) KubeProxy(ctx context.Context, args []string) error {
logrus.WithField("stack", string(debug.Stack())).Fatalf("kube-proxy panic: %v", err)
}
}()
logrus.Fatalf("kube-proxy exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("kube-proxy exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand All @@ -128,7 +139,12 @@ func (*Embedded) APIServer(ctx context.Context, etcdReady <-chan struct{}, args
logrus.WithField("stack", string(debug.Stack())).Fatalf("apiserver panic: %v", err)
}
}()
logrus.Fatalf("apiserver exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("apiserver exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand Down Expand Up @@ -157,7 +173,12 @@ func (e *Embedded) Scheduler(ctx context.Context, apiReady <-chan struct{}, args
logrus.WithField("stack", string(debug.Stack())).Fatalf("scheduler panic: %v", err)
}
}()
logrus.Fatalf("scheduler exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("scheduler exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand All @@ -174,7 +195,12 @@ func (*Embedded) ControllerManager(ctx context.Context, apiReady <-chan struct{}
logrus.WithField("stack", string(debug.Stack())).Fatalf("controller-manager panic: %v", err)
}
}()
logrus.Fatalf("controller-manager exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("controller-manager exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand Down Expand Up @@ -207,7 +233,12 @@ func (*Embedded) CloudControllerManager(ctx context.Context, ccmRBACReady <-chan
logrus.WithField("stack", string(debug.Stack())).Fatalf("cloud-controller-manager panic: %v", err)
}
}()
logrus.Errorf("cloud-controller-manager exited: %v", command.ExecuteContext(ctx))
err := command.ExecuteContext(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
logrus.Errorf("cloud-controller-manager exited: %v", err)
os.Exit(1)
}
os.Exit(0)
}()

return nil
Expand Down

0 comments on commit c190124

Please sign in to comment.