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

KEP 1645: add labels and annotations export #4922

Merged

Conversation

MrFreezeex
Copy link
Member

@MrFreezeex MrFreezeex commented Oct 16, 2024

  • One-line PR description: add labels and annotations export

@k8s-ci-robot
Copy link
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@k8s-ci-robot k8s-ci-robot added do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Oct 16, 2024
@k8s-ci-robot k8s-ci-robot added kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory sig/multicluster Categorizes an issue or PR as relevant to SIG Multicluster. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Oct 16, 2024
@MrFreezeex MrFreezeex force-pushed the KEP1645-sync-labels-annotations branch 2 times, most recently from 939b732 to 2ae4c68 Compare October 16, 2024 13:16
@MrFreezeex MrFreezeex marked this pull request as ready for review October 16, 2024 13:20
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Oct 16, 2024
@MrFreezeex MrFreezeex force-pushed the KEP1645-sync-labels-annotations branch 2 times, most recently from 6b7282b to a849f28 Compare October 16, 2024 13:27
@MrFreezeex MrFreezeex force-pushed the KEP1645-sync-labels-annotations branch from a849f28 to 4960c5b Compare October 16, 2024 14:46
@MrFreezeex MrFreezeex force-pushed the KEP1645-sync-labels-annotations branch 5 times, most recently from b33c1eb to 83d1af6 Compare October 18, 2024 11:10
Signed-off-by: Arthur Outhenin-Chalandre <arthur@cri.epita.fr>
@MrFreezeex MrFreezeex force-pushed the KEP1645-sync-labels-annotations branch from 83d1af6 to 271740f Compare November 12, 2024 09:59
@skitt
Copy link
Member

skitt commented Nov 28, 2024

/approve

@mikemorris, @JeremyOT, @lauralorenz could you take a look (after Thanksgiving week-end I imagine 😉)?

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Nov 28, 2024
@mikemorris
Copy link
Member

mikemorris commented Dec 10, 2024

Will prioritize reviewing this and kubernetes-sigs/mcs-api/pull/85 this week.

Copy link
Member

@mikemorris mikemorris left a comment

Choose a reason for hiding this comment

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

/approve

This feels good to me - it's both simpler and more flexible than the "copy/filter" strategy to start, and with the tweak I suggested from "annotations or labels must not be exported from the metadata" to "values specified in spec.exportedLabels or spec.exportedAnnotations MUST take precedence" I think we have future design space if we determine the alternative UX is needed in the future.

Comment on lines +517 to +518
supported by MCS-API implementations. If supported, annotations or labels must
not be exported from the `metadata` of the `Service` or `ServiceExport` resources.
Copy link
Member

@mikemorris mikemorris Dec 11, 2024

Choose a reason for hiding this comment

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

Suggested change
supported by MCS-API implementations. If supported, annotations or labels must
not be exported from the `metadata` of the `Service` or `ServiceExport` resources.
supported by MCS-API implementations. If supported, values specified in
`spec.exportedLabels` or `spec.exportedAnnotations` MUST take precedence over any
labels or annotations which may be synced or copied from the `metadata` of the
`Service` or `ServiceExport` resources.

I think this tweak would give us design space to implement a "copy filter" strategy either globally in implementation configuration or locally via additional fields on ServiceExport if we find a need to add that in the future but without adding additional complexity now.

Copy link
Member Author

Choose a reason for hiding this comment

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

I am not sure I agree with this because it is intentionally vague about what implementation should do (does precedence means merging or completely overriding?), if we find the need to change that behavior I would just edit those sentence rather than having something somewhat unclear to begin with

@@ -1013,6 +1029,13 @@ Session affinity affects a service as a whole for a given consumer. The derived
service's session affinity will be decided according to the conflict resolution
policy.

#### Labels and Annotations

If supported, exporting labels and annotations would affect a `Service` as a whole
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
If supported, exporting labels and annotations would affect a `Service` as a whole
If supported, exporting labels and annotations would affect a service as a whole

For consistency with the above sections which do not explicitly mention the Service resource - my reading is that a derived Service resource is an optional implementation detail which is one component of the "service as a whole".

Copy link
Member

Choose a reason for hiding this comment

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

I see this would revert @sftim's prior suggested change in #4922 (comment)

@@ -1229,7 +1252,7 @@ retain the flexibility of selectors.

### Export via annotation

`ServiceExport` as described has no spec and seems like it could just be
`ServiceExport` initially had no spec and seemed like it could just be
Copy link
Member

Choose a reason for hiding this comment

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

Out of scope for this change, but I think the original rationale here is actually outdated - the Service resource does have a status.conditions field now https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/#ServiceStatus

Copy link
Member Author

Choose a reason for hiding this comment

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

This is about ServiceExport spec so I would say it should still be right?

Copy link
Member

@mikemorris mikemorris Dec 11, 2024

Choose a reason for hiding this comment

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

This section is describing why a ServiceExport resource with no spec was originally proposed at all - the ServiceExport status was intended to fill a UX gap from Service lacking a status.conditions field to message if an annotation-based API on Service to indicate an intent to export would have been successful or conflicted. It's not directly applicable to the focus of this PR though, I may update the language for historical purposes in a separate PR.

Comment on lines +1294 to +1295
`ServiceExport` or `Service` resources, it may be more confusing for users as it
would be the only fields present in both resources. For instance, should an
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
`ServiceExport` or `Service` resources, it may be more confusing for users as it
would be the only fields present in both resources. For instance, should an
`ServiceExport` or `Service` resources, it may be more confusing for users.
For instance, should an

I didn't quite understand this, and think the point is clear without this phrase.

Comment on lines +1298 to +1301
and annotations in the spec of the `ServiceExport` resource, it may becomes more
straightforward that each resource have their own labels and annotations in their
metadata and that the exported labels and annotations are from the dedicated
fields in the `ServiceExport` spec.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
and annotations in the spec of the `ServiceExport` resource, it may becomes more
straightforward that each resource have their own labels and annotations in their
metadata and that the exported labels and annotations are from the dedicated
fields in the `ServiceExport` spec.
and annotations in the spec of the `ServiceExport` resource, we expect it will be
straightforward that while each resource has their own labels and annotations in their
metadata, the exported labels and annotations are from the dedicated fields in the
`ServiceExport` spec.

Minor phrasing nit.

Comment on lines +1305 to +1306
from the `Service` and `ServiceExport` metadata. More flexibility could also be
achieved with CEL expression on the `ServiceExport` at the cost of greater
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
from the `Service` and `ServiceExport` metadata. More flexibility could also be
achieved with CEL expression on the `ServiceExport` at the cost of greater
from the `Service` and `ServiceExport` metadata.
This implementation does not preclude the possibility of additionally adopting a
"copy/filter" strategy (either as global configuration for a particular implementation, or
granularly as additional `ServiceExport` fields) if the need arises. Such an strategy could
select specific label or annotation keys to sync from the `Service` by exact name, by
prefix, or further flexibility could be achieved with CEL expressions at the cost of
greater

Feel free to reject this suggestion - from the long thread above this felt like this possibility could be worth mentioning but perhaps the "exportedLabels and exportedAnnotations MUST take precedence" snippet I suggested adding above is a sufficent oblique reference without introducing confusion.

Copy link
Member Author

Choose a reason for hiding this comment

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

A bit similar to the previous thread I would recommend to keep the kep consistent for all implementations regarding this for now and if the need arises we should just update it IMO or make it more loose

@JeremyOT
Copy link
Member

This looks good to me, thank you!

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Dec 11, 2024
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: JeremyOT, mikemorris, MrFreezeex, skitt

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

The pull request process is described 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

@k8s-ci-robot k8s-ci-robot merged commit 3fb4087 into kubernetes:master Dec 11, 2024
4 checks passed
@k8s-ci-robot k8s-ci-robot added this to the v1.32 milestone Dec 11, 2024
// ServiceExportSpec describes an exported service and extra exported information
type ServiceExportSpec struct {
// +optional
ExportedLabels map[string]string `json:"exportedLabels"`
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
ExportedLabels map[string]string `json:"exportedLabels"`
ExportedLabels map[string]string `json:"exportedLabels,omitempty"`

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah yep nice catch! It's already like that in the associated PR for the CRD but the KEP should be amended indeed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory lgtm "Looks good to me", indicates that a PR is ready to be merged. sig/multicluster Categorizes an issue or PR as relevant to SIG Multicluster. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants