v0.6.0
What's Changed
- 🚀 Autoscaling: Each agent autoscales independently on the concurrent in-flight load its broker handles.
- 🛡️ Broker rate limiting: Cap concurrent in-flight
A2Arequests per agent, shedding excess (HTTP 429 + Retry-After, gRPC RESOURCE_EXHAUSTED) to protect an external dependency like an LLM quota. Composes with autoscaling - scale-up is suppressed once total in-flight reaches the cap. - 🧹 Graceful pod termination: Draining before termination, smooth and precise autoscaling down and pod rotation.
- 📈 Broker observability.
Installation
kubectl create namespace kynomesh-system
# Install kynomesh controller
kubectl apply -n kynomesh-system -f https://github.com/kynoproj/kynomesh/releases/download/v0.6.0/install.yaml
Pull Requests
- feat: get broker image to AgentDeploy pod by @whynowy in #1
- chore: expose builtin envs to the containers by @whynowy in #2
- chore: discard mergo by @whynowy in #3
- chore: AgentDeploy obj in env by @whynowy in #4
- chore: refactor to move constants by @whynowy in #5
- feat: broker to support tls by @whynowy in #6
- chore: more leader election config by @whynowy in #7
- chore: use both agentset and agentdeploy names in the labels by @whynowy in #8
- feat: broker proxy implementation by @whynowy in #9
- feat: mount socket volume by @whynowy in #10
- feat: add init container to create socket file by @whynowy in #11
- feat: switch to using UDS by @whynowy in #12
- feat: introduce pattern and entry by @whynowy in #13
- fix: incorrect container and brokerTemplate settings by @whynowy in #14
- feat: broker passthrough all the traffic by @whynowy in #15
- feat: introduce 2nd port for metrics and health check by @whynowy in #16
- docs: simple readme by @whynowy in #17
- fix: allows passthrough when agentcard is missing by @whynowy in #18
- chore: more test cases by @whynowy in #19
- chore: broker fqdn by @whynowy in #20
- feat: make it possible to run on the local by @whynowy in #21
- ci: image build by @whynowy in #22
- ci: nightly build by @whynowy in #23
- chore: update the ports and broker endpoints by @whynowy in #24
- chore: update local dev port to 8088 by @whynowy in #25
- chore: add AGENTSET_NAME and AGENTDEPLOY_NAME to the env by @whynowy in #26
- feat: write topoloty file to runtime by @whynowy in #27
- chore: do not create socket file in init container by @whynowy in #28
- docs: readme by @whynowy in #29
- docs: core conceps by @whynowy in #30
- feat: load serverinfo when broker starts by @whynowy in #31
- feat: add readiness and live probe to the agent container by @whynowy in #32
- feat: honor user provided readiness and liveness config parameters by @whynowy in #33
- ci: enable dependent bot by @whynowy in #34
- chore(deps): bump actions/cache from 4 to 5 by @dependabot[bot] in #35
- chore(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #36
- chore(deps): bump imjasonh/setup-crane from 0.5 to 0.6 by @dependabot[bot] in #41
- chore(deps): bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #39
- chore(deps): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #38
- chore(deps): bump golang.org/x/net from 0.49.0 to 0.55.0 by @dependabot[bot] in #37
- chore(deps): bump go.uber.org/zap from 1.27.1 to 1.28.0 by @dependabot[bot] in #42
- chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.1 by @dependabot[bot] in #43
- chore(deps): bump golang.org/x/tools from 0.44.0 to 0.45.0 by @dependabot[bot] in #44
- chore(deps): bump sigs.k8s.io/controller-tools from 0.20.1 to 0.21.0 by @dependabot[bot] in #40
- ci: fix node and cache warnings by @whynowy in #45
- refactor: mv probe pkg and more logs by @whynowy in #46
- feat: honor imagePullPolicy configed in the controler env by @whynowy in #47
- feat: enable optional pprof env by @whynowy in #48
- chore(deps): bump actions/upload-artifact from 5 to 7 by @dependabot[bot] in #51
- chore(deps): bump docker/setup-buildx-action from 2 to 4 by @dependabot[bot] in #52
- chore(deps): bump google.golang.org/grpc/cmd/protoc-gen-go-grpc from 1.6.1 to 1.6.2 by @dependabot[bot] in #53
- chore(deps): bump github.com/go-swagger/go-swagger from 0.34.0 to 0.34.1 by @dependabot[bot] in #54
- chore(deps): bump github.com/grpc-ecosystem/grpc-gateway/v2 from 2.28.0 to 2.29.0 by @dependabot[bot] in #55
- feat: add publicBaseURL to agent config by @whynowy in #56
- fix: topology file not readable to the broker by @whynowy in #57
- fix: permission issue for release by @whynowy in #58
- fix: release script by @whynowy in #59
- chore: changelog script by @whynowy in #60
- chore: only checksum kynomesh binaries by @whynowy in #61
- feat: create anothe normal service for internal access by @whynowy in #62
- docs: installation doc by @whynowy in #63
- feat: introduce entry service for agentset by @whynowy in #64
- docs: updated CHANGELOG.md by @github-actions[bot] in #65
- fix: error in Makefile by @whynowy in #66
- fix: headless service exposes introspect port by @whynowy in #67
- fix: kubectl wait errors out without waiting due to race by @whynowy in #68
- docs: quick-start by @whynowy in #69
- chore(deps): bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #70
- chore(deps): bump golang.org/x/net from 0.55.0 to 0.56.0 by @dependabot[bot] in #71
- chore(deps): bump golang.org/x/tools from 0.45.0 to 0.46.0 by @dependabot[bot] in #72
- docs: build mkdocs by @whynowy in #73
- ci: set up gh page workflow by @whynowy in #74
- docs: publish multi-version docs by @whynowy in #75
- chore: action rename by @whynowy in #76
- chore: workflow naming by @whynowy in #77
- docs: updated CHANGELOG.md by @github-actions[bot] in #78
- chore: use dev instead of latest for the docs by @whynowy in #79
- fix(docs): dns for each agentdeploy by @whynowy in #80
- feat(daemon): add gRPC + REST proto for per-AgentSet metrics daemon by @whynowy in #81
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #83
- feat(daemon): implement per-AgentSet metrics daemon by @whynowy in #82
- feat: daemon service clients by @whynowy in #84
- feat: reconcile daemon deployment and service by @whynowy in #85
- refactor: split to multiple files for reconcilers by @whynowy in #86
- chore: remove finalizers by @whynowy in #87
- chore: agentset and agentdeploy name validation by @whynowy in #88
- feat: metrics for broker by @whynowy in #92
- feat: expose metric for stream messages by @whynowy in #93
- fix: SSE events flush immediately by @whynowy in #94
- chore(deps): bump imjasonh/setup-crane from 0.6 to 0.7 by @dependabot[bot] in #95
- chore(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in #96
- chore(deps): bump github.com/go-swagger/go-swagger from 0.34.1 to 0.35.0 by @dependabot[bot] in #97
- chore(deps): bump github.com/prometheus/common from 0.67.5 to 0.69.0 by @dependabot[bot] in #98
- chore(deps): bump golang.org/x/tools from 0.46.0 to 0.47.0 by @dependabot[bot] in #99
- feat: init commit for autoscaling by @whynowy in #118
- feat: autoscaling sampler and scaler by @whynowy in #119
- fix: populate lastScaleAt and use hash for sample history by @whynowy in #120
- feat: staleness guard for sampled data by @whynowy in #121
- feat: flush tracked metrics on termination by @whynowy in #122
- chore: correct cm labels and some log labels for autoscaling by @whynowy in #123
- feat: metrics for autoscaling by @whynowy in #124
- chore: close daemon clients which have no references by @whynowy in #125
- chore(deps): bump google.golang.org/grpc from 1.81.1 to 1.82.0 by @dependabot[bot] in #127
- feat: time-based confidence and adaptive sampling window by @whynowy in #128
- fix: dedup same-timestamp samples in sanitize by @whynowy in #129
- chore: Remove retired goreport card by @whynowy in #130
- chore(deps): bump github.com/prometheus/common from 0.69.0 to 0.70.0 by @dependabot[bot] in #131
- chore(deps): bump golang.org/x/tools from 0.47.0 to 0.48.0 by @dependabot[bot] in #132
- chore: refactor to make Decide pure math function by @whynowy in #134
- chore: update sampling cadence to 60s by @whynowy in #135
- test: start e2e test by @whynowy in #136
- feat: broker container probes by @whynowy in #141
- chore(deps): bump google.golang.org/grpc from 1.82.0 to 1.82.1 by @dependabot[bot] in #140
- chore(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #138
- chore(deps): bump actions/setup-go from 6 to 7 by @dependabot[bot] in #139
- test: test cases for sampler and autoscaler start loop by @whynowy in #142
- test: e2e test for scaling by @whynowy in #143
- fix: scale up/down follows same rules by @whynowy in #144
- chore(deps): bump github.com/prometheus/common from 0.70.0 to 0.70.1 by @dependabot[bot] in #149
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in #148
- chore(deps): bump github.com/go-swagger/go-swagger from 0.35.0 to 0.35.3 by @dependabot[bot] in #151
- chore(deps): bump github.com/prometheus/client_golang from 1.23.2 to 1.24.1 by @dependabot[bot] in #150
- chore(deps): bump github.com/a2aproject/a2a-go/v2 from 2.3.1 to 2.4.0 by @dependabot[bot] in #152
- chore: a2acli defaults to output text instead of json by @whynowy in #153
- feat: draining before termination by @whynowy in #158
- chore(deps): bump github.com/go-swagger/go-swagger from 0.35.3 to 0.36.1 by @dependabot[bot] in #154
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.0 by @dependabot[bot] in #156
- chore(deps): bump github.com/grpc-ecosystem/grpc-gateway/v2 from 2.29.0 to 2.30.0 by @dependabot[bot] in #155
- chore: retry lychee check transient failures by @whynowy in #160
- feat: pod termination grace period bugget by @whynowy in #161
- fix: flaky e2e test by @whynowy in #162
- feat: rate limit for brokers - part 1 by @whynowy in #163
- feat: broker rate limit part 2 by @whynowy in #164
- feat: incorporate rate limit with autoscaling by @whynowy in #166
- docs: rate limiting by @whynowy in #167
- fix(controller): pod replicas respect min/max by @whynowy in #169
- test(e2e): rate limiting by @whynowy in #168
Full Changelog: https://github.com/kynoproj/kynomesh/commits/v0.6.0