mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
Merge pull request #835 from galal-hussein/node_role_controller
Add master role label to server node at startup
This commit is contained in:
commit
73a1cfdd7c
@ -74,7 +74,6 @@ func Run(ctx *cli.Context) error {
|
|||||||
cfg := cmds.AgentConfig
|
cfg := cmds.AgentConfig
|
||||||
cfg.Debug = ctx.GlobalBool("debug")
|
cfg.Debug = ctx.GlobalBool("debug")
|
||||||
cfg.DataDir = dataDir
|
cfg.DataDir = dataDir
|
||||||
cfg.Labels = append(cfg.Labels, "node-role.kubernetes.io/worker=true")
|
|
||||||
|
|
||||||
contextCtx := signals.SetupSignalHandler(context.Background())
|
contextCtx := signals.SetupSignalHandler(context.Background())
|
||||||
systemd.SdNotify(true, "READY=1\n")
|
systemd.SdNotify(true, "READY=1\n")
|
||||||
|
@ -165,7 +165,6 @@ func run(app *cli.Context, cfg *cmds.Server) error {
|
|||||||
agentConfig.DataDir = filepath.Dir(serverConfig.ControlConfig.DataDir)
|
agentConfig.DataDir = filepath.Dir(serverConfig.ControlConfig.DataDir)
|
||||||
agentConfig.ServerURL = url
|
agentConfig.ServerURL = url
|
||||||
agentConfig.Token = token
|
agentConfig.Token = token
|
||||||
agentConfig.Labels = append(agentConfig.Labels, "node-role.kubernetes.io/master=true")
|
|
||||||
agentConfig.DisableLoadBalancer = true
|
agentConfig.DisableLoadBalancer = true
|
||||||
|
|
||||||
return agent.Run(ctx, agentConfig)
|
return agent.Run(ctx, agentConfig)
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/rancher/dynamiclistener"
|
"github.com/rancher/dynamiclistener"
|
||||||
@ -31,6 +32,8 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/net"
|
"k8s.io/apimachinery/pkg/util/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const MasterRoleLabelKey = "node-role.kubernetes.io/master"
|
||||||
|
|
||||||
func resolveDataDir(dataDir string) (string, error) {
|
func resolveDataDir(dataDir string) (string, error) {
|
||||||
dataDir, err := datadir.Resolve(dataDir)
|
dataDir, err := datadir.Resolve(dataDir)
|
||||||
return filepath.Join(dataDir, "server"), err
|
return filepath.Join(dataDir, "server"), err
|
||||||
@ -118,7 +121,9 @@ func startWrangler(ctx context.Context, config *Config) (string, error) {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !config.DisableAgent {
|
||||||
|
go setMasterRoleLabel(ctx, sc, config)
|
||||||
|
}
|
||||||
if controlConfig.NoLeaderElect {
|
if controlConfig.NoLeaderElect {
|
||||||
go func() {
|
go func() {
|
||||||
start(ctx)
|
start(ctx)
|
||||||
@ -357,3 +362,35 @@ func isSymlink(config string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user