Merge pull request #1171 from dweomer/mutable-labels

Mutable --node-label values for server/agent sub-commands.
This commit is contained in:
Erik Wilson 2019-12-11 10:35:27 -07:00 committed by GitHub
commit 56b0743653
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 17 deletions

View File

@ -9,6 +9,8 @@ import (
"strings" "strings"
"time" "time"
"k8s.io/apimachinery/pkg/labels"
systemd "github.com/coreos/go-systemd/daemon" systemd "github.com/coreos/go-systemd/daemon"
"github.com/rancher/k3s/pkg/agent/config" "github.com/rancher/k3s/pkg/agent/config"
"github.com/rancher/k3s/pkg/agent/containerd" "github.com/rancher/k3s/pkg/agent/containerd"
@ -72,11 +74,9 @@ func run(ctx context.Context, cfg cmds.Agent, lb *loadbalancer.LoadBalancer) err
} }
} }
if !nodeConfig.AgentConfig.DisableCCM { if err := syncLabels(ctx, &nodeConfig.AgentConfig, coreClient.CoreV1().Nodes()); err != nil {
if err := syncAddressesLabels(ctx, &nodeConfig.AgentConfig, coreClient.CoreV1().Nodes()); err != nil {
return err return err
} }
}
if !nodeConfig.AgentConfig.DisableNPC { if !nodeConfig.AgentConfig.DisableNPC {
if err := netpol.Run(ctx, nodeConfig); err != nil { if err := netpol.Run(ctx, nodeConfig); err != nil {
@ -158,7 +158,7 @@ func validate() error {
return nil return nil
} }
func syncAddressesLabels(ctx context.Context, agentConfig *daemonconfig.Agent, nodes v1.NodeInterface) error { func syncLabels(ctx context.Context, agentConfig *daemonconfig.Agent, nodes v1.NodeInterface) error {
for { for {
node, err := nodes.Get(agentConfig.NodeName, metav1.GetOptions{}) node, err := nodes.Get(agentConfig.NodeName, metav1.GetOptions{})
if err != nil { if err != nil {
@ -167,8 +167,14 @@ func syncAddressesLabels(ctx context.Context, agentConfig *daemonconfig.Agent, n
continue continue
} }
newLabels, update := updateLabelMap(agentConfig, node.Labels) newLabels, updateMutables := updateMutableLabels(agentConfig, node.Labels)
if update {
updateAddresses := !agentConfig.DisableCCM
if updateAddresses {
newLabels, updateAddresses = updateAddressLabels(agentConfig, newLabels)
}
if updateAddresses || updateMutables {
node.Labels = newLabels node.Labels = newLabels
if _, err := nodes.Update(node); err != nil { if _, err := nodes.Update(node); err != nil {
logrus.Infof("Failed to update node %s: %v", agentConfig.NodeName, err) logrus.Infof("Failed to update node %s: %v", agentConfig.NodeName, err)
@ -179,9 +185,9 @@ func syncAddressesLabels(ctx context.Context, agentConfig *daemonconfig.Agent, n
continue continue
} }
} }
logrus.Infof("addresses labels has been set successfully on node: %s", agentConfig.NodeName) logrus.Infof("labels have been set successfully on node: %s", agentConfig.NodeName)
} else { } else {
logrus.Infof("addresses labels has already been set successfully on node: %s", agentConfig.NodeName) logrus.Infof("labels have already set on node: %s", agentConfig.NodeName)
} }
break break
@ -190,19 +196,34 @@ func syncAddressesLabels(ctx context.Context, agentConfig *daemonconfig.Agent, n
return nil return nil
} }
func updateLabelMap(agentConfig *daemonconfig.Agent, nodeLabels map[string]string) (map[string]string, bool) { func updateMutableLabels(agentConfig *daemonconfig.Agent, nodeLabels map[string]string) (map[string]string, bool) {
result := map[string]string{} result := map[string]string{}
for k, v := range nodeLabels {
for _, m := range agentConfig.NodeLabels {
var (
v string
p = strings.SplitN(m, `=`, 2)
k = p[0]
)
if len(p) > 1 {
v = p[1]
}
result[k] = v result[k] = v
} }
result = labels.Merge(nodeLabels, result)
return result, !equality.Semantic.DeepEqual(nodeLabels, result)
}
result[InternalIPLabel] = agentConfig.NodeIP func updateAddressLabels(agentConfig *daemonconfig.Agent, nodeLabels map[string]string) (map[string]string, bool) {
result[HostnameLabel] = agentConfig.NodeName result := map[string]string{
if agentConfig.NodeExternalIP == "" { InternalIPLabel: agentConfig.NodeIP,
delete(result, ExternalIPLabel) HostnameLabel: agentConfig.NodeName,
} else { }
if agentConfig.NodeExternalIP != "" {
result[ExternalIPLabel] = agentConfig.NodeExternalIP result[ExternalIPLabel] = agentConfig.NodeExternalIP
} }
result = labels.Merge(nodeLabels, result)
return result, !equality.Semantic.DeepEqual(nodeLabels, result) return result, !equality.Semantic.DeepEqual(nodeLabels, result)
} }

View File

@ -123,7 +123,7 @@ var (
} }
NodeLabels = cli.StringSliceFlag{ NodeLabels = cli.StringSliceFlag{
Name: "node-label", Name: "node-label",
Usage: "(agent/node) Registering kubelet with set of labels", Usage: "(agent/node) Registering and starting kubelet with set of labels",
Value: &AgentConfig.Labels, Value: &AgentConfig.Labels,
} }
) )