HA working with k0s too

Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>
This commit is contained in:
Mauro Morales
2025-03-21 23:29:16 +01:00
parent b2a3963a5e
commit 0d18f69c1c
4 changed files with 33 additions and 5 deletions

View File

@@ -126,6 +126,13 @@ func ControlPlane(cc *config.Config, pconfig *providerConfig.Config, roleName st
c.Logger.Info("Running bootstrap before stage") c.Logger.Info("Running bootstrap before stage")
utils.SH(fmt.Sprintf("kairos-agent run-stage provider-kairos.bootstrap.before.%s", roleName)) //nolint:errcheck utils.SH(fmt.Sprintf("kairos-agent run-stage provider-kairos.bootstrap.before.%s", roleName)) //nolint:errcheck
if controlPlane.HA() {
err = controlPlane.SetupHAToken()
if err != nil {
return err
}
}
svc, err := controlPlane.Service() svc, err := controlPlane.Service()
if err != nil { if err != nil {
return fmt.Errorf("failed to get %s service: %w", controlPlane.Distro(), err) return fmt.Errorf("failed to get %s service: %w", controlPlane.Distro(), err)

View File

@@ -137,8 +137,8 @@ func (k *K0sControlPlane) Args() ([]string, error) {
return args, errors.New("ExternalDB is not yet supported with k0s") return args, errors.New("ExternalDB is not yet supported with k0s")
} }
if k.HA() && !k.ClusterInit() { if k.HA() {
return args, errors.New("HA is not yet supported with k0s") args = append(args, "--token-file /etc/k0s/token")
} }
// when we start implementing this functionality, remember to use // when we start implementing this functionality, remember to use
@@ -218,9 +218,7 @@ func (k *K0sControlPlane) HA() bool {
} }
func (k *K0sControlPlane) ClusterInit() bool { func (k *K0sControlPlane) ClusterInit() bool {
// k0s does not have a cluster init role like k3s. Instead we should have a way to set in the config return k.role == common.RoleControlPlaneClusterInit
// if the user wants a single node cluster, multi-node cluster, or HA cluster
return false
} }
func (k *K0sControlPlane) IP() string { func (k *K0sControlPlane) IP() string {
@@ -287,6 +285,23 @@ func (k *K0sWorker) Args() ([]string, error) {
return args, nil return args, nil
} }
func (k *K0sControlPlane) SetupHAToken() error {
controlPlaneToken, err := k.Token()
if err != nil {
return err
}
if controlPlaneToken == "" {
return errors.New("control plane token is not there")
}
if err := os.WriteFile("/etc/k0s/token", []byte(controlPlaneToken), 0644); err != nil {
return err
}
return nil
}
func (k *K0sWorker) SetupWorker(_, nodeToken string) error { func (k *K0sWorker) SetupWorker(_, nodeToken string) error {
if err := os.WriteFile("/etc/k0s/token", []byte(nodeToken), 0644); err != nil { if err := os.WriteFile("/etc/k0s/token", []byte(nodeToken), 0644); err != nil {
return err return err

View File

@@ -260,6 +260,11 @@ func (k *K3sWorker) Args() ([]string, error) {
return args, nil return args, nil
} }
func (k *K3sControlPlane) SetupHAToken() error {
// K3s doesn't need a token for HA, it uses the node-token
return nil
}
func (k *K3sWorker) SetupWorker(controlPlaneIP, nodeToken string) error { func (k *K3sWorker) SetupWorker(controlPlaneIP, nodeToken string) error {
pconfig := k.ProviderConfig() pconfig := k.ProviderConfig()

View File

@@ -41,6 +41,7 @@ type K8sControlPlane interface {
SetIP(ip string) SetIP(ip string)
GuessInterface() GuessInterface()
Distro() string Distro() string
SetupHAToken() error
} }
type K8sWorker interface { type K8sWorker interface {