From d9b8c2262ca21839240016d2a1255db293a86ff3 Mon Sep 17 00:00:00 2001 From: rambohe-ch Date: Wed, 11 Dec 2024 23:41:06 +1100 Subject: [PATCH] proposal: reuse list/watch requests in the nodepool for reducing cloud-edge network traffic Signed-off-by: rambohe-ch --- .../metadata-types.png | Bin 0 -> 26292 bytes .../reuse-list-watch-requests.png | Bin 0 -> 40636 bytes ...1211-reuse-nodepool-list-watch-requests.md | 123 ++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 docs/img/reuse-nodepool-list-watch-requests/metadata-types.png create mode 100644 docs/img/reuse-nodepool-list-watch-requests/reuse-list-watch-requests.png create mode 100644 docs/proposals/20241211-reuse-nodepool-list-watch-requests.md diff --git a/docs/img/reuse-nodepool-list-watch-requests/metadata-types.png b/docs/img/reuse-nodepool-list-watch-requests/metadata-types.png new file mode 100644 index 0000000000000000000000000000000000000000..29cc85f69117e19943c0930df2d1ff5ab099a9af GIT binary patch literal 26292 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 literal 0 HcmV?d00001 diff --git a/docs/img/reuse-nodepool-list-watch-requests/reuse-list-watch-requests.png b/docs/img/reuse-nodepool-list-watch-requests/reuse-list-watch-requests.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2dc71c6be3c83906e839487065e73581b89ac6 GIT binary patch literal 40636 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 P000000000000000TQ<+y literal 0 HcmV?d00001 diff --git a/docs/proposals/20241211-reuse-nodepool-list-watch-requests.md b/docs/proposals/20241211-reuse-nodepool-list-watch-requests.md new file mode 100644 index 00000000000..6bf472e5c3c --- /dev/null +++ b/docs/proposals/20241211-reuse-nodepool-list-watch-requests.md @@ -0,0 +1,123 @@ +# Reusing list/watch requests in the nodepool + +| title | authors | reviewers | creation-date | last-updated | status | +|:----------------------------------:|-------------| --------- |---------------| ------------ | ------ | +| reuse nodepool list/watch requests | @rambohe-ch | | 2024-12-11 | | | + +## Summary +In the cloud-edge architecture, The cost of network traffic between cloud and edge is a heavy burden for end users. On the other hand, sometimes there is only limited network bandwidth can be provided for cloud-edge connection. In the proposal [Node-level Traffic Reuse Capability](https://github.com/openyurtio/openyurt/blob/master/docs/proposals/20240529-node-level-traffic-reuse-capability.md), we have proposed a solution to reduce the cloud-edge traffic based on the node level which can get the traffic down 50%. But in our proposal, we propose a new solution that reuses list/watch requests in the nodepool level will reduce cloud-edge traffic up to 90%. + +## Motivation +OpenYurt is using the classic cloud-edge architecture to manage scattered edge worker nodes from a unified control-plane on the cloud. this means that edge worker nodes and pods on edge nodes connect cloud control-plane through public network. + +Our tests revealed that during application upgrades, the outbound bandwidth of cloud have a spike point, and easily reach its maximum capacity. This is primarily due to large-scale creation and deletion of applications, which lead to frequent changes in EndpointSlice resources. at the same time, every change in EndpointSlice must be distributed to each edge node, inevitably increasing the demand for the bandwidth. Assuming a DaemonSet upgrade in the cluster with 1000 nodes and one EndpointSlice is 50KB in size , the total traffic can be calculated as follows: + +``` +1000 (updates) * 1000 (nodes) * 50KB (size per update) = 50GB +``` + +Such a large-scale traffic will affect the stability of control-plane and other requests between cloud and edge. + +By the way, We have proposed a solution for reducing cloud-edge traffic based on yurt-coordinator component, but it is hard to import this component into production environment. the related proposal is here: [multiplexing cloud-edge traffic](https://github.com/openyurtio/openyurt/blob/master/docs/proposals/20220414-multiplexing-cloud-edge-traffic.md) + +### Goals +1. Reduce network traffic between cloud and edge caused by workloads upgrade. +2. Replace the old solution for resuing list/watch requests that providered by yurt-coordinator component. this means we will deprecate yurt-coordinator component. +3. The new solution can integrate with current node-level traffic reuse solution seamlessly. + +### Non-Goals/Future Work +1. The new solution can only take effect when nodes can access each other in nodepool. +2. Don't support resuing CRD list/watch requests in this proposal. we will support this feature in the future version. +3. Support high availability of Leader Yurthub in the future version. + +## Proposal +### Metadata Types +In the following figure, we can see that kube-proxy on every node list/watch endpointslice resource from cloud control-plane. + +![img.png](../img/reuse-nodepool-list-watch-requests/metadata-types.png) + +we can separate the metadata that components or pods on worker node list/watch from control-plane into the following two types: + ++ Pool Scope Metadata: + +Each node list/watch the same copy of metadata from the control-plane, such as entire endpointslice metadata. This type of metadata is the main cause for bandwidth congestion because each change of metadata should be distributed to all nodes. + ++ Node Scope Metadata: + +Each node only list/watch metadata resource related to the node, such as kubelet list/watch pods that assigned to the node. Each change of this type of metadata is only distributed the corresponding node. + +So we should focus on the Pool Scope Metadata. If only one copy of metadata change should be distributed to one NodePool, and nodes in NodePool share this copy of metadata, the network traffic between cloud-edge would be reduced a lot obviously. + +### Reuse List/Watch Requests In NodePool +The solution is demonstrated in the following figure: + +![img.png](../img/reuse-nodepool-list-watch-requests/reuse-list-watch-requests.png) + +1. A new controller named HubLeaderElection is added in yurt-manager component. This controller will select one Yurthub as leader for each NodePool. The status of node for Leader Yurthub must be ready, if the node status becomes not ready, the controller should renew the Leader Yurthub with ready node. +2. Different leader election strategies can be supported, such as random, mark, etc. + - random: controller select one ready node as leader at random. + - mark: controller select one ready node as leader from nodes that are specified by labelselector. +3. Leader Yurthub will start to list/watch pool scope metadata from control-plane and store on local memory for sharing. +4. The Follower Yurthub intercept list/watch pool scope metadata from components, and forward the list/watch requests to Leader Yurthub. + +So there is only one copy of pool scope metadata will be distributed between cloud and edge, and pool scope metadata will be shared in the nodepool. + +### API Changes +we need to add the following fields into NodePool CRD and NodeBucket CRD. this means we need to upgrade version for these two CRDs. + ++ Spec.InterConnectivity: bool [Not allowed to change] + +Specify that all nodes in the NodePool can access with each other through Layer 2 or Layer 3 network or not. If the field is true, nodepool-level list/watch requests reuse can be applied for this nodepool. otherwise, only node-level list/watch requests reuse can be applied for the nodepool. + ++ Spec.LeaderElectionStrategy: string [Allowed to change] + - random: controller select one ready node as leader at random. + - mark: controller select one ready node as leader from nodes that are specified by labelselector. + +More strategies will be supported in terms of user's new requirements. + ++ Spec.LeaderNodeLabelSelector: map[string]string [Allowed to change] + +This field is used only when LeaderElectionStrategy is mark. controller will elect leader from nodes that filtered by this label selector. + ++ Spec.PoolScopeMetadata: []schema.GroupVersionKind [Allowed to change] + +Pool scope metadata specified in this field will be shared in the nodepool. This field is supported to modify dynamically. and the default value is v1.Service and v1.Endpointslice. + ++ Status.LeaderEndpoints: []string + +This filed is used for storing the address of Lead Yurthub. each Follower Yurthub will use address in this field to access Leader Yurthub. + ++ Status.Conditions: []NodePoolCondition + +This filed represents the latest available observations of a NodePool's current state that includes LeaderHubElection status. + +``` +type NodePoolCondition struct { + Type NodePoolConditionType + Status v1.ConditionStatus + LastTransitionTime metav1.Time + Reason string + Message string +} + +type NodePoolConditionType string + +const ( + // LeaderReady means the status of leader yurthub election. If it's true, a Leader Yurthub is elected, otherwise no leader is elected. + LeaderHubReady NodePoolConditionType = "LeaderReady" +) +``` + +### Yurt-Coordinator Deprecation + +The following code related Yurt-Coordinator should be removed, and OpenYurt can become more simple and powerful. + +- yurt-coordinator charts +- yurt-manager + - yurt-coordinator-cert controller + - delegate-lease controller +- yurthub + - code related yurt-coordinator + +## Implementation History +- [ ] 12/11/2024: Proposed idea as a proposal \ No newline at end of file