-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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-2149: bump clusterid to beta #3652
KEP-2149: bump clusterid to beta #3652
Conversation
Skipping CI for Draft Pull Request. |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
5d8b2d4
to
34de2cd
Compare
a4c8918
to
f8d7cac
Compare
5f265f7
to
3719ab2
Compare
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: lauralorenz 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 |
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
1b224b5
to
910597a
Compare
Signed-off-by: lauralorenz <lauralorenz@google.com>
Signed-off-by: lauralorenz <lauralorenz@google.com>
/label api-review Requesting API review as the well-known properties use the Since then I direct your attention to the following API related changes:
|
/lgtm |
* Define any characteristics of the system that tracks cluster ids within a cluster (i.e. a cluster registry) | ||
* Solve any problems without specific, tangible use cases (though we will leave room for extension). | ||
* Define any characteristics of the system that tracks cluster ids within a | ||
cluster (i.e. a cluster registry) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/cluster/clusterset ?
@@ -253,14 +274,28 @@ nitty-gritty. | |||
--> | |||
|
|||
### Overview |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need a bit of setup. Something like:
"""
This proposal presupposes that some abstract control plane exists which describes the concept of a ClusterSet. The details of that control plane are beyond this specification, and are intentionally very loosely defined, such that implementations may make their own design decisions. The only assumptions made by this specification are that:
- Users must be able to add clusters to the clusterset
- Users may be able to remove clusters from the clusterset
This abstract control plane may exist in one or more of the constituent clusters or may exist outside of them, or may be some sort of hybrid, with aspects of both.
This abstract control plane may use the constituent clusters as the primary source of truth for information on which it depends, or it may have its own notion of truth, or may be some sort of hybrid, with aspects of both.
"""
@@ -253,14 +274,28 @@ nitty-gritty. | |||
--> | |||
|
|||
### Overview | |||
Each cluster in a ClusterSet will be assigned a unique identifier, that lives at least as long as that cluster is a member of the given ClusterSet, and is immutable for that same lifetime. This identifier will be stored in a new cluster-scoped `ClusterProperty` CR with the well known name `cluster.clusterset.k8s.io` that may be referenced by workloads within the cluster. The identifier must either: | |||
Each cluster in a ClusterSet will be assigned a unique identifier, that lives at |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/will/must/ ? I'm trying to clear up the concept of who enacts what ideas and what happens if this spec is violated. "will" suggests we own the act of assigning. "must" suggests this is the law, but the implementation gets to implement...
"Each cluster in a ClusterSet must be assigned a unique identifier" implies "...or else some capabilities which depend on that identifier will not function".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this must be must :)
@@ -253,14 +274,28 @@ nitty-gritty. | |||
--> | |||
|
|||
### Overview | |||
Each cluster in a ClusterSet will be assigned a unique identifier, that lives at least as long as that cluster is a member of the given ClusterSet, and is immutable for that same lifetime. This identifier will be stored in a new cluster-scoped `ClusterProperty` CR with the well known name `cluster.clusterset.k8s.io` that may be referenced by workloads within the cluster. The identifier must either: | |||
Each cluster in a ClusterSet will be assigned a unique identifier, that lives at | |||
least as long as that cluster is a member of the given ClusterSet, and is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/is immutable/must not be changed/
While a member of a ClusterSet, a cluster will also have an additional `clusterset.k8s.io ClusterProperty` which describes its current membership. This property must be present exactly as long as the cluster's membership in a ClusterSet lasts, and removed when the cluster is no longer a member. | ||
|
||
More detail and examples of the uniqueness, lifespan, immutability, and content requirements for both the `cluster.clusterset.k8s.io ClusterProperty` and `clusterset.k8s.io ClusterProperty` are described further below. The goal of these requirements are to provide to the MCS API a cluster id of viable usefulness to address known user stories without being too restrictive or prescriptive. | ||
- or be composed of two valid [RFC-1123](https://tools.ietf.org/html/rfc1123) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Contentious: Because we are no interacting with external control planes - is this sufficiently flexible? If it turned out not to be, could we extend it? DNS is more flexible than we give it credit for - underscores are not so uncommon as I once thought, for example!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I propose we start with the current proposal, then add flexibility in beta if needed as it would not be a backward incompatible change. It seems like the next logical step would be "any valid domain name" and I don't think we're ready or see sufficient need to impose that yet
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about we change it from "one or two labels" to something like:
"""
The identifier must be a valid RFC-1123 DNS subdomain and should be less than 128 characters in total. This identifier might be used to compose larger DNS names (e.g. in the case of multi-cluster services), so care should be take to ensure that the final names fit into the limit of 253 characters.
"""
|
||
|
||
##### Contents | ||
|
||
* The identifier **must** associate the cluster with a ClusterSet. | ||
* The identifier **may** be either unique or shared by members of a ClusterSet. | ||
* The identifier **may** be either unique or shared by members of a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this more simply stated as "The identifier may be any value" ? Do we include non-ASCII? We don't have a lot of concrete use for this yet, so it's hard to know if we are cutting off interesting exploration
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would also add * The identifier should be the same across members of a ClusterSet" ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was introduced to highlight two patterns:
- where the identifier is the same for every member and directly identifies the clusterset
- where the identifier is actually a reference to a relationship - i.e. points to a cluster's "membership"
This is slightly different than just "any value" as we steer away from a mixed case. May instead of should/must because we have no control and as you say, no concrete use. But it seems like making excess room for exploration here may also be making room for pain
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why would clusterset.k8s.io
indicate the relationship? I may have missed something?
|
||
|
||
##### Consumers | ||
|
||
* **Must** be able to rely on the identifier existing, unmodified for the entire duration of its membership in a ClusterSet. | ||
* **Should** watch the clusterset property to detect the span of a cluster’s membership in a ClusterSet. | ||
* **Must** be able to rely on the identifier existing, unmodified for the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May rely on
following suffixes are reserved for Kubernetes and related projects: `.k8s.io`, | ||
`.kubernetes.io`. For example, an implementation may utilize the `Kind` | ||
`ClusterProperty` to store objects with the name | ||
`fingerprint.coolmcsimplementation.com` but not `fingerprint.k8s.io` and not |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/coolmcsimplementation/example/
`.kubernetes.io`. For example, an implementation may utilize the `Kind` | ||
`ClusterProperty` to store objects with the name | ||
`fingerprint.coolmcsimplementation.com` but not `fingerprint.k8s.io` and not | ||
simply `fingerprint`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We usually reserve un-spaced names for cluster operators - any reason not to do so here?
2. When a cluster that does not have a `cluster.clusterset.k8s.io ClusterProperty` tries to join a ClusterSet. | ||
|
||
In situations like these, the admission controller will need to fail to add the invalid cluster to the ClusterSet by refusing to set its `clusterset.k8s.io ClusterProperty`, and surface an error that is actionable to make the property valid. | ||
A cluster in a ClusterSet is expected to be authoritatively associated with that |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I would soften all of this to make less assumptions. A self-assembling (e.g. peer-to-peer discovered) clusterset should be a valid implementation
Why did this merge? It's not labelled approved? |
It didn't, this one did: #4156 Since it's a superset of commits I guess github considers this merged as well? Interesting UX |
Oh. Weird.
…On Fri, Sep 1, 2023 at 4:00 PM Jeremy Olmsted-Thompson < ***@***.***> wrote:
Why did this merge? It's not labelled approved?
It didn't, this one did: #4156
<#4156>
Since it's a superset of commits I guess github considers this merged as
well? Interesting UX
—
Reply to this email directly, view it on GitHub
<#3652 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABKWAVEKJIEFTWBYBEK7BBLXYJSKFANCNFSM6AAAAAAR3V6MRU>
.
You are receiving this because you were assigned.Message ID:
***@***.***>
|
I'm cleaning up closed |
Alpha --> Beta graduation requirements:
id.k8s.io ClusterProperty
be strictly a valid DNS label, or is allowed to be a subdomain.id.k8s.io
to be specific for ClusterSet usages, limiting the blast radius of this decision. Notes from CAPI and discussion with SIG-MC are here in terms of determining whether there was a compelling use case from the field of cloud providers' cluster naming conventions. As of 3/7 SIG-MC meeting we intend to expand this to allowN
dots (considering starting with N=1) to support implementation-specific disambiguation for pod DNS (the concrete use case being a region due to regional cluster registries). Language is updated in KEP-1645, KEP-2149: Location-disambiguated addressing of Headless service pods #3918.