Add bare metal fulfillment enhancement proposal - #7
Conversation
There was a problem hiding this comment.
Few tweaks;
One larger question, I discussed what we are doing with Rashid Khan, and Sean Cohen, and they wanted us to engage with them to see if they could enhance ESI to address challenges. So, not clear that we want to replace ESI after all, which is what this enhancement request keeps saying.
@mhrivnak @tzumainn @larsks should we create a seperate enhancement request to fix ESI that we can expose to them?
From the original design document:
ESI is primarily just a particular configuration of OpenStack services, and there are a number of reasons why we may eventually replace it:
- ESI is hard to deploy and configure. Red Hat’s OpenStack installers as of RHOS 17.1 have been difficult to configure and maintain, and ESI has added additional capabilities that complicate the deployment.
- Network management is provided by Neutron, leading to challenges when managing bare metal network interfaces (since we need to make API calls to two separate services and reconcile the information retrieved from both).
- Due to a variety of design decisions, OpenStack services are noticeably slow for this use, leading to a frustrating user experience.
In addition, I think we want to say that since ESI was designed for single VM at a time; it doesn't support parallel configuration; e.g., we would want to go to a switch and change all the required ports in one shot for switches that support.
| macaddrs: | ||
| - C0:FF:EE:5D:57:7C | ||
| - C0:FF:EE:96:AD:CA | ||
| # This configuration will only match interfaces with the `25gb` tag |
There was a problem hiding this comment.
Please don't use word tag here, confusing for people thinking about vlan tags
There was a problem hiding this comment.
Changed to property
|
|
||
| ## Summary | ||
|
|
||
| Bare metal fulfillment refers to the process through which a tenant acquires bare metal hosts and configures their networking. |
There was a problem hiding this comment.
not sure if we want to integrate higher level use cases:
- Some tenants will want to deploy alternative clusters, e.g., SLURM
- We want to support broad use by Red Hat that involves developers installing their own cluster software, own OSes...
There was a problem hiding this comment.
Added these use cases as examples of what this proposal is aiming to enable.
532a326 to
9ddfde2
Compare
|
Thanks for the feedback! I've updated the document to address the comments (with one question where I didn't quite get what you were saying).
I don't know that we actually keep saying this at all; perhaps the language can be softened, but most of the discussion around replacement is in the context of saying that we want to design bare metal fulfillment to allow easy replacement of the bare metal management implementation. Perhaps it would make sense to make that even more explicit?
I think it's worth having a discussion around this, but a formal request may be a little premature. |
| * As a tenant, I want to be able to view inventory details for my hosts. | ||
| * As a tenant, I want to be able to connect to the serial console of my hosts. | ||
| * As a tenant, I want to be able to perform basic power control (power on/power off/reset) of my hosts. | ||
| * As a tenant, I want to be able to attach hosts to existing networks. |
There was a problem hiding this comment.
Maybe too implementation specific, but the user also probably wants to customize the L1 part of the connection, specifically whether to aggregate ports and apply the vlans on the port channel, or on the individual ports.
There was a problem hiding this comment.
The intent is to create a separate networking service that can be used for both bare metal and VMs; I think this requirement would fall there.
9ddfde2 to
50c86f6
Compare
| * support for bare metal configuration during O-SAC cluster fulfillment | ||
|
|
||
| In this context, a “tenant” is a person with admin rights to the requested bare metal resources; at the MOC, this person would be | ||
| a ColdFront PI or manager. |
There was a problem hiding this comment.
My understanding is that this would also include members of the specific project, even if they're not PIs or Managers. In the same way that today all members of an ESI project can manage the bare metal resources within the project.
There was a problem hiding this comment.
Good point - updated to specify that the "tenant" is an organization which is represented by a ColdFront PI/manager.
| * As a provider, I want to be able to define the available bare metal resource classes. | ||
| * As a provider, I want to mark hosts as available for bare metal fulfillment. | ||
| * As a tenant, I want to be able to see available bare metal resource classes. | ||
| * As a tenant, I want to be able to select hosts for a bare metal cluster by resource class. |
There was a problem hiding this comment.
So a tenant would be requesting a host from a resource class and the fulfillment service would select one for the user? In other words, the user doesn't select a specific host? Will the fulfillment service take into account any characteristics, such as rack locality, etc?
There was a problem hiding this comment.
Yep - tenants would not specify specific hosts. After discussion with Danni and Lars, I've added the "filter" concept to the document; essentially, tenants can specify filters (such as a specific rack) that constrains host selection.
| * As a tenant, I want to be able to connect to the serial console of my hosts. | ||
| * As a tenant, I want to be able to perform basic power control (power on/power off/reset) of my hosts. | ||
| * As a tenant, I want to be able to attach hosts to existing networks. | ||
| * As a tenant, I want to be able to modify the network connectivity of my hosts by attaching or detaching networks. |
There was a problem hiding this comment.
How is this different from the bullet point immediately above?
There was a problem hiding this comment.
It's not super different I guess! The first is intended to be "network configuration on creation" while the second is "update network configuration".
There was a problem hiding this comment.
Maybe rephrase them as such?
- As a tenant, I want to be able to specify network attachments for a host when I first acquire it.
- As a tenant, I want to be able to update the network attachments of a host that I have already acquired.
There was a problem hiding this comment.
Makes sense! Updated
| property: 25gb | ||
| primary: storage-network | ||
|
|
||
| If a tenant wishes to change the number of hosts or network configuration of their HostPool, they can simply update the HostPool. |
There was a problem hiding this comment.
Are certain parameters, such as resourceClass immutable once a HostPool has been created? Or would O-SAC in such a situation release nodes and acquire nodes of the appropriate class.
There was a problem hiding this comment.
If a tenant updates their HostPool to remove one resource class and add another, O-SAC would do what you say and release nodes of the first resource class while acquiring nodes of the second.
|
|
||
| ## Open Questions [optional] | ||
|
|
||
| * Do we have consensus that network configuration can only be performed on a HostPool, and not on an individual Host? |
There was a problem hiding this comment.
I think it's a good decision to have network configuration only applicable at the entire HostPool level.
- It matches the interface and API described above where operations are performed on HostPool. Eg. If you reduce the number of Hosts in a HostPool whose Hosts have been manually applied networking, which one do you release?
- It forces all hosts in a HostPool to have the same configuration, and more importantly trains users to work at the HostPool/Fleet/Herd/etc level, applying consistent policy and networking.
There was a problem hiding this comment.
Makes sense! That seems to be the overwhelming consensus, so I've removed this bullet point.
| #### Host Pool Reduction | ||
|
|
||
| 1. The tenant uses the Fulfillment CLI to decrease the number of requested hosts specified in a HostPool. | ||
| 2. The O-SAC solution fulfills the request by removing the requested hosts from the HostPool. |
There was a problem hiding this comment.
How does it choose which one to remove?
There was a problem hiding this comment.
I've added an example in the HostPool section below, and mentioned that the HostPool filters can include the idea of excluding specific nodes.
1e93ffd to
a2c392d
Compare
|
@knikolla thanks for your comments! I think I've addressed them all; the bulk are answered by adding the idea of allowing host filtering ("hosts in rack X", "not host named Y"). The filtering concept is sprinkled throughout the document at the appropriate places, with examples given in the HostPool specification section. |
| numberOfHosts: 1 | ||
| filters: | ||
| - rack: R2 | ||
| exclude: HostX |
There was a problem hiding this comment.
what about several nodes being removed? does exclude takes a list? Does this transient information stays in the API until the user removes it?
An idea from hypershift: they allow to annotate the nodes that will be cleanup first when the nodepool is down-scaled. Maybe we can implement something similar by adding a tag on the hosts? That would be cleaner to me as the information about the exclusion goes away with the host and doesn't stay within the HostPool.
There was a problem hiding this comment.
yep, exclude would take a list! I kinda like having the list associated with the hostpool, because it prevents O-SAC from simply trying to put the same host back into the hostpool
There was a problem hiding this comment.
oh good point! I think it should be mentioned.
There was a problem hiding this comment.
fair - added some text!
59b4e18 to
ea43c9c
Compare
|
@adriengentil thanks for the review! I've answered your questions and made changes based on your feedback; let me know if there's anything I missed! |
ea43c9c to
3a13ca2
Compare
| - primary: network1 | ||
| - primary: network2 | ||
| vlans: | ||
| - network3 |
There was a problem hiding this comment.
This is mis-indented. I think there are some tabs-vs-spaces issues happening in this document; you should detab it.
There was a problem hiding this comment.
Whoops - I think I've fixed the issues.
|
|
||
| ## Open Questions [optional] | ||
|
|
||
| * Can we remove network attachment by MAC address? |
There was a problem hiding this comment.
Let me change remove to manage; it's something that was specifically mentioned before, so I think mentioning it at the very least makes sense.
| ## Open Questions [optional] | ||
|
|
||
| * Can we remove network attachment by MAC address? | ||
|
|
There was a problem hiding this comment.
What about attaching the same network to multiple interfaces? Supported? Not supported?
There was a problem hiding this comment.
Added as a question. My gut is yes (since we do that at the MOC already); implementation-wise, I'd imagine that we can count requested network attachments against the current network state.
d0fde0f to
22a04dd
Compare
|
@larsks I've addressed your comments (changes in some places, responses in others). Let me know what you think! |
| hostSelectors: | ||
| - rack: R2 |
There was a problem hiding this comment.
We probably want to support standard Kubernetes matchLabel/matchExpression syntax in these selectors. Maybe something like this:
| hostSelectors: | |
| - rack: R2 | |
| hostSelectors: | |
| matchLabels: | |
| row: R2 | |
| matchExpressions: | |
| - op: NotIn | |
| key: cabinet | |
| values: ["C2"] |
There was a problem hiding this comment.
makes sense! updated (and added text before the example)
| hostSelectors: | ||
| - rack: R2 | ||
| exclude: | ||
| - HostX |
There was a problem hiding this comment.
Per my earlier comment:
| hostSelectors: | |
| - rack: R2 | |
| exclude: | |
| - HostX | |
| hostSelectors: | |
| matchLabels: | |
| row: R2 | |
| matchExpressions: | |
| - op: NotIn | |
| key: nodeName | |
| values: ["HostX"] |
|
@mhrivnak thanks for the review! I've updated the proposal to address most of your comments, and left questions/comments on a few. |
de1cba6 to
65988fc
Compare
26e64c6 to
2838d4d
Compare
…ent service to O-SAC operator
|
@mhrivnak The latest commit adds text expanding details regarding the workflow from the fulfillment CLI to the fulfillment service to the O-SAC operator, with limited examples appearing in the API section. I used the VM proposal as a baseline; there isn't a full API specification, but I feel like there's enough to make the distinction between what the tenant requests, and what CRs are ultimately created. Let me know what you think! |
mhrivnak
left a comment
There was a problem hiding this comment.
As long as we're ok with some of the network parts of the API changing when we have a more complete set of networking capabilities, LGTM.
|
Thanks all for the comments! |
- Resolve AdminNetworksPage topology view wording contradiction (issue osac-project#3) - Specify IPv4/IPv6 CIDRs explicitly in FR-6 (issue osac-project#4) - Pick side drawer pattern for subnet detail display in FR-12 (issue osac-project#5) - Add Priority field to SecurityGroup rule specification in FR-18 (issue osac-project#6) - Standardize PublicIP action terminology to 'Release' in FR-28 (issue osac-project#7) - Document multi-NIC same-VN constraint rationale in FR-34 (issue osac-project#8) - Align wizard empty-state flow with inline overlay pattern in FR-38 (issue osac-project#9) - Define Retry action API contract in FR-42 (issue osac-project#10) - Clarify Subnet endpoints are create/delete only in FR-45 (issue osac-project#11) - Remove redundant NFR-9 (issue osac-project#12) - Update Open Question 8.2 wording to match Non-Goals Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Elay Aharoni <elayaha@gmail.com>
… metering APIs Replace ambiguous "alongside existing metering data" with explicit "accessible through the same metering query APIs as existing VMaaS/CaaS meters" to clarify the AC means API availability, not response co-location. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
… metering APIs Replace ambiguous "alongside existing metering data" with explicit "accessible through the same metering query APIs as existing VMaaS/CaaS meters" to clarify the AC means API availability, not response co-location. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
No description provided.