types/node: add nodehooks to node struct to have them around at any stage (TO-DO: use this everywhere -> breaking change)
This commit is contained in:
parent
756a7d7b6e
commit
44a79c4670
@ -507,15 +507,40 @@ ClusterCreatOpts:
|
|||||||
*/
|
*/
|
||||||
// *** ServerLoadBalancer ***
|
// *** ServerLoadBalancer ***
|
||||||
if !clusterCreateOpts.DisableLoadBalancer {
|
if !clusterCreateOpts.DisableLoadBalancer {
|
||||||
node, nodeCreateOpts, err := LoadbalancerPrepare(ctx, runtime, cluster, &k3d.LoadbalancerCreateOpts{Labels: clusterCreateOpts.GlobalLabels})
|
lbNode, err := LoadbalancerPrepare(ctx, runtime, cluster, &k3d.LoadbalancerCreateOpts{Labels: clusterCreateOpts.GlobalLabels})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := NodeCreate(ctx, runtime, node, *nodeCreateOpts); err != nil {
|
cluster.Nodes = append(cluster.Nodes, lbNode) // append lbNode to list of cluster nodes, so it will be considered during rollback
|
||||||
log.Errorln("Failed to create loadbalancer")
|
|
||||||
|
lbConfig, err := LoadbalancerGenerateConfig(cluster)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error generating loadbalancer config: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare to write config to lb container
|
||||||
|
configyaml, err := yaml.Marshal(lbConfig)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Debugf("Created loadbalancer '%s'", node.Name)
|
|
||||||
|
writeLbConfigAction := k3d.NodeHook{
|
||||||
|
Stage: k3d.LifecycleStagePreStart,
|
||||||
|
Action: actions.WriteFileAction{
|
||||||
|
Runtime: runtime,
|
||||||
|
Dest: k3d.DefaultLoadbalancerConfigPath,
|
||||||
|
Mode: 0744,
|
||||||
|
Content: configyaml,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
lbNode.HookActions = append(lbNode.HookActions, writeLbConfigAction)
|
||||||
|
|
||||||
|
log.Infof("Creating LoadBalancer '%s'", lbNode.Name)
|
||||||
|
if err := NodeCreate(ctx, runtime, lbNode, k3d.NodeCreateOpts{}); err != nil {
|
||||||
|
return fmt.Errorf("error creating loadbalancer: %v", err)
|
||||||
|
}
|
||||||
|
log.Debugf("Created loadbalancer '%s'", lbNode.Name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -865,7 +890,9 @@ func ClusterStart(ctx context.Context, runtime k3drt.Runtime, cluster *k3d.Clust
|
|||||||
log.Infoln("Starting helpers...")
|
log.Infoln("Starting helpers...")
|
||||||
failedHelpers := 0
|
failedHelpers := 0
|
||||||
for _, helperNode := range aux {
|
for _, helperNode := range aux {
|
||||||
nodeStartOpts := k3d.NodeStartOpts{}
|
nodeStartOpts := k3d.NodeStartOpts{
|
||||||
|
NodeHooks: helperNode.HookActions,
|
||||||
|
}
|
||||||
if helperNode.Role == k3d.LoadBalancerRole {
|
if helperNode.Role == k3d.LoadBalancerRole {
|
||||||
nodeStartOpts.Wait = true
|
nodeStartOpts.Wait = true
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/go-connections/nat"
|
"github.com/docker/go-connections/nat"
|
||||||
"github.com/rancher/k3d/v4/pkg/actions"
|
|
||||||
"github.com/rancher/k3d/v4/pkg/runtimes"
|
"github.com/rancher/k3d/v4/pkg/runtimes"
|
||||||
"github.com/rancher/k3d/v4/pkg/types"
|
"github.com/rancher/k3d/v4/pkg/types"
|
||||||
k3d "github.com/rancher/k3d/v4/pkg/types"
|
k3d "github.com/rancher/k3d/v4/pkg/types"
|
||||||
@ -112,8 +111,7 @@ func GetLoadbalancerConfig(ctx context.Context, runtime runtimes.Runtime, cluste
|
|||||||
return currentConfig, nil
|
return currentConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadbalancerPrepare(ctx context.Context, runtime runtimes.Runtime, cluster *types.Cluster, opts *k3d.LoadbalancerCreateOpts) (*k3d.Node, *k3d.NodeCreateOpts, error) {
|
func LoadbalancerGenerateConfig(cluster *k3d.Cluster) (k3d.LoadbalancerConfig, error) {
|
||||||
|
|
||||||
lbConfig := k3d.LoadbalancerConfig{
|
lbConfig := k3d.LoadbalancerConfig{
|
||||||
Ports: map[string][]string{},
|
Ports: map[string][]string{},
|
||||||
Settings: k3d.LoadBalancerSettings{},
|
Settings: k3d.LoadBalancerSettings{},
|
||||||
@ -136,6 +134,14 @@ func LoadbalancerPrepare(ctx context.Context, runtime runtimes.Runtime, cluster
|
|||||||
lbConfig.Ports[fmt.Sprintf("%s.%s", exposedPort.Port(), exposedPort.Proto())] = servers
|
lbConfig.Ports[fmt.Sprintf("%s.%s", exposedPort.Port(), exposedPort.Proto())] = servers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// some additional nginx settings
|
||||||
|
lbConfig.Settings.WorkerProcesses = k3d.DefaultLoadbalancerWorkerProcesses + len(cluster.ServerLoadBalancer.Ports)*len(servers)
|
||||||
|
|
||||||
|
return lbConfig, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadbalancerPrepare(ctx context.Context, runtime runtimes.Runtime, cluster *types.Cluster, opts *k3d.LoadbalancerCreateOpts) (*k3d.Node, error) {
|
||||||
|
|
||||||
if cluster.ServerLoadBalancer.Ports == nil {
|
if cluster.ServerLoadBalancer.Ports == nil {
|
||||||
cluster.ServerLoadBalancer.Ports = nat.PortMap{}
|
cluster.ServerLoadBalancer.Ports = nat.PortMap{}
|
||||||
}
|
}
|
||||||
@ -151,28 +157,7 @@ func LoadbalancerPrepare(ctx context.Context, runtime runtimes.Runtime, cluster
|
|||||||
Networks: []string{cluster.Network.Name},
|
Networks: []string{cluster.Network.Name},
|
||||||
Restart: true,
|
Restart: true,
|
||||||
}
|
}
|
||||||
cluster.Nodes = append(cluster.Nodes, lbNode) // append lbNode to list of cluster nodes, so it will be considered during rollback
|
|
||||||
log.Infof("Creating LoadBalancer '%s'", lbNode.Name)
|
|
||||||
|
|
||||||
// some additional nginx settings
|
return lbNode, nil
|
||||||
lbConfig.Settings.WorkerProcesses = k3d.DefaultLoadbalancerWorkerProcesses + len(cluster.ServerLoadBalancer.Ports)*len(servers)
|
|
||||||
|
|
||||||
// prepare to write config to lb container
|
|
||||||
configyaml, err := yaml.Marshal(lbConfig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
writeLbConfigAction := k3d.NodeHook{
|
|
||||||
Stage: k3d.LifecycleStagePreStart,
|
|
||||||
Action: actions.WriteFileAction{
|
|
||||||
Runtime: runtime,
|
|
||||||
Dest: k3d.DefaultLoadbalancerConfigPath,
|
|
||||||
Mode: 0744,
|
|
||||||
Content: configyaml,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
return lbNode, &k3d.NodeCreateOpts{NodeHooks: []k3d.NodeHook{writeLbConfigAction}}, nil
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -334,6 +334,7 @@ type Node struct {
|
|||||||
Memory string // filled automatically
|
Memory string // filled automatically
|
||||||
State NodeState // filled automatically
|
State NodeState // filled automatically
|
||||||
IP NodeIP // filled automatically
|
IP NodeIP // filled automatically
|
||||||
|
HookActions []NodeHook `yaml:"hooks" json:"hooks,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServerOpts describes some additional server role specific opts
|
// ServerOpts describes some additional server role specific opts
|
||||||
@ -437,7 +438,7 @@ type LoadBalancerSettings struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
DefaultLoadbalancerConfigPath = "/etc/confd/portmap.yaml"
|
DefaultLoadbalancerConfigPath = "/etc/confd/values.yaml"
|
||||||
DefaultLoadbalancerWorkerProcesses = 1024
|
DefaultLoadbalancerWorkerProcesses = 1024
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user