Skip to content
This repository is currently being migrated. It's locked while the migration is in progress.

Commit

Permalink
Kube version specific Scheduler image (#26)
Browse files Browse the repository at this point in the history
  • Loading branch information
mhmxs authored Oct 8, 2021
1 parent 50a5914 commit a349882
Showing 11 changed files with 37 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -16,4 +16,4 @@ configMapGenerator:
images:
- name: kube-scheduler
newName: k8s.gcr.io/kube-scheduler
newTag: v1.20.5
newTag: v1.18.0
2 changes: 1 addition & 1 deletion channels/stable
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ manifests:
- name: node
version: 2.5.0
- name: scheduler
version: 0.1.0
version: 1.18.0
- name: storageclass
version: 0.1.0
- name: before-install
8 changes: 4 additions & 4 deletions controllers/storageoscluster/operator.go
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@ func init() {
instrumentation = telemetry.NewInstrumentation(instrumentationName)
}

func NewOperator(mgr ctrl.Manager, fs filesys.FileSystem, execStrategy executor.ExecutionStrategy) (*operatorv1.CompositeOperator, error) {
func NewOperator(mgr ctrl.Manager, kubeVersion string, fs filesys.FileSystem, execStrategy executor.ExecutionStrategy) (*operatorv1.CompositeOperator, error) {
_, span, _, log := instrumentation.Start(context.Background(), "storageoscluster.NewOperator")
defer span.End()

@@ -75,7 +75,7 @@ func NewOperator(mgr ctrl.Manager, fs filesys.FileSystem, execStrategy executor.
// Scheduler operands are independent.
apiManagerOp := NewAPIManagerOperand(apiManagerOpName, mgr.GetClient(), []string{nodeOpName}, operand.RequeueOnError, fs, kcl)
csiOp := NewCSIOperand(csiOpName, mgr.GetClient(), []string{nodeOpName}, operand.RequeueOnError, fs, kcl)
schedulerOp := NewSchedulerOperand(schedulerOpName, mgr.GetClient(), []string{}, operand.RequeueOnError, fs, kcl)
schedulerOp := NewSchedulerOperand(schedulerOpName, mgr.GetClient(), kubeVersion, []string{}, operand.RequeueOnError, fs, kcl)
nodeOp := NewNodeOperand(nodeOpName, mgr.GetClient(), []string{beforeInstallOpName}, operand.RequeueOnError, fs, kcl)
storageClassOp := NewStorageClassOperand(storageclassOpName, mgr.GetClient(), []string{}, operand.RequeueOnError, fs, kcl)
beforeInstallOp := NewBeforeInstallOperand(beforeInstallOpName, mgr.GetClient(), []string{}, operand.RequeueOnError, fs, kcl)
@@ -91,8 +91,8 @@ func NewOperator(mgr ctrl.Manager, fs filesys.FileSystem, execStrategy executor.
)
}

func NewStorageOSClusterController(mgr ctrl.Manager, fs filesys.FileSystem, execStrategy executor.ExecutionStrategy) (*StorageOSClusterController, error) {
operator, err := NewOperator(mgr, fs, execStrategy)
func NewStorageOSClusterController(mgr ctrl.Manager, kubeVersion string, fs filesys.FileSystem, execStrategy executor.ExecutionStrategy) (*StorageOSClusterController, error) {
operator, err := NewOperator(mgr, kubeVersion, fs, execStrategy)
if err != nil {
return nil, fmt.Errorf("failed to create a new operator: %w", err)
}
20 changes: 17 additions & 3 deletions controllers/storageoscluster/scheduler_operand.go
Original file line number Diff line number Diff line change
@@ -31,11 +31,15 @@ const (

// Related image environment variable.
kubeSchedulerEnvVar = "RELATED_IMAGE_KUBE_SCHEDULER"

// Official scheduler image.
officialSchedulerImage = "k8s.gcr.io/kube-scheduler"
)

type SchedulerOperand struct {
name string
client client.Client
kubeVersion string
requires []string
requeueStrategy operand.RequeueStrategy
fs filesys.FileSystem
@@ -74,7 +78,7 @@ func (c *SchedulerOperand) Ensure(ctx context.Context, obj client.Object, ownerR
ctx, span, _, _ := instrumentation.Start(ctx, "SchedulerOperand.Ensure")
defer span.End()

b, err := getSchedulerBuilder(c.fs, obj, c.kubectlClient)
b, err := getSchedulerBuilder(c.fs, obj, c.kubectlClient, c.kubeVersion)
if err != nil {
span.RecordError(err)
return nil, err
@@ -87,7 +91,7 @@ func (c *SchedulerOperand) Delete(ctx context.Context, obj client.Object) (event
ctx, span, _, _ := instrumentation.Start(ctx, "SchedulerOperand.Delete")
defer span.End()

b, err := getSchedulerBuilder(c.fs, obj, c.kubectlClient)
b, err := getSchedulerBuilder(c.fs, obj, c.kubectlClient, c.kubeVersion)
if err != nil {
span.RecordError(err)
return nil, err
@@ -96,7 +100,7 @@ func (c *SchedulerOperand) Delete(ctx context.Context, obj client.Object) (event
return nil, b.Delete(ctx)
}

func getSchedulerBuilder(fs filesys.FileSystem, obj client.Object, kcl kubectl.KubectlClient) (*declarative.Builder, error) {
func getSchedulerBuilder(fs filesys.FileSystem, obj client.Object, kcl kubectl.KubectlClient, kubeVersion string) (*declarative.Builder, error) {
cluster, ok := obj.(*storageoscomv1.StorageOSCluster)
if !ok {
return nil, fmt.Errorf("failed to convert %v to StorageOSCluster", obj)
@@ -118,6 +122,14 @@ func getSchedulerBuilder(fs filesys.FileSystem, obj client.Object, kcl kubectl.K
}
images = append(images, image.GetKustomizeImageList(namedImages)...)

// Set scheduler image to match with Kubernetes version.
if len(images) == 0 {
officialImages := image.NamedImages{
kImageKubeScheduler: fmt.Sprintf("%s:%s", officialSchedulerImage, kubeVersion),
}
images = append(images, image.GetKustomizeImageList(officialImages)...)
}

// Create kubescheduler config transforms.
configTransforms := []transform.TransformFunc{}

@@ -141,6 +153,7 @@ func getSchedulerBuilder(fs filesys.FileSystem, obj client.Object, kcl kubectl.K
func NewSchedulerOperand(
name string,
client client.Client,
kubeVersion string,
requires []string,
requeueStrategy operand.RequeueStrategy,
fs filesys.FileSystem,
@@ -149,6 +162,7 @@ func NewSchedulerOperand(
return &SchedulerOperand{
name: name,
client: client,
kubeVersion: kubeVersion,
requires: requires,
requeueStrategy: requeueStrategy,
fs: fs,
4 changes: 2 additions & 2 deletions controllers/storageoscluster_controller.go
Original file line number Diff line number Diff line change
@@ -60,7 +60,7 @@ func NewStorageOSClusterReconciler(mgr ctrl.Manager) *StorageOSClusterReconciler
// +kubebuilder:rbac:groups=security.openshift.io,resources=securitycontextconstraints,resourceNames=privileged,verbs=get;create;update;delete;use

// SetupWithManager sets up the controller with the Manager.
func (r *StorageOSClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
func (r *StorageOSClusterReconciler) SetupWithManager(mgr ctrl.Manager, kubeVersion string) error {
_, span, _, log := instrumentation.Start(context.Background(), "StorageosCluster.SetupWithManager")
defer span.End()

@@ -71,7 +71,7 @@ func (r *StorageOSClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
}

// TODO: Expose the executor strategy option via SetupWithManager.
cc, err := storageoscluster.NewStorageOSClusterController(mgr, fs, executor.Parallel)
cc, err := storageoscluster.NewStorageOSClusterController(mgr, kubeVersion, fs, executor.Parallel)
if err != nil {
return err
}
14 changes: 12 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import (

// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
// to ensure that exec-entrypoint and run can make use of them.
"k8s.io/client-go/kubernetes"
_ "k8s.io/client-go/plugin/pkg/client/auth"

"github.com/darkowlzz/operator-toolkit/telemetry/export"
@@ -94,7 +95,16 @@ func main() {
}
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
restConfig := ctrl.GetConfigOrDie()

// Get Kubernetes version.
kubeVersion, err := kubernetes.NewForConfigOrDie(restConfig).Discovery().ServerVersion()
if err != nil {
setupLog.Error(err, "unable to get Kubernetes version")
os.Exit(1)
}

mgr, err := ctrl.NewManager(restConfig, options)
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
@@ -142,7 +152,7 @@ func main() {
}

if err = controllers.NewStorageOSClusterReconciler(mgr).
SetupWithManager(mgr); err != nil {
SetupWithManager(mgr, kubeVersion.String()); err != nil {
setupLog.Error(err, "unable to create controller",
"controller", "StorageOSCluster")
os.Exit(1)

0 comments on commit a349882

Please sign in to comment.