-
Notifications
You must be signed in to change notification settings - Fork 820
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 to Kubernetes 1.12 #717
Comments
Another part of this is that if I vendor k8s.io/code-generator at its latest incarnation, I get a panic when running
|
So the unwritten rule I've been following (we should make some kind of written rule), is that we've been updating the client as the next version of K8s has cloud penetration (which I've taken at available on EKS, GKE and AKS). Usually there is breaking changes between each client-go version, but they tend to be relatively trivial to fix. |
Can you comment on what backwards compatibility usually is like with the major version increases? |
Usually we upgrade because we want a latest feature - so backward compatibility has been less of a concern for us. Moving forward, it's a tough question, as we only have https://github.com/kubernetes/client-go#compatibility-matrix to go by, which is not the most reliable thing in the world. Realistically, we should run our own tests. 1.12 is meant to have some very significant scheduling improvements, so it would be good to upgrade, but is a tricky question going forward. There must be some prior art for this, for other controllers out there? |
It looks like client-go still has no way to enumerate exactly what changed or broken if I am reading kubernetes/client-go#234 correctly. I guess we need to answer the question: Does the e2e test coverage sufficiently exercise the client or do we need to write tests specifically for the go client? |
Coming back to this as i was thinking about it more, as it looks like 1.13 is GA on GKE although yet to be services on EKS or AKS I would say - probably the safest bet is to assume that client-go is incompatible with previous versions of Kubernetes (although it usually isn't), and that it's possibly incompatible with future versions (but more likely to work) -- since we really have no guarantee. We have e2e tests, that should be reasonably definitive - but we also don't have a testing suite that runs on every version of Kubernetes (maybe we should?) My initial thought here is that we have a single required version of Kubernetes that is guaranteed to work with Agones, because that is what we run for our e2e tests and development (and we can assume that the next version up also works, but we can be clear it hasn't been tested). Now the question begets itself -- what version should that be? I have two thoughts here:
So my initial thought is: We update to n-1's version of whatever has cloud penetration (i.e. is offered on GKE, AKS and EKS). So once 1.13 is offered on all 3 platforms, we can move to a requirement of 1.12. We know it's a solidly baked version, but it doesn't let us fall too far behind on k8's progress. How do people feel about that? /cc @jkowalski @pooneh-m @ilkercelikyilmaz - I figure you might have some thoughts? Figure it's a pretty important topic, so pinging lots of people to weigh in. |
🤦♂️ @roberthbailey -- you likely have a lot of insight here. WDYT? (the facepalm is because I was silly for not thinking of you earlier) |
Does our use of client-go use any esoteric k8s api features? I'm trying to read really carefully through the client-go versioning and it seems like for the majority of features it's compatible almost across the board due to the backwards compatibility guarantees of k8s. If we are mostly using well established APIs, then I think we can be less concerned about the specific version of k8s that client-go is aligned with and more concerned with the maintenance status of the client-go version we are vendoring. In particular, even if we go with a guaranteed k8s version that we support, we don't have to tightly tie the client-go version to that k8s version -- we can skew forwards (or backwards) a bit to stay within the client-go maintenance window. I think the trend over time is that the cloud providers are picking up newer releases of k8s more slowly. So even if that has historically been a useful gauge of when to bump libraries it may not be as good of a bellwether going forward. In addition, there is a delay of 0-6 weeks from when we bump the vendored version and when it actually makes it into a release. |
Excellent points @roberthbailey -- I think the most "esoteric" features we use are subresources, which are pretty fully baked at this point and time. I see this as two layers though:
Regarding No.1 it seems like it mostly doesn't matter, as long as we stick with stable API surfaces. Regarding No. 2 my fear is, if we start developing against 1.12, but people are using 1.11, we don't actually know if things are working in 1.11 still. Do we need multiple test clusters of different versions? Maybe we do? |
Discussion from the community meeting today said that for near future:
If we decide at a later date that we need to support multiple K8s versions, we can expand the operations needed to provide support for this, but its not something the community is asking for. If I haven't captured the thoughts from the meeting, or if you disagree - please make a note here 👍 If we don't have an objections by the 30th of may, we can consider this approach locked in, and we can document it, and start moving infrastructure to 1.12. |
Looks like EKS is going to start hosting 1.13 this month, which once live, will mean we can move to 1.12 |
This rewrites the Overview page to give a concise summary of the project and its capabilities. For this reason, I moved the requirements section into the Installation section, and updated the docs slightly to fulfill kubernetes version support outlined and decided in googleforgames#717
This rewrites the Overview page to give a concise summary of the project and its capabilities. For this reason, I moved the requirements section into the Installation section, and updated the docs slightly to fulfill kubernetes version support outlined and decided in #717
List of items to do for upgrading to 1.12
Anything else I'm missing? |
Hope you don't mind, I renamed this to "Upgrade to Kubernetes 1.12", and added it to the milestone, as discussed on the community meeting today. |
Not at all. I think that is a better title at this point and gives me something more actionable to work on in the coming month. |
I don't see it anywhere in the GKE release notes, but I just got an automated email saying:
which means that we should start working on this ASAP. If we don't switch the default kubernetes version on GKE, CI will soon break because we won't be able to create 1.11 clusters. |
More reason to do this soon: as per https://groups.google.com/d/msg/kubernetes-announce/AT5yB3FzDv8/gwfhI78RBgAJ 1.12.10 has just been released and it is
|
I'm starting on updating the |
I can also help with this, once I get a bit further along on #703. |
Also regenerated the CRD clients with the updated tooling. Needed to build a udp-server:0.14 Work for googleforgames#717
Also regenerated the CRD clients with the updated tooling. Needed to build a udp-server:0.14 Work for googleforgames#717
Also regenerated the CRD clients with the updated tooling. Needed to build a udp-server:0.14 Work for googleforgames#717
Also regenerated the CRD clients with the updated tooling. Needed to build a udp-server:0.14 Work for #717
@aLekSer - do you think you'd be able to update the AKS instructions to create clusters using Kubernetes 1.12? |
Yes, I will upgrade Terraform configurations to a new version of Kubernetes. |
Updated AKS terraform config to 1.12.8, the latest 1.12 supported by AKS, in this PR |
From what I can tell, all that is missing to close this out is documentation updates to use 1.12 on EKS. Does anyone have an amazon account they can test with? |
May be easier to check in #users on Slack? 🤔 |
@roberthbailey I was able to create EKS cluster with version Kubernetes
|
Thanks for looking @aLekSer! Did you look at why the gameservers aren't becoming healthy? |
@roberthbailey gameservers continuosly got exited, so I need to find how to turn on some cloudwatch logging to see what happens prior to shutdown. I could predict that there is not enough space for new pods. |
I would expect with micro instances there would be barely any room for the k8s resources 😄 |
I tested with t3.medium instance. The same errors. Created GS with disabled healthcheck and see the logs and it has an issue with connecting to a sidecar
|
Also there is an issue in EKS when using helm, which is fixed by next command:
After this I was able to use recent version with:
Checking functionality now |
@roberthbailey Basic functionality on 1.12 EKS cluster (namely
|
I think we need to have a Terraform module for EKS.
|
@aLekSer - let's split the terraform for eks into a separate issue (feature request). I think all that remains here is to change https://github.com/googleforgames/agones/blob/master/site/content/en/docs/Installation/_index.md to change the required version to 1.12 starting with the 0.12.0 release. |
Ok, I will add a ticket for Terraform now. |
Everything is ticket off - I assume we can close this now? |
The version of client-go we vendor is 8.0 and is deprecated per the k8s client-go compatability matrix. They use semver rules which means that we may have breaking changes in 9.0+ (but we also might not). We should investigate what it would take to bring us up to current, or as close to current as possible.
The text was updated successfully, but these errors were encountered: