Comments (5)
It seems there are some questions around this feature:
What are the use cases for it?
I only see one use case for this. If someone is switching from using a normal service to StackSet
, their application would go from having a stable cluster.local
endpoint like
some-service.default.svc.cluster.local
to only having per version service endpoints i.e some-service-v*.default.svc.cluster.local
.
This might break callers that were using the original cluster.local
endpoint. For example, services that use UI/API Gateways e.g tailor or zuul usually tend to use the cluster.local
endpoints.
Which Stack version would this service point to?
Since we can't really traffic switch on service endpoints, which Stack version should this service point to. Should it always point to the latest version or should that be configurable?
One solution could be that we have a service
key in the spec that refers to a stack version, something like:
apiVersion: zalando.org/v1
kind: StackSet
metadata:
name: my-app
spec:
#... optional igress definition
# define which Stack service should the cluster.local endpoint point to
service:
version: v1 # direct 100% of the cluster.local traffic to this version of the Stack.
People could also achieve the same effect by defining a service explicitly so the value of doing this is not clear.
Another solution would be to have the convention that this service always points to the Stack version that has the most traffic.
We could also decide that it would only work if a stack version is getting a 100% of the traffic. But then what should the endpoint refer to during traffic switching when there are multiple version.
But in all of the above solutions traffic switching is essentially "broken" for traffic coming from inside the cluster.
from stackset-controller.
Good idea!
They can't be traffic switched so the question is, what should be the selector?
stackset: <name>
could be the selector. Each stack has this.
from stackset-controller.
stackset: could be the selector.
Right, but that would mean 100% on a particular version. Wrong if you have a 20/80% split on the Ingress level but probably good enough.
from stackset-controller.
@muaazsaleem Thanks for the detailed explanation.
from stackset-controller.
We decided that people have to provide their own service.yaml
when they need the unversioned cluster.local
dns name.
from stackset-controller.
Related Issues (20)
- Unbounded Traffic Switch leads to slow actual switch and high number of pods HOT 1
- Regression: StackSetController chokes on single broken stack HOT 1
- Report stackset/stack information via Prometheus metrics
- Proposal - enable external CRDs: skipper RouteGroup, FabricGateway HOT 6
- jsonschema updates for Kubernetes 1.15/1.16 HOT 1
- enable users to define secrets and configmaps in stackset resource HOT 1
- Detect when controller loses connection to API server
- RouteGroup support HOT 1
- startupProbe Support HOT 2
- Fractional traffic weights don't seem to be set accurately
- metadata from stackset service won't be propagated
- In kube-1.18 we don't write status field anymore HOT 1
- fix transport issue with WATCH
- Some low hanging fruits to improve the coverage:
- Include a tidy check on the CI
- StackSet cannot be created when RouteGroup contains metadata HOT 1
- pre define shunt backend in case routegroups are used HOT 3
- Support 'minReadySeconds' for deployments
- Routegroup Algorithm Support HOT 2
- Cannot overwrite rollingUpdate strategy for Stack's Deployment HOT 1
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 stackset-controller.