CFP-18405: ENI IPAM Multi-Pool Migration#87
CFP-18405: ENI IPAM Multi-Pool Migration#87HadrienPatte wants to merge 2 commits intocilium:mainfrom
Conversation
Signed-off-by: Hadrien Patte <[email protected]>
gandro
left a comment
There was a problem hiding this comment.
I am so happy to see this being tackled! 🥹
The plan here sounds very reasonable and implementable to me. I have left some comments on the key questions, but the major concerns of such a change are already addressed in the document from my perspective, so I am approving of this.
| * `Spec.IPAM.Pool` remains populated on all nodes even when all agents have upgraded, until 1.21. | ||
| * Slightly more data written per CiliumNode object. | ||
|
|
||
| #### Option 2: Temporary Opt-Out Flag to Disable Dual-Write |
There was a problem hiding this comment.
I'm mildly in favor of providing this.
We could even go a step further and and enable this by default for new installations. While it is a potentially dangerous flag to enable, I do feel like with proper documentation this risk is mitigated.
There was a problem hiding this comment.
Do we have an established way of doing "if new installation" type of logic today? I feel like a lot of the great options on this page currently default to being disabled (even on new installations) because they're not safe to be enabled on existing clusters.
There was a problem hiding this comment.
Yes, we do, the upgradeCompatibility flag. Though it is possible that many users are not using it when upgrading, which would of course be pretty bad for them. If we want to be safe, maybe your original proposal to make this strictly opt-in is the way to go.
Update based on feedback Signed-off-by: Hadrien Patte <[email protected]>
Thanks, I have updated the CFP based on your comments and changed its status from |
Extend `NewCIDRRange` with a `WithAllowFirstLastIPs` functional option that includes the first and last IPs of a CIDR in the allocatable range. This is needed for AWS ENI prefix delegation where /28 prefixes are exclusively assigned to a node and all 16 IPs are usable as there is no shared network segment requiring base/broadcast reservation. Also refactor `ForEach` to use `r.base` directly instead of assuming a +1 offset from the CIDR base, making it correct for both default and `AllowFirstLastIPs` ranges. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Followup to #34618 See #28637 (comment) Signed-off-by: Hadrien Patte <[email protected]>
Extract ENI device configuration into a standalone CiliumNode observer that runs independently of the IPAM allocator. Previously, `configureENIDevices` was called from `nodeStore.updateLocalNodeResource`, coupling ENI network device setup to the CRD allocator code path. The new observer follows the same `job.Observer` pattern used by `startLocalNodeAllocCIDRsSync` in the multi-pool allocator. It watches CiliumNode updates and configures newly attached ENI devices regardless of which allocator is active. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Signed-off-by: Hadrien Patte <[email protected]>
Extract ENI device configuration into a standalone CiliumNode observer that runs independently of the IPAM allocator. Previously, `configureENIDevices` was called from `nodeStore.updateLocalNodeResource`, coupling ENI network device setup to the CRD allocator code path. The new observer follows the same `job.Observer` pattern used by `startLocalNodeAllocCIDRsSync` in the multi-pool allocator. It watches CiliumNode updates and configures newly attached ENI devices regardless of which allocator is active. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Signed-off-by: Hadrien Patte <[email protected]>
Extract ENI device configuration into a standalone CiliumNode observer that runs independently of the IPAM allocator. Previously, `configureENIDevices` was called from `nodeStore.updateLocalNodeResource`, coupling ENI network device setup to the CRD allocator code path. The new observer follows the same `job.Observer` pattern used by `startLocalNodeAllocCIDRsSync` in the multi-pool allocator. It watches CiliumNode updates and configures newly attached ENI devices regardless of which allocator is active. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Signed-off-by: Hadrien Patte <[email protected]>
Extend `NewCIDRRange` with a `WithAllowFirstLastIPs` functional option that includes the first and last IPs of a CIDR in the allocatable range. This is needed for AWS ENI prefix delegation where /28 prefixes are exclusively assigned to a node and all 16 IPs are usable as there is no shared network segment requiring base/broadcast reservation. Also refactor `ForEach` to use `r.base` directly instead of assuming a +1 offset from the CIDR base, making it correct for both default and `AllowFirstLastIPs` ranges. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Followup to #34618 See #28637 (comment) Signed-off-by: Hadrien Patte <[email protected]>
Extend `NewCIDRRange` with a `WithAllowFirstLastIPs` functional option that includes the first and last IPs of a CIDR in the allocatable range. This is needed for AWS ENI prefix delegation where /28 prefixes are exclusively assigned to a node and all 16 IPs are usable as there is no shared network segment requiring base/broadcast reservation. Also refactor `ForEach` to use `r.base` directly instead of assuming a +1 offset from the CIDR base, making it correct for both default and `AllowFirstLastIPs` ranges. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Followup to #34618 See #28637 (comment) Signed-off-by: Hadrien Patte <[email protected]>
Extract ENI device configuration into a standalone CiliumNode observer that runs independently of the IPAM allocator. Previously, `configureENIDevices` was called from `nodeStore.updateLocalNodeResource`, coupling ENI network device setup to the CRD allocator code path. The new observer follows the same `job.Observer` pattern used by `startLocalNodeAllocCIDRsSync` in the multi-pool allocator. It watches CiliumNode updates and configures newly attached ENI devices regardless of which allocator is active. Relates to [cilium/design-cfps#87](cilium/design-cfps#87) Signed-off-by: Hadrien Patte <[email protected]>
This CFP is a more detailed version of the design I mentioned in cilium/cilium#19251 (comment)