Hiya 👋, As Kubernetes operators, we love Kubernetes autoscaling, resource control, and scheduling capabilities, but ran into issues with how to autoscale, how to set resources, and how to ensure performance in the most cost effective way. So, we built Valence as a tool to help with that. Here's a little more about what Valence is and how it works.
What: Valence is a cost and performance management solution for Kubernetes. It’s an operator that figures out replicas, limits, requests, and quality of service for the most cost-efficient and performant way of running your applications in Kubernetes. Operators use Valence by declaring their performance in Service Level Objective manifests and it is Valence's job to go figure out the best way to run, resource, and auto-scale the app based on those Service Level Objectives.
apiVersion: optimizer.valence.io/v1alpha1 kind: ServiceLevelObjective metadata: name: slo-webapps spec: selector: slo: slo-webapps objectives: - type: HTTP http: latency: percentile: 95 responseTime: 500ms
Why: Kubernetes, as a platform, is agnostic to how you resource your applications, how they perform, and how much they cost. As an operator in Kubernetes it is your job to figure out the quality of service for your application, figure out the optimal resources, limits, replicas (or optimal autoscaling config/metrics/threshold) and continually update those as your code changes. It is also your job to figure out how those relate to your cost within Kubernetes and the resulting performance from those resources.
How: Valence is built on control theory. Valence models application behavior by learning the dynamics of how applications consume resources as related to 1) their workloads (ie. HTTP requests in the case of HTTP applications) and 2) their controls (ie. what happens when I change replicas or CPU limits). Once we model applications we can learn the optimal tradeoff between efficiency resourcing and performance. On top of this, Valence utilizes time series analysis to learn to forecast workloads in order to make better decisions about when to change resources in order to continually meet service level objectives.
What about the k8s autoscalers: Isn't this what the autoscalers (will) do? Sure this is, in-part, what the autoscalers in Kubernetes accomplish. There are two fundamental differences though that make Valence and the notion of declarative performance interesting for us to pursue:
Why would I use it? There are several use cases that we'd like to begin publishing here on our blog but generally they lump into three categories:
How can I use it?
It has everything you need to get Valence up and running for unlimited deployments!
If you have any feedback we’d love to hear it! You can email us at feedback @ firstname.lastname@example.org.