Skip to content

Commit

Permalink
Merge pull request #108 from gofed/bump-to-k8s-1.15.3
Browse files Browse the repository at this point in the history
Bump to k8s 1.15.3
  • Loading branch information
k8s-ci-robot authored Dec 9, 2019
2 parents dde8cd1 + 7234bcc commit 65ea251
Show file tree
Hide file tree
Showing 22,732 changed files with 5,493,087 additions and 222,376 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
715 changes: 271 additions & 444 deletions Gopkg.lock

Large diffs are not rendered by default.

52 changes: 27 additions & 25 deletions Gopkg.toml
Original file line number Diff line number Diff line change
@@ -1,42 +1,44 @@
[prune]
go-tests = true
unused-packages = true

[[constraint]]
[[override]]
name = "k8s.io/api"
version = "kubernetes-1.13.5"
version = "kubernetes-1.15.3"

[[constraint]]
name = "k8s.io/apimachinery"
version = "kubernetes-1.13.5"

[[constraint]]
[[override]]
name = "k8s.io/apiserver"
version = "kubernetes-1.13.5"
version = "kubernetes-1.15.3"

[[override]]
name = "k8s.io/apiextensions-apiserver"
version = "kubernetes-1.13.5"
name = "k8s.io/apimachinery"
version = "kubernetes-1.15.3"

[[override]]
name = "k8s.io/client-go"
version = "kubernetes-1.15.3"

[[override]]
name = "k8s.io/kube-scheduler"
version = "kubernetes-1.13.5"
version = "kubernetes-1.15.3"

[[constraint]]
name = "k8s.io/kubernetes"
# version = "v1.15.3"
revision = "2d3c76f9091b6bec110a5e63777c332469e0cba2"

[[override]]
version = "v0.9.0"
name = "github.com/prometheus/client_golang"
version = "v0.9.2"

[[override]]
name = "sigs.k8s.io/structured-merge-diff"
revision = "e85c7b244fd2cc57bb829d73a061f93a441e63ce"

[[override]]
revision = "c59034cc13d587f5ef4e85ca0ade0c1866ae8e1d"
name = "k8s.io/kube-openapi"
revision = "b3a7cee44a305be0a69e1b9ac03018307287e1b0"

[[override]]
name = "github.com/coreos/etcd"
revision = "v3.3.13"

[[constraint]]
name = "k8s.io/client-go"
version = "kubernetes-1.13.5"

[[constraint]]
name = "k8s.io/kubernetes"
source = "[email protected]:ringtail/kubernetes.git"
branch = "release-1.13-cache"
[[override]]
name = "k8s.io/apiextensions-apiserver"
revision = "kubernetes-1.15.3"
28 changes: 2 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ The json or yaml output is not versioned and is not guaranteed to be stable acro
## Running Cluster Capacity as a Job Inside of a Pod

Running the cluster capacity tool as a job inside of a pod has the advantage of
being able to be run multiple times without needing user intervention.
being able to be run multiple times without needing user intervention.

Follow these example steps to run Cluster Capacity as a job:

Expand All @@ -126,32 +126,8 @@ $ docker build -t cluster-capacity-image .

### 2. Setup an authorized user with the necessary permissions

#### A. Create a role:
```
$ cat << EOF| kubectl create -f -
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: cluster-capacity-role
rules:
- apiGroups: [""]
resources: ["pods", "nodes", "persistentvolumeclaims", "persistentvolumes", "services"]
verbs: ["get", "watch", "list"]
EOF
```

#### B. Create the service account which will be used to run the job:

```
$ kubectl create sa cluster-capacity-sa
```

#### C. Add the role to the service account:

```
$ kubectl create clusterrolebinding cluster-capacity-role \
--clusterrole=cluster-capacity-role \
--serviceaccount=default:cluster-capacity-sa
$ kubectl apply -f config/rbac.yaml
```

### 3. Define and create the pod specification (pod.yaml):
Expand Down
89 changes: 6 additions & 83 deletions cmd/cluster-capacity/app/options/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,14 @@ import (
api "k8s.io/kubernetes/pkg/apis/core"
apiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
"k8s.io/kubernetes/pkg/apis/core/validation"
schedConfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config"
schedOptions "k8s.io/kubernetes/cmd/kube-scheduler/app/options"
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"

"github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store"
"github.com/kubernetes-incubator/cluster-capacity/pkg/utils"
schedconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config"
)

type ClusterCapacityConfig struct {
Pod *v1.Pod
KubeClient clientset.Interface
Options *ClusterCapacityOptions
DefaultSchedulerConfig *schedConfig.CompletedConfig
ResourceStore store.ResourceStore
Pod *v1.Pod
KubeClient clientset.Interface
Options *ClusterCapacityOptions
}

type ClusterCapacityOptions struct {
Expand Down Expand Up @@ -81,68 +75,7 @@ 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 (s *ClusterCapacityConfig) parseSchedulerConfig(path string) (*schedConfig.CompletedConfig, error) {
soptions, err := schedOptions.NewOptions()
if err != nil {
return nil, err
}

// In a POD, master is passed as empty string.
var master string
_, present := os.LookupEnv("CC_INCLUSTER")
if !present {
master, err = utils.GetMasterFromKubeConfig(s.Options.Kubeconfig)
if err != nil {
return nil, err
}
}

soptions.ConfigFile = path
soptions.Master = master
soptions.ComponentConfig.SchedulerName = "cluster-capacity"
soptions.ComponentConfig.LeaderElection.LeaderElect = false
soptions.ComponentConfig.ClientConnection.Kubeconfig = s.Options.Kubeconfig
soptions.CombinedInsecureServing = nil
soptions.SecureServing = nil
conf, err := soptions.Config()
if err != nil {
return nil, err
}

completedConf := conf.Complete()

if len(path) > 0 {
filename, _ := filepath.Abs(path)
config, err := os.Open(filename)
if err != nil {
return nil, fmt.Errorf("Failed to open config file: %v", err)
}

decoder := yaml.NewYAMLOrJSONDecoder(config, 4096)
decoder.Decode(completedConf)
}

// TODO(avesh): need to check if this works correctly
algorithmprovider.ApplyFeatureGates()
return &completedConf, nil
}

// 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 := s.parseSchedulerConfig(config)
if err != nil {
return err
}
s.Schedulers = append(s.Schedulers, newScheduler)
}
return nil
}*/

func (s *ClusterCapacityConfig) ParseAPISpec() error {
func (s *ClusterCapacityConfig) ParseAPISpec(cc *schedconfig.CompletedConfig) error {
var spec io.Reader
var err error
if strings.HasPrefix(s.Options.PodSpecFile, "http://") || strings.HasPrefix(s.Options.PodSpecFile, "https://") {
Expand Down Expand Up @@ -176,7 +109,7 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error {

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

// hardcoded from kube api defaults and validation
Expand Down Expand Up @@ -211,13 +144,3 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error {
s.Pod = versionedPod
return nil
}

func (s *ClusterCapacityConfig) SetDefaultScheduler() error {
var err error
s.DefaultSchedulerConfig, err = s.parseSchedulerConfig(s.Options.DefaultSchedulerConfigFile)
if err != nil {
return fmt.Errorf("Error in opening default scheduler config file: %v", err)
}

return nil
}
39 changes: 16 additions & 23 deletions cmd/cluster-capacity/app/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ import (
"fmt"
"os"

"github.com/renstrom/dedent"
"github.com/lithammer/dedent"
"github.com/spf13/cobra"

clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
schedconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config"
schedoptions "k8s.io/kubernetes/cmd/kube-scheduler/app/options"
_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider"

"github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options"
Expand Down Expand Up @@ -82,18 +84,20 @@ func Validate(opt *options.ClusterCapacityOptions) error {
func Run(opt *options.ClusterCapacityOptions) error {
conf := options.NewClusterCapacityConfig(opt)

err := conf.SetDefaultScheduler()
opts, err := schedoptions.NewOptions()
if err != nil {
return fmt.Errorf("Failed to create default scheduler server: %v ", err)
return fmt.Errorf("unable to create scheduler options: %v", err)
}

// TODO (avesh): Enable when support for multiple schedulers is implemented.
/*err = conf.ParseAdditionalSchedulerConfigs()
// inject scheduler config file
opts.ConfigFile = conf.Options.DefaultSchedulerConfigFile

cc, err := framework.InitKubeSchedulerConfiguration(opts)
if err != nil {
return fmt.Errorf("Failed to parse config file: %v ", err)
}*/
return fmt.Errorf("failed to init kube scheduler configuration: %v ", err)
}

err = conf.ParseAPISpec()
err = conf.ParseAPISpec(cc)
if err != nil {
return fmt.Errorf("Failed to parse pod spec file: %v ", err)
}
Expand Down Expand Up @@ -123,7 +127,7 @@ func Run(opt *options.ClusterCapacityOptions) error {
return err
}

report, err := runSimulator(conf, true)
report, err := runSimulator(conf, cc)
if err != nil {
return err
}
Expand All @@ -133,24 +137,13 @@ func Run(opt *options.ClusterCapacityOptions) error {
return nil
}

func runSimulator(s *options.ClusterCapacityConfig, syncWithClient bool) (*framework.ClusterCapacityReview, error) {
cc, err := framework.New(s.DefaultSchedulerConfig, s.Pod, s.Options.MaxLimit)
func runSimulator(s *options.ClusterCapacityConfig, kubeSchedulerConfig *schedconfig.CompletedConfig) (*framework.ClusterCapacityReview, error) {
cc, err := framework.New(kubeSchedulerConfig, s.Pod, s.Options.MaxLimit)
if err != nil {
return nil, err
}

// 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)
} else {
err = cc.SyncWithStore(s.ResourceStore)
}
err = cc.SyncWithClient(s.KubeClient)
if err != nil {
return nil, err
}
Expand Down
37 changes: 37 additions & 0 deletions config/rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-capacity-role
rules:
- apiGroups: [""]
resources: ["pods", "nodes", "persistentvolumeclaims", "persistentvolumes", "services", "replicationcontrollers"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
resources: ["replicasets", "statefulsets"]
verbs: ["get", "watch", "list"]
- apiGroups: ["policy"]
resources: ["poddisruptionbudgets"]
verbs: ["get", "watch", "list"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "watch", "list"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: cluster-capacity-sa
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-capacity-rolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-capacity-role
subjects:
- kind: ServiceAccount
name: cluster-capacity-sa
namespace: default
Loading

0 comments on commit 65ea251

Please sign in to comment.