Bootstrap the executor even when the agent is disabled

Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
This commit is contained in:
Brad Davidson 2022-02-14 16:34:49 -08:00 committed by Brad Davidson
parent a7878db17f
commit f090bf2d5e
2 changed files with 49 additions and 14 deletions

View File

@ -187,6 +187,32 @@ func coreClient(cfg string) (kubernetes.Interface, error) {
return kubernetes.NewForConfig(restConfig) return kubernetes.NewForConfig(restConfig)
} }
// RunStandalone bootstraps the executor, but does not run the kubelet or containerd.
// This allows other bits of code that expect the executor to be set up properly to function
// even when the agent is disabled. It will only return in case of error or context
// cancellation.
func RunStandalone(ctx context.Context, cfg cmds.Agent) error {
proxy, err := createProxyAndValidateToken(ctx, &cfg)
if err != nil {
return err
}
nodeConfig := config.Get(ctx, cfg, proxy)
if err := executor.Bootstrap(ctx, nodeConfig, cfg); err != nil {
return err
}
if cfg.AgentReady != nil {
close(cfg.AgentReady)
}
<-ctx.Done()
return ctx.Err()
}
// Run sets up cgroups, configures the LB proxy, and triggers startup
// of containerd and kubelet. It will only return in case of error or context
// cancellation.
func Run(ctx context.Context, cfg cmds.Agent) error { func Run(ctx context.Context, cfg cmds.Agent) error {
if err := cgroups.Validate(); err != nil { if err := cgroups.Validate(); err != nil {
return err return err
@ -198,14 +224,23 @@ func Run(ctx context.Context, cfg cmds.Agent) error {
} }
} }
proxy, err := createProxyAndValidateToken(ctx, &cfg)
if err != nil {
return err
}
return run(ctx, cfg, proxy)
}
func createProxyAndValidateToken(ctx context.Context, cfg *cmds.Agent) (proxy.Proxy, error) {
agentDir := filepath.Join(cfg.DataDir, "agent") agentDir := filepath.Join(cfg.DataDir, "agent")
if err := os.MkdirAll(agentDir, 0700); err != nil { if err := os.MkdirAll(agentDir, 0700); err != nil {
return err return nil, err
} }
proxy, err := proxy.NewSupervisorProxy(ctx, !cfg.DisableLoadBalancer, agentDir, cfg.ServerURL, cfg.LBServerPort) proxy, err := proxy.NewSupervisorProxy(ctx, !cfg.DisableLoadBalancer, agentDir, cfg.ServerURL, cfg.LBServerPort)
if err != nil { if err != nil {
return err return nil, err
} }
for { for {
@ -214,7 +249,7 @@ func Run(ctx context.Context, cfg cmds.Agent) error {
logrus.Error(err) logrus.Error(err)
select { select {
case <-ctx.Done(): case <-ctx.Done():
return ctx.Err() return nil, ctx.Err()
case <-time.After(2 * time.Second): case <-time.After(2 * time.Second):
} }
continue continue
@ -222,8 +257,7 @@ func Run(ctx context.Context, cfg cmds.Agent) error {
cfg.Token = newToken.String() cfg.Token = newToken.String()
break break
} }
return proxy, nil
return run(ctx, cfg, proxy)
} }
func configureNode(ctx context.Context, agentConfig *daemonconfig.Agent, nodes typedcorev1.NodeInterface) error { func configureNode(ctx context.Context, agentConfig *daemonconfig.Agent, nodes typedcorev1.NodeInterface) error {

View File

@ -80,8 +80,10 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
return err return err
} }
cfg.DataDir = dataDir cfg.DataDir = dataDir
if err := rootless.Rootless(dataDir); err != nil { if !cfg.DisableAgent {
return err if err := rootless.Rootless(dataDir); err != nil {
return err
}
} }
} }
@ -441,12 +443,6 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
} }
}() }()
if cfg.DisableAgent {
close(agentReady)
<-ctx.Done()
return nil
}
ip := serverConfig.ControlConfig.BindAddress ip := serverConfig.ControlConfig.BindAddress
if ip == "" { if ip == "" {
ip = "127.0.0.1" ip = "127.0.0.1"
@ -468,7 +464,6 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
agentConfig.DisableServiceLB = serverConfig.DisableServiceLB agentConfig.DisableServiceLB = serverConfig.DisableServiceLB
agentConfig.ETCDAgent = serverConfig.ControlConfig.DisableAPIServer agentConfig.ETCDAgent = serverConfig.ControlConfig.DisableAPIServer
agentConfig.ClusterReset = serverConfig.ControlConfig.ClusterReset agentConfig.ClusterReset = serverConfig.ControlConfig.ClusterReset
agentConfig.Rootless = cfg.Rootless agentConfig.Rootless = cfg.Rootless
if agentConfig.Rootless { if agentConfig.Rootless {
@ -484,6 +479,12 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
agentConfig.APIAddressCh = make(chan []string) agentConfig.APIAddressCh = make(chan []string)
go getAPIAddressFromEtcd(ctx, serverConfig, agentConfig) go getAPIAddressFromEtcd(ctx, serverConfig, agentConfig)
} }
if cfg.DisableAgent {
agentConfig.ContainerRuntimeEndpoint = "/dev/null"
return agent.RunStandalone(ctx, agentConfig)
}
return agent.Run(ctx, agentConfig) return agent.Run(ctx, agentConfig)
} }