Skip to content

Commit

Permalink
Merge pull request #2004 from russellb/schedulable-masters
Browse files Browse the repository at this point in the history
scheduler: Use schedulable masters if no compute hosts defined.
  • Loading branch information
openshift-merge-robot authored Jul 30, 2019
2 parents fc8c683 + 64f96df commit 208a3be
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
30 changes: 28 additions & 2 deletions pkg/asset/manifests/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import (

"github.com/ghodss/yaml"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"

configv1 "github.com/openshift/api/config/v1"
"github.com/openshift/installer/pkg/asset"
"github.com/openshift/installer/pkg/asset/installconfig"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand All @@ -30,7 +32,9 @@ func (*Scheduler) Name() string {
// Dependencies returns all of the dependencies directly needed to generate
// the asset.
func (*Scheduler) Dependencies() []asset.Asset {
return []asset.Asset{}
return []asset.Asset{
&installconfig.InstallConfig{},
}
}

// Generate generates the scheduler config and its CRD.
Expand All @@ -44,7 +48,29 @@ func (s *Scheduler) Generate(dependencies asset.Parents) error {
Name: "cluster",
// not namespaced
},
Spec: configv1.SchedulerSpec{},
Spec: configv1.SchedulerSpec{
MastersSchedulable: false,
},
}

installConfig := &installconfig.InstallConfig{}
dependencies.Get(installConfig)
computeReplicas := int64(0)
for _, pool := range installConfig.Config.Compute {
if pool.Replicas != nil {
computeReplicas += *pool.Replicas
}
}
if computeReplicas == 0 {
// A schedulable host is required for a successful install to complete.
// If the install config has 0 replicas for compute hosts, it's one of two cases:
// 1. An IPI deployment with no compute hosts. The deployment can not succeed
// without MastersSchedulable = true.
// 2. A UPI deployment. The deployment may add compute hosts, but to ensure the
// the highest probability of a successful deployment, we default to
// schedulable masters.
logrus.Warningf("Making control-plane schedulable by setting MastersSchedulabe to true for Scheduler cluster settings")
config.Spec.MastersSchedulable = true
}

configData, err := yaml.Marshal(config)
Expand Down
8 changes: 0 additions & 8 deletions pkg/types/validation/installconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (

dockerref "github.com/containers/image/docker/reference"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/util/validation/field"

"github.com/openshift/installer/pkg/types"
Expand Down Expand Up @@ -188,7 +187,6 @@ func validateControlPlane(platform *types.Platform, pool *types.MachinePool, fld
func validateCompute(platform *types.Platform, pools []types.MachinePool, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
poolNames := map[string]bool{}
foundPositiveReplicas := false
for i, p := range pools {
poolFldPath := fldPath.Index(i)
if p.Name != "worker" {
Expand All @@ -198,14 +196,8 @@ func validateCompute(platform *types.Platform, pools []types.MachinePool, fldPat
allErrs = append(allErrs, field.Duplicate(poolFldPath.Child("name"), p.Name))
}
poolNames[p.Name] = true
if p.Replicas != nil && *p.Replicas > 0 {
foundPositiveReplicas = true
}
allErrs = append(allErrs, ValidateMachinePool(platform, &p, poolFldPath)...)
}
if !foundPositiveReplicas {
logrus.Warnf("There are no compute nodes specified. The cluster will not fully initialize without compute nodes.")
}
return allErrs
}

Expand Down

0 comments on commit 208a3be

Please sign in to comment.