Skip to content

Commit

Permalink
Cluster-capacity code update for kube 1.9.
Browse files Browse the repository at this point in the history
  • Loading branch information
Avesh Agarwal committed Jan 12, 2018
1 parent 64c9fe2 commit 408fb77
Show file tree
Hide file tree
Showing 26 changed files with 713 additions and 388 deletions.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ integration-tests:
./integration-tests.sh

image:
docker build -t docker.io/gofed/cluster-capacity .
docker build -t cluster-capacity .

clean:
rm -f cluster-capacity genpod hypercc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
reviewers:
- ingvagabund
- aveshagarwal
- hodovska
approvers:
- ingvagabund
- aveshagarwal
- hodovska
- ingvagabund
- aveshagarwal
- hodovska
reviewers:
- ingvagabund
- aveshagarwal
- hodovska
Original file line number Diff line number Diff line change
Expand Up @@ -26,42 +26,42 @@ import (

"github.com/spf13/pflag"

"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/yaml"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/validation"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
schedopt "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
clientset "k8s.io/client-go/kubernetes"
api "k8s.io/kubernetes/pkg/apis/core"
apiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
"k8s.io/kubernetes/pkg/apis/core/validation"
schedapp "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app"
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider"

"github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store"
"github.com/kubernetes-incubator/cluster-capacity/pkg/utils"
)

type ClusterCapacityConfig struct {
Schedulers []*schedopt.SchedulerServer
//Schedulers []*schedapp.SchedulerServer
Pod *v1.Pod
KubeClient clientset.Interface
Options *ClusterCapacityOptions
DefaultScheduler *schedopt.SchedulerServer
DefaultScheduler *schedapp.SchedulerServer
ResourceStore store.ResourceStore
}

type ClusterCapacityOptions struct {
Kubeconfig string
SchedulerConfigFile []string
Kubeconfig string
//SchedulerConfigFile []string
DefaultSchedulerConfigFile string
MaxLimit int
Verbose bool
PodSpecFile string
OutputFormat string
ResourceSpaceMode string
//ResourceSpaceMode string
}

func NewClusterCapacityConfig(opt *ClusterCapacityOptions) *ClusterCapacityConfig {
return &ClusterCapacityConfig{
Schedulers: make([]*schedopt.SchedulerServer, 0),
Options: opt,
DefaultScheduler: schedopt.NewSchedulerServer(),
Options: opt,
}
}

Expand All @@ -83,8 +83,27 @@ func (s *ClusterCapacityOptions) AddFlags(fs *pflag.FlagSet) {
fs.StringVarP(&s.OutputFormat, "output", "o", s.OutputFormat, "Output format. One of: json|yaml (Note: output is not versioned or guaranteed to be stable across releases).")
}

func parseSchedulerConfig(path string) (*schedopt.SchedulerServer, error) {
newScheduler := schedopt.NewSchedulerServer()
func (s *ClusterCapacityConfig) parseSchedulerConfig(path string) (*schedapp.SchedulerServer, error) {
soptions, err := schedapp.NewOptions()
if err != nil {
return nil, err
}

err = soptions.ReallyApplyDefaults()
if err != nil {
return nil, err
}

soptions.ConfigFile = path

err = soptions.Complete()
if err != nil {
return nil, err
}

ksConfig := soptions.GetConfig()
ksConfig.ClientConnection.KubeConfigFile = s.Options.Kubeconfig

if len(path) > 0 {
filename, _ := filepath.Abs(path)
config, err := os.Open(filename)
Expand All @@ -93,29 +112,42 @@ func parseSchedulerConfig(path string) (*schedopt.SchedulerServer, error) {
}

decoder := yaml.NewYAMLOrJSONDecoder(config, 4096)
decoder.Decode(&(newScheduler.KubeSchedulerConfiguration))
decoder.Decode(ksConfig)
}

var master string
master, err = utils.GetMasterFromKubeConfig(s.Options.Kubeconfig)
if err != nil {
return nil, err
}

// TODO(avesh): need to check if this works correctly
algorithmprovider.ApplyFeatureGates()

var newScheduler *schedapp.SchedulerServer
newScheduler, err = schedapp.NewSchedulerServer(ksConfig, master)
if err != nil {
return nil, err
}

newScheduler.SchedulerName = "cluster-capacity"
return newScheduler, nil
}

func (s *ClusterCapacityConfig) ParseAdditionalSchedulerConfigs() error {
// TODO (avesh): disable until support for multiple schedulers is implemented.
/*func (s *ClusterCapacityConfig) ParseAdditionalSchedulerConfigs() error {
for _, config := range s.Options.SchedulerConfigFile {
if config == "default-scheduler.yaml" {
continue
}
newScheduler, err := parseSchedulerConfig(config)
newScheduler, err := s.parseSchedulerConfig(config)
if err != nil {
return err
}
newScheduler.Master, err = utils.GetMasterFromKubeConfig(s.Options.Kubeconfig)
if err != nil {
return err
}
newScheduler.Kubeconfig = s.Options.Kubeconfig
s.Schedulers = append(s.Schedulers, newScheduler)
}
return nil
}
}*/

func (s *ClusterCapacityConfig) ParseAPISpec() error {
var spec io.Reader
Expand Down Expand Up @@ -149,6 +181,11 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error {
versionedPod.ObjectMeta.Namespace = "default"
}

// set pod's scheduler name to cluster-capacity
if versionedPod.Spec.SchedulerName == "" {
versionedPod.Spec.SchedulerName = s.DefaultScheduler.SchedulerName
}

// hardcoded from kube api defaults and validation
// TODO: rewrite when object validation gets more available for non kubectl approaches in kube
if versionedPod.Spec.DNSPolicy == "" {
Expand All @@ -166,7 +203,7 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error {

// TODO: client side validation seems like a long term problem for this command.
internalPod := &api.Pod{}
if err := v1.Convert_v1_Pod_To_api_Pod(versionedPod, internalPod, nil); err != nil {
if err := apiv1.Convert_v1_Pod_To_core_Pod(versionedPod, internalPod, nil); err != nil {
return fmt.Errorf("unable to convert to internal version: %#v", err)

}
Expand All @@ -184,7 +221,7 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error {

func (s *ClusterCapacityConfig) SetDefaultScheduler() error {
var err error
s.DefaultScheduler, err = parseSchedulerConfig(s.Options.DefaultSchedulerConfigFile)
s.DefaultScheduler, err = s.parseSchedulerConfig(s.Options.DefaultSchedulerConfigFile)
if err != nil {
return fmt.Errorf("Error in opening default scheduler config file: %v", err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import (
"github.com/renstrom/dedent"
"github.com/spf13/cobra"

clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
_ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider"

"github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options"
Expand Down Expand Up @@ -81,18 +81,21 @@ func Validate(opt *options.ClusterCapacityOptions) error {

func Run(opt *options.ClusterCapacityOptions) error {
conf := options.NewClusterCapacityConfig(opt)
err := conf.ParseAPISpec()
if err != nil {
return fmt.Errorf("Failed to parse pod spec file: %v ", err)
}

err = conf.SetDefaultScheduler()
err := conf.SetDefaultScheduler()
if err != nil {
return fmt.Errorf("Failed to set default scheduler config: %v ", err)
}
err = conf.ParseAdditionalSchedulerConfigs()

// TODO (avesh): Enable when support for multiple schedulers is implemented.
/*err = conf.ParseAdditionalSchedulerConfigs()
if err != nil {
return fmt.Errorf("Failed to parse config file: %v ", err)
}*/

err = conf.ParseAPISpec()
if err != nil {
return fmt.Errorf("Failed to parse pod spec file: %v ", err)
}

var cfg *restclient.Config
Expand Down Expand Up @@ -136,11 +139,12 @@ func runSimulator(s *options.ClusterCapacityConfig, syncWithClient bool) (*frame
return nil, err
}

for i := 0; i < len(s.Schedulers); i++ {
// TODO (avesh): Enable when support for multiple schedulers is implemented.
/*for i := 0; i < len(s.Schedulers); i++ {
if err = cc.AddScheduler(s.Schedulers[i]); err != nil {
return nil, err
}
}
}*/

if syncWithClient {
err = cc.SyncWithClient(s.KubeClient)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import (

"github.com/spf13/cobra"

clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
_ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider"

"github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/options"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Kubernetes Community Code of Conduct

Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
Loading

0 comments on commit 408fb77

Please sign in to comment.