Skip to content

Extend plugin to support VPA #98

@josephburnett

Description

@josephburnett

(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);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions