-
Notifications
You must be signed in to change notification settings - Fork 803
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
Is it possible to use the standard k8s topology labels? #729
Comments
I really don't know why we didn't use the well-known label. @wongma7 @leakingtapan maybe? I agree we should just use them instead. Initially we should support both labels though so we can provide a deprecation warning. |
It is because the well-known label wasn't well-known yet by the time this driver's topology key was set. There used to be a separate label Given the fact that the driver is not GA yet, I think it makes sense to fix the label before GA if no other concerns. But also keep in mind to update the CSI translation lib for CSI migration here to avoid breaking CSI migration. Hope this helps |
related to: #675 |
That's really helpful, thanks a lot @leakingtapan! Since this requires k/k changes, I'll try to come up with a plan. /assign |
We'll need to gracefully retire the current label (topology key), so we need to start with writing both.
Skipping the beta labels should be safe since it's only used by the translation lib. cc @wongma7 for sanity check |
sounds good to me. I understand concretely this to mean NodeGetInfo must respond such that CSINode.topologyKeys has both oldKey and newKey. CreateVolume, if provided topology requirement in request, must extract the zone from newKey if exists or oldKey if not CreateVolume must respond such that PVs have nodeAffininity.nodeSelector oldKey==A || newKey==A (by returning AccessibleTopology array containing both) |
If I'm following correctly, landing #773 would be sufficient for Cluster Autoscaler to operate correctly with It looks like #773 missed the 0.10 release branch, so I guess it'll be part of 0.11? |
We are running 0.10 and hit an issue of it complaining about not having a topology key on the node to provision a new volume from a PVC. Does #773 prevent needing the key topology.ebs.csi.aws.com/zone or is it still required for now? |
For now you should still use both. Driver itself priorities Do you mind opening an issue ideally with more details? |
Issues go stale after 90d of inactivity. If this issue is safe to close now please do so with Send feedback to sig-contributor-experience at kubernetes/community. |
/remove-lifecycle stale label best practices needs discussion with kubernetes upstream . It's not clear at this time whether we should be putting the standard label or if the standard label should be reserved forr use by in-tree drivers (which simplifies migration because migration translates from our custom label to the standard label.) |
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 |
/remove-lifecycle stale |
when balancing similar nodes, the autoscaler will look for differences in labels as one of its checks for similarity. by default it will ignore the well known kubernetes zone label (topology.kubernetes.io/zone), but the aws-ebs-csi-driver will add a unique label for its zone, `topology.ebs.csi.aws.com/zone`. this label will eventually be deprecated in favor of the common well known topology label. for more information about this see the references. ref: kubernetes/autoscaler#3230 ref: kubernetes-sigs/aws-ebs-csi-driver#729
This change adds the aforementioned label to the list of ignored labels in the AWS nodegroupset processor. This change is being made in response to the addition of this label by the aws-ebs-csi-driver. This label will eventually be deprecated by the driver, but its use will prevent AWS users from properly balancing similar nodes. Also adds unit test for the AWS processor. ref: kubernetes#3230 ref: kubernetes-sigs/aws-ebs-csi-driver#729
/close fixed in #1360 - available in the driver since version v1.12.0 |
@ConnorJC3: Closing this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
@ConnorJC3 I think this should be re-opened. From what I can see, the fix was reverted because it was causing duplicate topology selector terms in the CSI migration case. So it's still the case, even with latest driver version, that provisioned PVs select only on the non-standardised One solution to solve this without harming compatibility with existing clusters would be to provide an option, disabled by default, to use the standardised |
Ah, that is correct, I will reopen this, sorry. Will look into fixing this in the near-ish future completely. |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
/remove-lifecycle stale |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
/remove-lifecycle stale |
/lifecycle frozen Hi, sorry about the delay on this, the team has decided on a plan: We do want to move over to the standard labels, but don't want to immediately do so as it breaks downgrading and is a minor breaking change. Thus, the plan is:
|
Hi @ConnorJC3 👋 I am engineer on the Nomad team and I think #1931 may have created an irreconcilable topology. With v1.28.0, the created volume only has the topology segment On step 3, if the volumes only receive the new label, would the non-standard label be removed from node as well? Otherwise the irreconcilable topology would still be a problem. Apologies for my ignorance on this, but, currently, where is the standard label applied the the volume on creation? Otherwise I would imagine the same problem would be happening on Kubernetes clusters? Thank you! |
Hi @lgfa29 - My understanding of the CSI spec is that a volume with key This is also how it is implemented in Kubernetes: https://github.com/kubernetes/kubernetes/blob/909faa3a9b33161992af0684c5582353b5be6d9b/pkg/scheduler/framework/plugins/volumezone/volume_zone.go#L187-L193
The intent is to serve both labels from the node indefinitely, to support volumes created with the old topology key to continue to work on new versions of the EBS CSI Driver.
Currently volumes receive |
Thank you for the extra information @ConnorJC3. I've opened hashicorp/nomad#20094 in the Nomad repo for us to track this. |
This is the latest version where the topology key is still topology.ebs.csi.aws.com/zone. Version 1.33.0 switched to the well-known topology.kubernetes.io/zone, and is a breaking change that we'll have to plan for. kubernetes-sigs#729 (comment)
/close As of |
@ConnorJC3: Closing this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
Is your feature request related to a problem?/Why is this needed
Looking into the interactions of this driver with the Cluster Autoscaler, i.e., kubernetes/autoscaler#3230 (comment), I have been unable to identify a good way to support the scale-from-zero case without needing to either change Cluster Autoscaler to always add this driver's topology label, or have each node group's ASG manually specify the topology label
topology.ebs.csi.aws.com/zone
./feature
Describe the solution you'd like in detail
A parameter to specify the topology label used by the PV dynamic allocation, which in the EKS case, can be set to
topology.kubernetes.io/zone
(orfailure-domain.beta.kubernetes.io/zone
on older clusters) and behave correctly.Describe alternatives you've considered
topology.ebs.csi.aws.com/zone
label into Cluster Autoscaler AWS support the same way the standard zone label is hard-coded.k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone
on each node group definition in eksctl to which the EBS CSI Daemonset will be deployed, i.e. manually matching the local taint/toleration setup.See kubernetes/autoscaler#3230 for more details on these alternatives.
Additional context
I'm not sure what the reason is for using a new label originally, which is why I suggest it be an option, rather than changing the default. I'm guessing in non-EKS deployments on EC2, the standard zone label may not be reliably the AWS Zone, if the AWS Cloud Controller is not in-use?
That said, if the reason is that that the label must be owned by the driver for spec or behaviour reasons, then this wouldn't be feasible at all, and we'll probably be stuck manually ensuring that the node groups with the tag correctly match the tolerations of the Daemonset.
The text was updated successfully, but these errors were encountered: