@@ Coverage Diff @@ ## master #49 +/- ## ========================================= - Coverage 62.76% 59.57% -3.2% ========================================= Files 129 129 Lines 4034 4245 +211 Branches 107 104 -3 ========================================= - Hits 2532 2529 -3 - Misses 1502 1716 +214
So my goal for this PR is to get Nelson running on a single K8s cluster.. with that in mind I think these are the missing pieces:
Health check algebra is just a matter of getting the other PR merged and then implementing it, should be straightforward.
For service discovery it seems at least short term we have 2 options:
For load balancing we have a couple options:
Seems to be the predominant pattern in Kubernetes, or rather nobody I've asked has refuted me on that claim yet. This means all requests go to the same IP address, share the same load balancer (including # of nodes handling requests, etc.) and have two options for routing:
spec: rules: - host: foo.bar.com http: paths: - backend: serviceName: s1 servicePort: 80 - host: bar.foo.com http: paths: - backend: serviceName: s2 servicePort: 80
spec: rules: - host: foo.bar.com http: paths: - path: /foo backend: serviceName: s1 servicePort: 80 - path: /bar backend: serviceName: s2 servicePort: 80
Seems to be not that common in Kubernetes, or at least doesn't seem to be a direction the Kubernetes folks are heading. This would however match more closely with Nelson's current design of exposing a load balancer per service.
I don't have many thoughts re: single vs. multiple ingress ATM, I do think many users currently do not operate at a scale/domain where having a single ingress point matters much? At least it doesn't for us, and we can certainly just implement both suggestions I made above and somehow make loadbalancer implementation pluggable. I do agree the multiple loadbalancer thing is ultimately more scalable though.
* Add Kubernetes interpreter for SchedulerOp * Add Kubernetes interpreter for HealthCheckOp * Add new Canopus workflow for Kubernetes deployments * Add new 'scheduler' field in config to choose between Nomad or Kubernetes * Add support for SSLContext in HTTP4S Client creation * Add namespace to Summary ctor since Kubernetes needs that Also: * Change Alpine APK endpoint as original one didn't seem to work anymore * Remove Allocations, was only used in reconcilliation which was removed in #48