-
Notifications
You must be signed in to change notification settings - Fork 40k
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
upgrade: Rolling system updates via delete/re-create nodes #5044
Comments
good to see a familiar face, @multilinear Contribs are always welcome. Things change rapidly, so the best approach is to break it up and contribute incrementally. We've been assuming that we have to respect an SLA for pods to do node upgrades. If for your cluster this is not necessary then you could script this yourself without any changes to the kubernetes code. I don't think you need to add API functionality to do this.
|
Let's definitely sync. @maxforbes on our side has already started looking at how to do rolling updates for GKE, and it's similar to what you're saying. We were thinking of starting with simple drain and re-provision as well. I'm considering more grandiose plans to possibly rewrite kube-up.sh and friends to take a yaml specification so we can be a lot more precise for provisioning and update. I expect to have a proposal out soon, assuming I get some time for that this week. (I think I can take all the existing scripts along for the ride and work towards rewriting advanced providers in Go as we want.) So that's something else in this puzzle to think about. |
Silly mobile client. I meant @mbforbes |
I see, so you can do this via "kubectl create" and "kubectl delete". Then indeed manual management would definitely work for now. There's a bit more already there than I realized... I'll have to give that a try. Thanks! It sounds like zmerlynn has more thoughts though, and I'm still interested in solutions that build a bit more into the kubernetes framework as well (be it shell scripts or otherwise). So I'll leave this open. |
@multilinear can you report back and let us know if the manual strategy worked and/or if you hit any bumps? |
Also, once #4585 merges, which should be soon, there will be an explicit unschedulable-but-not-deleted state for nodes. That will give you as much time as you want to drain the node. |
With the round-up for node upgrades (#6079), I'm trying to close other issues that target pieces of the process. Specifically, this should be implemented with the basic version (#6082). Your ideas here were definitely helpful, though! I think they're going to be taking shape in the system:
Definitely re-open / ping if I missed something! |
I see. I don't actually trust the methods in #6082 (basically I don't think it will actually work), and would argue that just recreating the machine form scratch is much smarter. Truly idempotent machine setup is nigh impossible (Chef doesn't do it, and that's their entire product), and I'm not sure it has much value if you're running inside a virtualized cluster anyway... but I suppose that's an argument to have on that bug :). So, with that sort-of exception, yes I think you hit all the points. |
Yeah, believe me, I'd rather start from a fresh machine (huge discussion on this in #3333). However, as Zach mentioned in his reply to you in #6082, we need to be able to let new nodes into the cluster, aka dynamic clustering (#6087), before we can do this. And we want to make some progress before then, as we've been blocked on this for a long time. As soon as dynamic clustering is in, we have #6088 to start with a fresh machine instead. |
I'm looking for a way to make kubernetes to do rolling system updates of node machines. I'm targetting the kernel and operating system levels, though kublet would come along for the ride.
My thought is that do an "update" of a node you simply turn up a new node, and then tear down the old one. This model is simple and easy to reason about, much easier than in-place update. We want kubernetes to know that a node is gone immediately though, so downtime of containers on that node is small. I think this is consistant with current plans? (e.g. #4855)
Here's my proposal:
I'm with Meteor, the folks running kubernetes on AWS, and my intention is to implement this myself within about 2 months if it looks like a good direction to go. I don't want to step on anyones toes, and after I do this work I'd really like to upstream it, so I'm trying to ensure that this is compatible with the rest of the project.
The text was updated successfully, but these errors were encountered: