@@ -18,8 +18,9 @@ import (
1818 "github.com/urfave/cli/v2"
1919 "gopkg.in/yaml.v2"
2020 corev1 "k8s.io/api/core/v1"
21+ "k8s.io/apimachinery/pkg/api/errors"
2122 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22- "k8s.io/apimachinery/pkg/labels "
23+ "k8s.io/apimachinery/pkg/types "
2324 "sigs.k8s.io/controller-runtime/pkg/client"
2425 k8syaml "sigs.k8s.io/yaml"
2526
@@ -212,9 +213,8 @@ var joinCommand = &cli.Command{
212213 }
213214
214215 logrus .Debugf ("creating systemd unit files" )
215- // both controller and worker nodes will have 'worker' in the join command, but only controllers will have 'enable-worker'
216- // https://github.com/replicatedhq/kots/blob/6a0602f4054d5d5f2d97e649b3303a059f0064d9/pkg/embeddedcluster/node_join.go#L183
217- if err := createSystemdUnitFiles (! strings .Contains (jcmd .K0sJoinCommand , "enable-worker" )); err != nil {
216+ // both controller and worker nodes will have 'worker' in the join command
217+ if err := createSystemdUnitFiles (! strings .Contains (jcmd .K0sJoinCommand , "controller" )); err != nil {
218218 err := fmt .Errorf ("unable to create systemd unit files: %w" , err )
219219 metrics .ReportJoinFailed (c .Context , jcmd .MetricsBaseURL , jcmd .ClusterID , err )
220220 return err
@@ -461,17 +461,16 @@ func canEnableHA(ctx context.Context, kcli client.Client) (bool, error) {
461461 if installation .Spec .HighAvailability {
462462 return false , nil
463463 }
464- var nodes corev1.NodeList
465- labelSelector := labels .Set (map [string ]string {
466- "node-role.kubernetes.io/control-plane" : "true" ,
467- }).AsSelector ()
468- if err := kcli .List (ctx , & nodes , & client.ListOptions {LabelSelector : labelSelector }); err != nil {
469- return false , fmt .Errorf ("unable to list nodes: %w" , err )
464+ if err := kcli .Get (ctx , types.NamespacedName {Name : ecRestoreStateCMName , Namespace : "embedded-cluster" }, & corev1.ConfigMap {}); err == nil {
465+ return false , nil // cannot enable HA during a restore
466+ } else if ! errors .IsNotFound (err ) {
467+ return false , fmt .Errorf ("unable to get restore state configmap: %w" , err )
470468 }
471- if len (nodes .Items ) < 3 {
472- return false , nil
469+ ncps , err := kubeutils .NumOfControlPlaneNodes (ctx , kcli )
470+ if err != nil {
471+ return false , fmt .Errorf ("unable to check control plane nodes: %w" , err )
473472 }
474- return true , nil
473+ return ncps >= 3 , nil
475474}
476475
477476// enableHA enables high availability in the installation object
0 commit comments