Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: cluster-level resource scheduling suspend and resume capabilities #5937

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

Monokaix
Copy link

What type of PR is this?
/kind api-change
/kind feature

What this PR does / why we need it:
Add rb suspension capability, background: #5690

Which issue(s) this PR fixes:
Fixes #5690

Special notes for your reviewer:
It extends the Suspension fileds and support rb susupend and resume, mostly like the previous issue #5217 and PRs implemented in it.

Does this PR introduce a user-facing change?:

Introduce cluster-level resource scheduling pause and resume capabilities

@karmada-bot karmada-bot added the kind/api-change Categorizes issue or PR as related to adding, removing, or otherwise changing an API label Dec 11, 2024
@karmada-bot karmada-bot added the kind/feature Categorizes issue or PR as related to a new feature. label Dec 11, 2024
@karmada-bot
Copy link
Collaborator

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign rainbowmango for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@karmada-bot
Copy link
Collaborator

Welcome @Monokaix! It looks like this is your first PR to karmada-io/karmada 🎉

@karmada-bot karmada-bot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Dec 11, 2024
@karmada-bot karmada-bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Dec 11, 2024
@karmada-bot karmada-bot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Dec 11, 2024
@Monokaix Monokaix force-pushed the rb-suspend branch 2 times, most recently from c4d5f12 to 08407d6 Compare December 12, 2024 06:56
@karmada-bot karmada-bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Dec 12, 2024
@Monokaix
Copy link
Author

@karmada-bot karmada-bot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Dec 12, 2024
@codecov-commenter
Copy link

codecov-commenter commented Dec 12, 2024

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

Attention: Patch coverage is 62.13592% with 39 lines in your changes missing coverage. Please review.

Project coverage is 48.27%. Comparing base (471d850) to head (553e498).
Report is 14 commits behind head on master.

Files with missing lines Patch % Lines
pkg/util/helper/patch.go 0.00% 18 Missing ⚠️
pkg/controllers/binding/common.go 77.19% 10 Missing and 3 partials ⚠️
pkg/controllers/binding/binding_controller.go 0.00% 3 Missing and 1 partial ⚠️
...ers/binding/cluster_resource_binding_controller.go 0.00% 3 Missing and 1 partial ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5937      +/-   ##
==========================================
+ Coverage   48.15%   48.27%   +0.11%     
==========================================
  Files         664      664              
  Lines       54803    54848      +45     
==========================================
+ Hits        26393    26477      +84     
+ Misses      26693    26652      -41     
- Partials     1717     1719       +2     
Flag Coverage Δ
unittests 48.27% <62.13%> (+0.11%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@karmada-bot karmada-bot removed the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Dec 12, 2024
@karmada-bot karmada-bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Dec 12, 2024
@karmada-bot karmada-bot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Dec 12, 2024
Copy link
Member

@RainbowMango RainbowMango left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we need to introduce a field to ResourceBinding?

Comment on lines 251 to 257

// Scheduling controls whether scheduling should be suspended.
// nil means not suspend, no default value, only accepts 'true'.
// Karmada scheduler will pause scheduling when value is true and resume scheduling when it's nil.
Scheduling *bool `json:"scheduling,omitempty"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain a little bit why PropagationPolicy needs this?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Suspension is common struct which indicates a suspension semantics, so based on the existing Suspension, I added scheduling suspension other than dispatcher. If you think it is inappropriate, I can add a new suspension structure just for scheduling, but this seems a bit redundant.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I didn't make it clear.
In my understanding, what you need is introducing scheduling suspension to ResourceBinding, my question is do you need to do that to PropgationPolicy as well?

PS:
I know both ResourceBinding and PropgationPolicy share the same typed structure (type Suspension struct). They may no longer be able to share the existing structure if we don't want to introduce scheduling suspension to PropgationPolicy.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah you are right, currenly I don't need the filed in PropgationPolicy, unless we just want to debug this feature easily.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

`Karmada scheduler``

Do we not need to limit it to karmada-scheduler? Whether all schedulers should care about this field.

Copy link
Author

@Monokaix Monokaix Dec 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@XiShanYongYe-Chang Yeah you are right, has modified: )

Comment on lines 389 to 390
// Suspended represents the condition that the ResourceBinding or ClusterResourceBinding is suspended to schedule.
Suspended string = "Suspended"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ambiguous as people can not tell what's suspended.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I know, the Rb resource is an abstract of scheduling, so maybe it's enough? And other conditions are Scheduled string = "Scheduled", which are also a semantic related to scheduling, or could you give some advice?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Directly use ScheduleSuspended?

pkg/controllers/binding/common.go Outdated Show resolved Hide resolved
pkg/events/events.go Outdated Show resolved Hide resolved
pkg/scheduler/scheduler.go Outdated Show resolved Hide resolved
@Monokaix Monokaix force-pushed the rb-suspend branch 6 times, most recently from 6e5f6ff to 060994b Compare December 23, 2024 08:08
Comment on lines 251 to 257

// Scheduling controls whether scheduling should be suspended.
// nil means not suspend, no default value, only accepts 'true'.
// scheduler will pause scheduling when value is true and resume scheduling when it's nil.
Scheduling *bool `json:"scheduling,omitempty"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not clear why we need flag field here, also the field "scheduling" looks confusing what does the admin really want to stop system from doing.
Whether the resourcebinding shall be created?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The resourcebinding will be created but scheduler will not scheduler, because we need some admission check such as quota check, multi-tenancy prioritization, etc before schduler process resourcebinding.
Will add more comments: )

pkg/apis/work/v1alpha2/binding_types.go Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/api-change Categorizes issue or PR as related to adding, removing, or otherwise changing an API kind/feature Categorizes issue or PR as related to a new feature. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants