Skip to content

Commit

Permalink
run controller by wiring up to a command
Browse files Browse the repository at this point in the history
  • Loading branch information
deads2k committed Aug 29, 2017
1 parent 26b5a8c commit dabf403
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 94 deletions.
47 changes: 0 additions & 47 deletions pkg/cmd/server/kubernetes/master/controller/config.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,9 @@
package controller

import (
"fmt"
"io/ioutil"
"os"

"k8s.io/apimachinery/pkg/runtime"
kerrors "k8s.io/apimachinery/pkg/util/errors"
kubecontroller "k8s.io/kubernetes/cmd/kube-controller-manager/app"
scheduleroptions "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
latestschedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api/latest"

configapi "github.com/openshift/origin/pkg/cmd/server/api"
cmdflags "github.com/openshift/origin/pkg/cmd/util/flags"
"github.com/openshift/origin/pkg/cmd/util/variable"
"k8s.io/kubernetes/pkg/volume"
)
Expand All @@ -22,9 +12,6 @@ import (
// launch the set of kube (not openshift) controllers.
type KubeControllerConfig struct {
HorizontalPodAutoscalerControllerConfig HorizontalPodAutoscalerControllerConfig

// TODO the scheduler should move out into its own logical component
SchedulerControllerConfig SchedulerControllerConfig
}

// GetControllerInitializers return the controller initializer functions for kube controllers
Expand All @@ -36,48 +23,14 @@ func (c KubeControllerConfig) GetControllerInitializers() (map[string]kubecontro
// in openshift-infra, and pass it a scale client that knows how to scale DCs
ret["horizontalpodautoscaling"] = c.HorizontalPodAutoscalerControllerConfig.RunController

// FIXME: Move this under openshift controller intialization once we figure out
// deployment (options).
ret["openshift.io/scheduler"] = c.SchedulerControllerConfig.RunController

return ret, nil
}

// BuildKubeControllerConfig builds the struct to create the controller initializers. Eventually we want this to be fully
// stock kube with no modification.
func BuildKubeControllerConfig(options configapi.MasterConfig) (*KubeControllerConfig, error) {
var err error
ret := &KubeControllerConfig{}

kubeExternal, _, err := configapi.GetExternalKubeClient(options.MasterClients.OpenShiftLoopbackKubeConfig, options.MasterClients.OpenShiftLoopbackClientConnectionOverrides)
if err != nil {
return nil, err
}

var schedulerPolicy *schedulerapi.Policy
if _, err := os.Stat(options.KubernetesMasterConfig.SchedulerConfigFile); err == nil {
schedulerPolicy = &schedulerapi.Policy{}
configData, err := ioutil.ReadFile(options.KubernetesMasterConfig.SchedulerConfigFile)
if err != nil {
return nil, fmt.Errorf("unable to read scheduler config: %v", err)
}
if err := runtime.DecodeInto(latestschedulerapi.Codec, configData, schedulerPolicy); err != nil {
return nil, fmt.Errorf("invalid scheduler configuration: %v", err)
}
}
// resolve extended arguments
// TODO: this should be done in config validation (along with the above) so we can provide
// proper errors
schedulerserver := scheduleroptions.NewSchedulerServer()
schedulerserver.PolicyConfigFile = options.KubernetesMasterConfig.SchedulerConfigFile
if err := cmdflags.Resolve(options.KubernetesMasterConfig.SchedulerArguments, schedulerserver.AddFlags); len(err) > 0 {
return nil, kerrors.NewAggregate(err)
}
ret.SchedulerControllerConfig = SchedulerControllerConfig{
PrivilegedClient: kubeExternal,
SchedulerServer: schedulerserver,
}

imageTemplate := variable.NewDefaultImageTemplate()
imageTemplate.Format = options.ImageConfig.Format
imageTemplate.Latest = options.ImageConfig.Latest
Expand Down
47 changes: 0 additions & 47 deletions pkg/cmd/server/kubernetes/master/controller/core.go

This file was deleted.

12 changes: 12 additions & 0 deletions pkg/cmd/server/start/start_master.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
kubelettypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/master"
schedulerapp "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app"
kutilerrors "k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/errors"

assetapiserver "github.com/openshift/origin/pkg/assets/apiserver"
Expand Down Expand Up @@ -392,6 +393,13 @@ func (m *Master) Start() error {

controllersEnabled := m.controllers && m.config.Controllers != configapi.ControllersDisabled
if controllersEnabled {
// start the scheduler
// TODO we need a real identity for this. Right now it's just using the loopback connection like it used to.
scheduler, err := newScheduler(m.config.MasterClients.OpenShiftLoopbackKubeConfig, m.config.KubernetesMasterConfig.SchedulerConfigFile, m.config.KubernetesMasterConfig.SchedulerArguments)
if err != nil {
return err
}

// informers are shared amongst all the various controllers we build
informers, err := NewInformers(*m.config)
if err != nil {
Expand Down Expand Up @@ -472,6 +480,10 @@ func (m *Master) Start() error {
go func() {
controllerPlug.WaitForStart()

// this does a second leader election, but doing the second leader election will allow us to move out process in
// 3.8 if we so choose.
go schedulerapp.Run(scheduler)

controllerContext, err := getControllerContext(*m.config, kubeControllerManagerConfig, cloudProvider, informers, utilwait.NeverStop)
if err != nil {
glog.Fatal(err)
Expand Down
29 changes: 29 additions & 0 deletions pkg/cmd/server/start/start_scheduler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package start

import (
kerrors "k8s.io/apimachinery/pkg/util/errors"
scheduleroptions "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
_ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider"

cmdflags "github.com/openshift/origin/pkg/cmd/util/flags"
)

func newScheduler(kubeconfigFile, schedulerConfigFile string, cmdLineArgs map[string][]string) (*scheduleroptions.SchedulerServer, error) {
if cmdLineArgs == nil {
cmdLineArgs = map[string][]string{}
}
if len(cmdLineArgs["kubeconfig"]) == 0 {
cmdLineArgs["kubeconfig"] = []string{kubeconfigFile}
}
if len(cmdLineArgs["policy-config-file"]) == 0 {
cmdLineArgs["policy-config-file"] = []string{schedulerConfigFile}
}

// resolve arguments
schedulerserver := scheduleroptions.NewSchedulerServer()
if err := cmdflags.Resolve(cmdLineArgs, schedulerserver.AddFlags); len(err) > 0 {
return nil, kerrors.NewAggregate(err)
}

return schedulerserver, nil
}

0 comments on commit dabf403

Please sign in to comment.