-
Notifications
You must be signed in to change notification settings - Fork 19
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
Restore inrefaces on restart in case of external VPP #512
Comments
Possible solution [DRAFT]Use
|
@glazychev-art Can we go with something more simple? Basically, we need to do this:
I guess tag can be: ${forwawrderName}-${connectionId}. It will allow using multi-forwarder instances for the node. |
I partly agree. Probably we can use tag like this: ${forwarderName}-${connectionId}. Concerning step 2:
The basic idea of the #512 (comment) is:
|
Additional thoughts. If we want new forwarders to be responsible for the previous ones. We need to remember, that:
So, I think we need a more complex tag. Why do we need 'nsm-'? Why do we need '${client|server_identifier}-'? Why do we need '${forwarderName}'? Why do we need '${connectionId}'? Why do we need '${refresh_identifier}'? Another question arises - the tag length is limited to 64 characters - https://github.com/FDio/vpp/blob/master/src/vnet/interface.api#L363 |
We discussed another solution internally. Probably we need to manage only the interfaces created by this forwarder or the previous one (i.e. its name was saved after the restart) In other cases:
|
We've internally discussed this problem with @edwarnicke Discussion results: We're seeing two basic cases:
Case 1, currently can be considered with a tag-based recovery strategy as we discussed in the PR meeting. Case 2, currently is blocked. We need to verify that folks are using the k8s deployments upgrade feature. If so we can consider a solution with clearing resources on the application stops. |
So, I think now it will look like this: Tag: We have 2 main steps: Step 1
We can determine which particular interface is being used by InterfaceDevType ( Step 2
|
@glazychev-art Didn't we discuss adding an expire time to the tag in VPP so we could simply time things out? |
@edwarnicke
|
@glazychev-art I think you are correct, using maxTokenLifeTime should work, it will eventually clean up the connections if they are not renewed. |
@glazychev-art Might it be possible to solve this in a more localized fashion. Right now, understanding of how to handle particular interfaces is 'localized' in a particular mechanism chain element. What you are suggesting in step 1 would require having a second place that understand all of the mechanisms. Might it perhaps not be simpler to have each mechanism chain element dump interfaces, keep a This localizes the issue to a particular mechanism, and so we don't 'smear' localized knowledge into the global sphere. maxExpireTime after launch, you can just delete anything remaining in the Map. Thoughts? |
One other question... have you given thought to how this would intersect with VNI allocation? |
@edwarnicke VNI... It's good that you pointed it out. Now it is stored in the local map. |
So, VNI. There is a problem with 2A case:
|
We have also the problem with |
So, for cases where the forwarder has its previous name after a restart and we use an interface dump, we have the following problems:
I guess that, this mostly applies to cases where the container is restarted, not the entire pod. |
We know that when users update the forwarder, the pod restarts without saving the name. In this case, the correct solution is to remove the interfaces before terminating. Moved to a separate issue - #516 |
@edwarnicke @denis-tingaikin |
Description
When we create VPP on the forwarder pod we assume that forwarder death means VPP death. But it is not right for the external VPP socket (e.g. Calico-VPP case). If forwarder restarts it can leave network interfaces there.
In this issue we need to prepare possible solutions.
The text was updated successfully, but these errors were encountered: