diff --git a/pkg/cli/agent/agent.go b/pkg/cli/agent/agent.go index c7aff6829c..bda1df8e35 100644 --- a/pkg/cli/agent/agent.go +++ b/pkg/cli/agent/agent.go @@ -74,7 +74,6 @@ func Run(ctx *cli.Context) error { cfg := cmds.AgentConfig cfg.Debug = ctx.GlobalBool("debug") cfg.DataDir = dataDir - cfg.Labels = append(cfg.Labels, "node-role.kubernetes.io/worker=true") contextCtx := signals.SetupSignalHandler(context.Background()) systemd.SdNotify(true, "READY=1\n") diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index 14a83cdf00..1a0a202404 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -165,7 +165,6 @@ func run(app *cli.Context, cfg *cmds.Server) error { agentConfig.DataDir = filepath.Dir(serverConfig.ControlConfig.DataDir) agentConfig.ServerURL = url agentConfig.Token = token - agentConfig.Labels = append(agentConfig.Labels, "node-role.kubernetes.io/master=true") agentConfig.DisableLoadBalancer = true return agent.Run(ctx, agentConfig) diff --git a/pkg/server/server.go b/pkg/server/server.go index 0de7ce1eff..8342c0a041 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -11,6 +11,7 @@ import ( "path/filepath" "strconv" "strings" + "time" "github.com/pkg/errors" "github.com/rancher/dynamiclistener" @@ -31,6 +32,8 @@ import ( "k8s.io/apimachinery/pkg/util/net" ) +const MasterRoleLabelKey = "node-role.kubernetes.io/master" + func resolveDataDir(dataDir string) (string, error) { dataDir, err := datadir.Resolve(dataDir) return filepath.Join(dataDir, "server"), err @@ -118,7 +121,9 @@ func startWrangler(ctx context.Context, config *Config) (string, error) { panic(err) } } - + if !config.DisableAgent { + go setMasterRoleLabel(ctx, sc, config) + } if controlConfig.NoLeaderElect { go func() { start(ctx) @@ -357,3 +362,35 @@ func isSymlink(config string) bool { } return false } + +func setMasterRoleLabel(ctx context.Context, sc *Context, config *Config) error { + for { + nodeName := os.Getenv("NODE_NAME") + nodeController := sc.Core.Core().V1().Node() + nodeCached, err := nodeController.Cache().Get(nodeName) + if err != nil { + logrus.Infof("Waiting for master node %s startup: %v", nodeName, err) + time.Sleep(1 * time.Second) + continue + } + if v, ok := nodeCached.Labels[MasterRoleLabelKey]; ok && v == "true" { + break + } + node := nodeCached.DeepCopy() + if node.Labels == nil { + node.Labels = make(map[string]string) + } + node.Labels[MasterRoleLabelKey] = "true" + _, err = nodeController.Update(node) + if err == nil { + logrus.Infof("master role label has been set succesfully on node: %s", nodeName) + break + } + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(time.Second): + } + } + return nil +}