Skip to content

Commit 40c0fee

Browse files
authored
Merge pull request #652 from Huang-Wei/coscheduling-migrate-controller-runtime
refactor coscheduling to use controller-runtime client
2 parents 5eb736d + c0e0cbf commit 40c0fee

File tree

8 files changed

+794
-489
lines changed

8 files changed

+794
-489
lines changed

pkg/coscheduling/core/core.go

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,9 @@ import (
3232
listerv1 "k8s.io/client-go/listers/core/v1"
3333
"k8s.io/klog/v2"
3434
"k8s.io/kubernetes/pkg/scheduler/framework"
35+
"sigs.k8s.io/controller-runtime/pkg/client"
3536

3637
"sigs.k8s.io/scheduler-plugins/apis/scheduling/v1alpha1"
37-
pgclientset "sigs.k8s.io/scheduler-plugins/pkg/generated/clientset/versioned"
38-
pginformer "sigs.k8s.io/scheduler-plugins/pkg/generated/informers/externalversions/scheduling/v1alpha1"
39-
pglister "sigs.k8s.io/scheduler-plugins/pkg/generated/listers/scheduling/v1alpha1"
4038
"sigs.k8s.io/scheduler-plugins/pkg/util"
4139
)
4240

@@ -56,7 +54,7 @@ const (
5654
type Manager interface {
5755
PreFilter(context.Context, *corev1.Pod) error
5856
Permit(context.Context, *corev1.Pod) Status
59-
GetPodGroup(*corev1.Pod) (string, *v1alpha1.PodGroup)
57+
GetPodGroup(context.Context, *corev1.Pod) (string, *v1alpha1.PodGroup)
6058
GetCreationTimestamp(*corev1.Pod, time.Time) time.Time
6159
DeletePermittedPodGroup(string)
6260
CalculateAssignedPods(string, string) int
@@ -66,8 +64,8 @@ type Manager interface {
6664

6765
// PodGroupManager defines the scheduling operation called
6866
type PodGroupManager struct {
69-
// pgClient is a podGroup client
70-
pgClient pgclientset.Interface
67+
// client is a generic controller-runtime client to manipulate both core resources and PodGroups.
68+
client client.Client
7169
// snapshotSharedLister is pod shared list
7270
snapshotSharedLister framework.SharedLister
7371
// scheduleTimeout is the default timeout for podgroup scheduling.
@@ -77,21 +75,17 @@ type PodGroupManager struct {
7775
permittedPG *gochache.Cache
7876
// backedOffPG stores the podgorup name which failed scheudling recently.
7977
backedOffPG *gochache.Cache
80-
// pgLister is podgroup lister
81-
pgLister pglister.PodGroupLister
8278
// podLister is pod lister
8379
podLister listerv1.PodLister
8480
sync.RWMutex
8581
}
8682

8783
// NewPodGroupManager creates a new operation object.
88-
func NewPodGroupManager(pgClient pgclientset.Interface, snapshotSharedLister framework.SharedLister, scheduleTimeout *time.Duration,
89-
pgInformer pginformer.PodGroupInformer, podInformer informerv1.PodInformer) *PodGroupManager {
84+
func NewPodGroupManager(client client.Client, snapshotSharedLister framework.SharedLister, scheduleTimeout *time.Duration, podInformer informerv1.PodInformer) *PodGroupManager {
9085
pgMgr := &PodGroupManager{
91-
pgClient: pgClient,
86+
client: client,
9287
snapshotSharedLister: snapshotSharedLister,
9388
scheduleTimeout: scheduleTimeout,
94-
pgLister: pgInformer.Lister(),
9589
podLister: podInformer.Lister(),
9690
permittedPG: gochache.New(3*time.Second, 3*time.Second),
9791
backedOffPG: gochache.New(10*time.Second, 10*time.Second),
@@ -149,7 +143,7 @@ func (pgMgr *PodGroupManager) ActivateSiblings(pod *corev1.Pod, state *framework
149143
// that is required to be scheduled.
150144
func (pgMgr *PodGroupManager) PreFilter(ctx context.Context, pod *corev1.Pod) error {
151145
klog.V(5).InfoS("Pre-filter", "pod", klog.KObj(pod))
152-
pgFullName, pg := pgMgr.GetPodGroup(pod)
146+
pgFullName, pg := pgMgr.GetPodGroup(ctx, pod)
153147
if pg == nil {
154148
return nil
155149
}
@@ -200,7 +194,7 @@ func (pgMgr *PodGroupManager) PreFilter(ctx context.Context, pod *corev1.Pod) er
200194

201195
// Permit permits a pod to run, if the minMember match, it would send a signal to chan.
202196
func (pgMgr *PodGroupManager) Permit(ctx context.Context, pod *corev1.Pod) Status {
203-
pgFullName, pg := pgMgr.GetPodGroup(pod)
197+
pgFullName, pg := pgMgr.GetPodGroup(ctx, pod)
204198
if pgFullName == "" {
205199
return PodGroupNotSpecified
206200
}
@@ -224,8 +218,8 @@ func (pgMgr *PodGroupManager) GetCreationTimestamp(pod *corev1.Pod, ts time.Time
224218
if len(pgName) == 0 {
225219
return ts
226220
}
227-
pg, err := pgMgr.pgLister.PodGroups(pod.Namespace).Get(pgName)
228-
if err != nil {
221+
var pg v1alpha1.PodGroup
222+
if err := pgMgr.client.Get(context.TODO(), types.NamespacedName{Namespace: pod.Namespace, Name: pgName}, &pg); err != nil {
229223
return ts
230224
}
231225
return pg.CreationTimestamp.Time
@@ -236,27 +230,17 @@ func (pgMgr *PodGroupManager) DeletePermittedPodGroup(pgFullName string) {
236230
pgMgr.permittedPG.Delete(pgFullName)
237231
}
238232

239-
// PatchPodGroup patches a podGroup.
240-
func (pgMgr *PodGroupManager) PatchPodGroup(pgName string, namespace string, patch []byte) error {
241-
if len(patch) == 0 {
242-
return nil
243-
}
244-
_, err := pgMgr.pgClient.SchedulingV1alpha1().PodGroups(namespace).Patch(context.TODO(), pgName,
245-
types.MergePatchType, patch, metav1.PatchOptions{})
246-
return err
247-
}
248-
249233
// GetPodGroup returns the PodGroup that a Pod belongs to in cache.
250-
func (pgMgr *PodGroupManager) GetPodGroup(pod *corev1.Pod) (string, *v1alpha1.PodGroup) {
234+
func (pgMgr *PodGroupManager) GetPodGroup(ctx context.Context, pod *corev1.Pod) (string, *v1alpha1.PodGroup) {
251235
pgName := util.GetPodGroupLabel(pod)
252236
if len(pgName) == 0 {
253237
return "", nil
254238
}
255-
pg, err := pgMgr.pgLister.PodGroups(pod.Namespace).Get(pgName)
256-
if err != nil {
239+
var pg v1alpha1.PodGroup
240+
if err := pgMgr.client.Get(ctx, types.NamespacedName{Namespace: pod.Namespace, Name: pgName}, &pg); err != nil {
257241
return fmt.Sprintf("%v/%v", pod.Namespace, pgName), nil
258242
}
259-
return fmt.Sprintf("%v/%v", pod.Namespace, pgName), pg
243+
return fmt.Sprintf("%v/%v", pod.Namespace, pgName), &pg
260244
}
261245

262246
// CalculateAssignedPods returns the number of pods that has been assigned nodes: assumed or bound.

0 commit comments

Comments
 (0)