apimock removed.
This commit is contained in:
parent
7271220b10
commit
e379feecc3
|
|
@ -1,180 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Package apimock contains temporary definitions of Vertical Pod Autoscaler related objects - to be replaced with real implementation
|
||||
// Definitions based on VPA design doc : https://github.com/kubernetes/community/pull/338
|
||||
package apimock
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
apiv1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
)
|
||||
|
||||
// VerticalPodAutoscaler Represents Vertical Pod Autoscaler configuration - to be replaced by real implementation
|
||||
type VerticalPodAutoscaler struct {
|
||||
// Specification
|
||||
Spec Spec
|
||||
// Current state of VPA
|
||||
Status Status
|
||||
}
|
||||
|
||||
// Spec holds Vertical Pod Autoscaler configuration
|
||||
type Spec struct {
|
||||
// Defines which pods this Autoscaler should watch and update
|
||||
Target Target
|
||||
// Policy for pod updates
|
||||
UpdatePolicy UpdatePolicy
|
||||
// Policy for container resources updates
|
||||
ResourcesPolicy ResourcesPolicy
|
||||
}
|
||||
|
||||
// Status holds current Vertical Pod Autoscaler state
|
||||
type Status struct {
|
||||
// Recommended resources allocation
|
||||
Recommendation *Recommendation
|
||||
}
|
||||
|
||||
// Target Specifies pods to be managed by Vertical Pod Autoscaler
|
||||
type Target struct {
|
||||
// label query over pods. The string will be in the same format as the query-param syntax.
|
||||
// More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
|
||||
// +optional
|
||||
Selector string `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"`
|
||||
}
|
||||
|
||||
// UpdatePolicy defines policy for Pod updates
|
||||
type UpdatePolicy struct {
|
||||
// Mode for update policy
|
||||
Mode Mode
|
||||
}
|
||||
|
||||
// Mode of update policy
|
||||
type Mode struct {
|
||||
}
|
||||
|
||||
// ResourcesPolicy represents Resources allocation policy
|
||||
type ResourcesPolicy struct {
|
||||
// Resources allocation policy for containers
|
||||
Containers []ContainerPolicy
|
||||
}
|
||||
|
||||
// Recommendation represents resources allocation recommended by Vertical Pod Autoscaler
|
||||
type Recommendation struct {
|
||||
// Recommended resources allocation for containers
|
||||
Containers []ContainerRecommendation
|
||||
}
|
||||
|
||||
// ContainerPolicy hold resources allocation policy for single container
|
||||
type ContainerPolicy struct {
|
||||
// Name of the container
|
||||
Name string
|
||||
// Memory allocation policy
|
||||
ResourcePolicy map[apiv1.ResourceName]Policy
|
||||
}
|
||||
|
||||
// Policy holds resource allocation policy
|
||||
type Policy struct {
|
||||
// Minimal resource quantity
|
||||
Min resource.Quantity
|
||||
// Maximal resource quantity
|
||||
Max resource.Quantity
|
||||
}
|
||||
|
||||
// ContainerRecommendation holds resource allocation recommendation for container
|
||||
type ContainerRecommendation struct {
|
||||
// Name of the container
|
||||
Name string
|
||||
// Resources allocation recommended
|
||||
Resources map[apiv1.ResourceName]resource.Quantity
|
||||
}
|
||||
|
||||
// VerticalPodAutoscalerLister provides list of all configured Vertical Pod Autoscalers
|
||||
type VerticalPodAutoscalerLister interface {
|
||||
// List returns all configured Vertical Pod Autoscalers
|
||||
List() (ret []*VerticalPodAutoscaler, err error)
|
||||
}
|
||||
|
||||
type vpaLister struct{}
|
||||
|
||||
// List Mock implementation of Vertical Pod Autoscaler Lister - to be replaced with real implementation
|
||||
func (lister *vpaLister) List() (ret []*VerticalPodAutoscaler, err error) {
|
||||
return []*VerticalPodAutoscaler{fake()}, nil
|
||||
}
|
||||
|
||||
// NewVpaLister returns mock VerticalPodAutoscalerLister - to be replaced with real implementation
|
||||
func NewVpaLister(_ interface{}) VerticalPodAutoscalerLister {
|
||||
return &vpaLister{}
|
||||
}
|
||||
|
||||
// RecommenderAPI defines api returning Vertical Pod Autoscaler recommendations for pods
|
||||
type RecommenderAPI interface {
|
||||
// GetRecommendation returns Vertical Pod Autoscaler recommendation for given pod
|
||||
GetRecommendation(spec *apiv1.PodSpec) (*Recommendation, error)
|
||||
}
|
||||
|
||||
type recommenderAPIImpl struct {
|
||||
}
|
||||
|
||||
// NewRecommenderAPI return mock RecommenderAPI - to be replaced with real implementation
|
||||
func NewRecommenderAPI() RecommenderAPI {
|
||||
return &recommenderAPIImpl{}
|
||||
}
|
||||
|
||||
// GetRecommendation Returns random recommendation of resources increase / decrease by 0 - 100 %
|
||||
// To be replaced with real implementation of recommender request
|
||||
func (rec *recommenderAPIImpl) GetRecommendation(spec *apiv1.PodSpec) (*Recommendation, error) {
|
||||
rand.Seed(time.Now().UTC().UnixNano())
|
||||
result := make([]ContainerRecommendation, len(spec.Containers))
|
||||
for i, podContainer := range spec.Containers {
|
||||
|
||||
// scale memory and cpu by random factor [0, 2]
|
||||
|
||||
diffFactor := 2 * rand.Float64()
|
||||
memory := podContainer.Resources.Requests.Memory().DeepCopy()
|
||||
memory.Set(int64(float64(memory.Value()) * diffFactor))
|
||||
|
||||
diffFactor = 2 * rand.Float64()
|
||||
cpu := podContainer.Resources.Requests.Cpu().DeepCopy()
|
||||
cpu.Set(int64(float64(cpu.Value()) * diffFactor))
|
||||
|
||||
result[i] = ContainerRecommendation{
|
||||
Name: podContainer.Name,
|
||||
Resources: map[apiv1.ResourceName]resource.Quantity{
|
||||
apiv1.ResourceCPU: cpu, apiv1.ResourceMemory: memory}}
|
||||
}
|
||||
return &Recommendation{Containers: result}, nil
|
||||
}
|
||||
|
||||
func fake() *VerticalPodAutoscaler {
|
||||
minCpu, _ := resource.ParseQuantity("1")
|
||||
maxCpu, _ := resource.ParseQuantity("4")
|
||||
minMem, _ := resource.ParseQuantity("10M")
|
||||
maxMem, _ := resource.ParseQuantity("5G")
|
||||
return &VerticalPodAutoscaler{
|
||||
Spec: Spec{
|
||||
Target: Target{Selector: "app = redis"},
|
||||
UpdatePolicy: UpdatePolicy{Mode: Mode{}},
|
||||
ResourcesPolicy: ResourcesPolicy{Containers: []ContainerPolicy{{
|
||||
Name: "slave",
|
||||
ResourcePolicy: map[apiv1.ResourceName]Policy{
|
||||
apiv1.ResourceCPU: {minCpu, maxCpu},
|
||||
apiv1.ResourceMemory: {minMem, maxMem}},
|
||||
}}}},
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue