Comments (6)
These being values.yaml defaults has really bitten us here. IDK if we really ever had a good reason to make these probes configurable (if either the gateway or controller fail to come up within a standard amount of time/retries, my intuition is either we've done something wrong or you have assigned your containers seriously potato levels of resources and need to up them), but they are, so we're kinda stuck with that.
It's an open question as to whether removing configurable status would cause issues in an ideal world, but in reality the answer is "probably" because the limitations of the old endpoint mean there are a fair amount of configurations in the wild that instead check a proxy route, as a DIY version of the "does the proxy have configuration?" status check now in 3.3. Simply removing this from config surface and hard-defaulting everything <3.3 to the existing /status
check would disrupt anyone using that workaround. Options are:
(1) Remove probes from configuration surface, automate in templates
Problematic for the "breaks known in-use workaround" reason above, and maybe more, if there's some small segment of users doing something entirely different for unknown reasons.
Rather than having configurable probes, templates would set them automatically. This can address an old issue where probe and listen configuration need to match, but must be updated manually.
(2) Change the values.yaml default to use the 3.3+ endpoint
Breaks the original acceptance criteria, but viable. We would need to add an upgrade note that says "if you're on <3.3, you need to explicitly set the old default in your values.yaml before upgrading the chart". Upgrades that neglect to do this would hit crashloops on the upgraded Pods, so the upgrade would fail and leave the existing release running. This is annoying, but safe.
We would need to confirm upgrade failure and rollback behavior before releasing.
(3) Remove probe configuration surface, but check if not default
Option 1, but attempt to account for configurations that were using the workaround. We remove the values.yaml block, but have templates check if the keys are non-empty. If they are set, use the value given. If not, use defaults within the template. Effectively make this a hidden piece of config surface that we recommend against for any new install.
Optionally have this check to see if values are explicitly set to the old default and override if >=3.3 to account for wholly copy-pastaed default values.yamls, but that's probably going overboard.
Ed: additional issue here is that we'd either have to do this for all the probes (there are six total) or have inconsistent UX where most of them are specified directly in values.yaml, but the proxy readiness probe isn't, unless it is (it's not in the default values.yaml but we will honor a values.yaml override if present).
Kong with no Ingress Controller (just using /status/ready might break it as the Admin API service will never get ready and deck won't be able to configure the Gateway, which may require special handling)
We can ignore this. If you're not using a controller you're either using a static DB-less config (which loads at startup) or a database (which also loads config at startup or fails, since Pods that can't connect to the DB self-terminate immediately). The new endpoint should immediately report true for either of these.
from charts.
What about option 4: Leave the existing defaults, handle the new liveness probes as part of docs then make a major chart release alongside KIC 3.0 to switch the default?
from charts.
It's doable, but doesn't change anything beyond delaying it. We'd probably get low adoption of the new behavior until then, and we don't actually know when we'll release KIC 3.0.
from charts.
I think my original proposition was a variation of option 2: we keep the readiness probe definition in values.yaml
and we change the endpoint to the new one (/status/ready
). When the proxy's image version is < 3.3 and the readinessProbe.httpGet.path
== /status/ready
(a new default), we override it to the old default (/status
) to make the default behavior compatible with Kong < 3.3.
- If someone had
readinessProbe.httpGet.path
set to anything else than the default invalues.yaml
(for any reason) their setup won't break (their override will be used). - If someone had
readinessProbe.httpGet.path
untouched:- For Kong < 3.3 they'll get
/status
- For Kong >= 3.3 they'll get
/status/ready
.
- For Kong < 3.3 they'll get
Wouldn't that work?
from charts.
That would be the ideal end user state, but I believe that's the template hackyness that @rainest was talking about
from charts.
I didn't think it was possible to selectively edit fields within an object default, but apparently it is, so that approach is indeed viable. It still requires a template hack, but since it doesn't make the configuration uneven, it's better than my original option 2 (#842). We can merge that immediately without breakage.
#841 is the breaking change that just uses the new endpoint in values.yaml without any compensating behavior. Older version users would need to manually configure the old default.
#842 removes the configuration from the defaults, but will still honor configuration if present. If there is no custom configuration, it will render a preset probe compatible with the Kong and KIC versions.
#844 keeps configuration and uses the new default, but will selectively edit the path without user action if needed for old version compatibility.
from charts.
Related Issues (20)
- kong serviceMonitor is not having scrapeTimeout
- Quickstart from docs should use "safer" updateStrategy
- Kong pod is getting crashloopback after abrupt shutdown HOT 4
- Improve homepage of Helm Chart HOT 1
- Cannot choose admin listen address
- create `tlsProxy` service HOT 1
- Rename Runtime Group to Control Plane
- Chart Image Not Valid Semantic Version HOT 1
- Enable kong manager service for non-enterprise user
- Kong ingress-controller container missing lifecycle configurations HOT 5
- Kong manager unable to connect to admin api
- Automaticall sync README.md to gh-pages branch
- Test ingress chart against kong chart PRs
- add option for global https redirect in ingress controller chart HOT 1
- Tunable webhook timeout
- Return of the templated CRDs HOT 1
- `app.kubernetes.io/version` Pod label always points to `.Chart.AppVersion` regardless whats set in values
- When enabled by default in kubernetes, deploy `ValidatingAdmissionPolicy` for validation of resources
- `kong`: Cannot install more than 1 ingress controller release with the same name in different namespace
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from charts.