-
Notifications
You must be signed in to change notification settings - Fork 9
Description
(Copied from josephburnett/sk-plugin#1 when sk-plugin was moved to the skenario respository)
Now sk-plugin protocol provides 2 callback functions, 2 input and 1 output.
(input) Event--create, update and delete events for pods etc...
(input) Stat--periodic system stats such as CPU usage or request concurrency.
(output) Scale--a request for a recommended scale, given prior input callbacks.
We need to extend this protocol to support VPA. New protocol will look like:
(input) Event--create, update and delete events for pods etc...
(input) Stat--periodic system stats such as CPU usage or request concurrency.
(output) Scale_horizontally--a request for a recommended scale horizontally, given prior input callbacks.
(output) Scale_vertically--a request for a recommended scale vertically, given prior input callbacks.
Proto
syntax = "proto3";
package proto;
message Empty {}
message Autoscaler {
string type = 1;
string yaml = 2;
}
message Pod {
string name = 1;
string state = 2;
int64 last_transition = 3;
int32 cpu_request = 4;
}
enum EventType {
CREATE = 0;
UPDATE = 1;
DELETE = 2;
}
message EventRequest {
string partition = 1;
int64 time = 2;
EventType type = 3;
oneof object_oneof {
Autoscaler autoscaler = 4;
Pod pod = 5;
}
}
enum MetricType {
CPU_MILLIS = 0;
CONCURRENT_REQUESTS_MILLIS = 1;
}
message Stat {
int64 time = 1;
string pod_name = 2;
MetricType type = 3;
int32 value = 4;
}
message StatRequest {
string partition = 1;
repeated Stat stat = 2;
}
message VerticalSizeRequest{
string partition = 1;
int64 time_nanos = 2;
}
message VerticalSizeResponse{
repeated RecommendedPodResources rec = 1;
}
message RecommendedPodResources{
string pod_name = 1;
int32 lower_bound = 2;
int32 upper_bound = 3;
int32 target = 4;
string resource_name = 5;
int32 recommendation = 2;
}
message HorizontalSizeRequest{
string partition = 1;
int64 time_nanos = 2;
}
message HorizontalSizeResponse{
int32 rec = 1;
}
service Plugin {
rpc Event(EventRequest) returns (Empty);
rpc Stat(StatRequest) returns (Empty);
rpc HorizontalRecommendation(HorizontalSizeRequest) returns (HorizontalSizeResponse);
rpc VerticalRecommendation(VerticalSizeRequest) returns (VerticalSizeResponse);
}