From 844786fda111fa68b060661e351f593d25476bb1 Mon Sep 17 00:00:00 2001 From: "Da K. Ma" Date: Mon, 29 Apr 2019 20:53:36 +0800 Subject: [PATCH] Updated kube-batch to vk-kube-batch. Signed-off-by: Da K. Ma --- Gopkg.lock | 7 ++++--- Gopkg.toml | 2 +- .../pkg/apis/scheduling/v1alpha1/types.go | 9 +++++++++ .../scheduling/v1alpha1/zz_generated.deepcopy.go | 15 ++++++++++++++- .../pkg/scheduler/actions/allocate/allocate.go | 5 +++++ .../pkg/scheduler/actions/backfill/backfill.go | 5 +++++ .../kube-batch/pkg/scheduler/actions/factory.go | 2 ++ .../pkg/scheduler/actions/preempt/preempt.go | 5 +++++ .../pkg/scheduler/actions/reclaim/reclaim.go | 5 +++++ .../kube-batch/pkg/scheduler/api/resource_info.go | 13 +++++++++++++ .../kube-batch/pkg/scheduler/framework/session.go | 2 +- 11 files changed, 64 insertions(+), 6 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index d4fe1488e4..f316cd5b3d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -203,8 +203,8 @@ version = "1.1.4" [[projects]] - branch = "volcano-master" - digest = "1:52294fbd6648d468a03845d1d908a8d6e5a86d5cd9fe7f32236d8275721a92df" + branch = "master" + digest = "1:373e831b25d35980629d8042cf8941f1455cee70e846e2c91064ecb074ce3826" name = "github.com/kubernetes-sigs/kube-batch" packages = [ "cmd/kube-batch/app", @@ -223,6 +223,7 @@ "pkg/scheduler/actions", "pkg/scheduler/actions/allocate", "pkg/scheduler/actions/backfill", + "pkg/scheduler/actions/enqueue", "pkg/scheduler/actions/preempt", "pkg/scheduler/actions/reclaim", "pkg/scheduler/api", @@ -244,7 +245,7 @@ "pkg/version", ] pruneopts = "UT" - revision = "5e9977d68a13938fbb6d7dda564da0dca1b1c98c" + revision = "2e229b9ef61ca616735b667beb77a01fac2bb5f1" source = "https://github.com/volcano-sh/kube-batch" [[projects]] diff --git a/Gopkg.toml b/Gopkg.toml index 9b313dfac1..0803cc797b 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -38,7 +38,7 @@ required = [ [[constraint]] name = "github.com/kubernetes-sigs/kube-batch" - branch = "volcano-master" + branch = "master" source = "https://github.com/volcano-sh/kube-batch" [[constraint]] diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/types.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/types.go index e4d0004c08..6670498812 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/types.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/types.go @@ -36,6 +36,10 @@ const ( // PodGroupUnknown means part of `spec.minMember` pods are running but the other part can not // be scheduled, e.g. not enough resource; scheduler will wait for related controller to recover it. PodGroupUnknown PodGroupPhase = "Unknown" + + // PodGroupInqueue means controllers can start to create pods, + // is a new state between PodGroupPending and PodGroupRunning + PodGroupInqueue PodGroupPhase = "Inqueue" ) type PodGroupConditionType string @@ -123,6 +127,11 @@ type PodGroupSpec struct { // default. // +optional PriorityClassName string `json:"priorityClassName,omitempty" protobuf:"bytes,3,opt,name=priorityClassName"` + + // MinResources defines the minimal resource of members/tasks to run the pod group; + // if there's not enough resources to start all tasks, the scheduler + // will not start anyone. + MinResources *v1.ResourceList `json:"minResources,omitempty" protobuf:"bytes,4,opt,name=minResources"` } // PodGroupStatus represents the current state of a pod group. diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/zz_generated.deepcopy.go index 3bc3811730..d0b60967f9 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1/zz_generated.deepcopy.go @@ -21,6 +21,8 @@ limitations under the License. package v1alpha1 import ( + v1 "k8s.io/api/core/v1" + resource "k8s.io/apimachinery/pkg/api/resource" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -29,7 +31,7 @@ func (in *PodGroup) DeepCopyInto(out *PodGroup) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec + in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) return } @@ -105,6 +107,17 @@ func (in *PodGroupList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodGroupSpec) DeepCopyInto(out *PodGroupSpec) { *out = *in + if in.MinResources != nil { + in, out := &in.MinResources, &out.MinResources + *out = new(v1.ResourceList) + if **in != nil { + in, out := *in, *out + *out = make(map[v1.ResourceName]resource.Quantity, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + } return } diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/allocate/allocate.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/allocate/allocate.go index df28d6aaca..973db99cc5 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/allocate/allocate.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/allocate/allocate.go @@ -21,6 +21,7 @@ import ( "github.com/golang/glog" + "github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/util" @@ -48,6 +49,10 @@ func (alloc *allocateAction) Execute(ssn *framework.Session) { jobsMap := map[api.QueueID]*util.PriorityQueue{} for _, job := range ssn.Jobs { + if job.PodGroup.Status.Phase == v1alpha1.PodGroupPending { + continue + } + if queue, found := ssn.Queues[job.Queue]; found { queues.Push(queue) } else { diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/backfill/backfill.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/backfill/backfill.go index 920270351d..618c8cedaf 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/backfill/backfill.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/backfill/backfill.go @@ -19,6 +19,7 @@ package backfill import ( "github.com/golang/glog" + "github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework" ) @@ -43,6 +44,10 @@ func (alloc *backfillAction) Execute(ssn *framework.Session) { // TODO (k82cn): When backfill, it's also need to balance between Queues. for _, job := range ssn.Jobs { + if job.PodGroup.Status.Phase == v1alpha1.PodGroupPending { + continue + } + for _, task := range job.TaskStatusIndex[api.Pending] { if task.InitResreq.IsEmpty() { // As task did not request resources, so it only need to meet predicates. diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/factory.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/factory.go index 827533b226..9f5cd6ad79 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/factory.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/factory.go @@ -21,6 +21,7 @@ import ( "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/allocate" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/backfill" + "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/enqueue" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/preempt" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/reclaim" ) @@ -30,4 +31,5 @@ func init() { framework.RegisterAction(allocate.New()) framework.RegisterAction(backfill.New()) framework.RegisterAction(preempt.New()) + framework.RegisterAction(enqueue.New()) } diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/preempt/preempt.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/preempt/preempt.go index f76571dcd4..435696f228 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/preempt/preempt.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/preempt/preempt.go @@ -21,6 +21,7 @@ import ( "github.com/golang/glog" + "github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/metrics" @@ -52,6 +53,10 @@ func (alloc *preemptAction) Execute(ssn *framework.Session) { queues := map[api.QueueID]*api.QueueInfo{} for _, job := range ssn.Jobs { + if job.PodGroup.Status.Phase == v1alpha1.PodGroupPending { + continue + } + if queue, found := ssn.Queues[job.Queue]; !found { continue } else if _, existed := queues[queue.UID]; !existed { diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/reclaim/reclaim.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/reclaim/reclaim.go index 83ae3a1af8..520e8264a8 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/reclaim/reclaim.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/actions/reclaim/reclaim.go @@ -19,6 +19,7 @@ package reclaim import ( "github.com/golang/glog" + "github.com/kubernetes-sigs/kube-batch/pkg/apis/scheduling/v1alpha1" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework" "github.com/kubernetes-sigs/kube-batch/pkg/scheduler/util" @@ -53,6 +54,10 @@ func (alloc *reclaimAction) Execute(ssn *framework.Session) { var underRequest []*api.JobInfo for _, job := range ssn.Jobs { + if job.PodGroup.Status.Phase == v1alpha1.PodGroupPending { + continue + } + if queue, found := ssn.Queues[job.Queue]; !found { glog.Errorf("Failed to find Queue <%s> for Job <%s/%s>", job.Queue, job.Namespace, job.Name) diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api/resource_info.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api/resource_info.go index 6c3caab742..582d955576 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api/resource_info.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/api/resource_info.go @@ -20,6 +20,8 @@ import ( "fmt" "math" + "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/api/core/v1" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" ) @@ -324,3 +326,14 @@ func (r *Resource) SetScalar(name v1.ResourceName, quantity float64) { } r.ScalarResources[name] = quantity } + +func (r *Resource) Convert2K8sResource() *v1.ResourceList { + list := v1.ResourceList{ + v1.ResourceCPU: *resource.NewMilliQuantity(int64(r.MilliCPU), resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(int64(r.Memory), resource.BinarySI), + } + for name, value := range r.ScalarResources { + list[name] = *resource.NewQuantity(int64(value), resource.BinarySI) + } + return &list +} diff --git a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework/session.go b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework/session.go index c1b4d049b3..e6ac75ddea 100644 --- a/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework/session.go +++ b/vendor/github.com/kubernetes-sigs/kube-batch/pkg/scheduler/framework/session.go @@ -171,7 +171,7 @@ func jobStatus(ssn *Session, jobInfo *api.JobInfo) v1alpha1.PodGroupStatus { // If there're enough allocated resource, it's running if int32(allocated) > jobInfo.PodGroup.Spec.MinMember { status.Phase = v1alpha1.PodGroupRunning - } else { + } else if jobInfo.PodGroup.Status.Phase != v1alpha1.PodGroupInqueue { status.Phase = v1alpha1.PodGroupPending } }