mirror of
https://github.com/openshift/installer.git
synced 2026-02-05 15:47:14 +01:00
scheduler: Use schedulable masters if no compute hosts defined.
This change makes use of a new configuration item on the scheduler CR that specifies that control plane hosts should be able to run workloads. This option is off by default, but will now be turned on if there are no compute machine pools with non-zero replicas defined. This change also removes a validation and warning when no compute hosts are defined, as an install with this configuration will now complete successfully.
This commit is contained in:
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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.
|
||||
@@ -49,6 +53,26 @@ func (s *Scheduler) Generate(dependencies asset.Parents) error {
|
||||
},
|
||||
}
|
||||
|
||||
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)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to create %s manifests from InstallConfig", s.Name())
|
||||
|
||||
@@ -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"
|
||||
@@ -183,7 +182,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" {
|
||||
@@ -193,14 +191,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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user