-
Notifications
You must be signed in to change notification settings - Fork 40.7k
Fix issue where pods could read stale immutable secrets/configmaps after re-creation #132046
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
base: master
Are you sure you want to change the base?
Fix issue where pods could read stale immutable secrets/configmaps after re-creation #132046
Conversation
Hi @kei01234kei. Thanks for your PR. I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. 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. |
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the The 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. |
In this PR, I prevent the reflector for immutable resources from being stopped. A concern here is the negative impact on scalability, as @liggitt has pointed out (see #131589 (comment) ). |
/kind bug |
// already have it from here | ||
// - doing that would require significant refactoring to reflector | ||
// we limit ourselves to just quickly stop the reflector here. | ||
if c.isImmutable(object) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change would completely delete the whole gain of immutable secrets/configmaps and defeats the purpose of their existence.
There are other way of addressing the issue - basically what we need is to resync the cache when a new "usage" of secret/configmap is observed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is what you desire to change here into if !i.stopped {
?
if i.immutable || !i.stopped { |
If so, every time the Get method of the objectCache struct is executed, kubelet makes a request to the kube-apiserver. This can increase pressure on the kube-apiserver, especially during events such as rolling updates.
If this is acceptable to you, I will go ahead and apply the change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This won't be enough on its own, because we need to ensure that it won't be overwritten later if watch is lagging. So it's more subtle than that - but it's roughly that direction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
make the reflector wait until it catches up to the latest resource version when it is restarted
I followed @serathius' comment specified here.
bc5ade5
to
382c4d8
Compare
This reverts commit 382c4d8.
bad6b23
to
9e1373a
Compare
…rsion when it is restarted
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: kei01234kei The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/remove-sig api-machinery |
What type of PR is this?
/kind bug
What this PR does / why we need it:
To resolve the bug about the immutable secret and the configmap.
Which issue(s) this PR fixes:
Fixes #131589, #124701
Special notes for your reviewer:
Immutable Secrets and ConfigMaps enhancements#1412
client-go: Add support for API streaming to the reflector #110772
https://kubernetes.io/blog/2024/12/17/kube-apiserver-api-streaming/#streaming-list-requests
https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/3157-watch-list/README.md
Does this PR introduce a user-facing change?
Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.: