github.com/kubewharf/katalyst-core@v0.5.3/pkg/config/agent/eviction/eviciton_base.go (about)

     1  /*
     2  Copyright 2022 The Katalyst Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package eviction
    18  
    19  import (
    20  	"time"
    21  
    22  	"k8s.io/apimachinery/pkg/util/sets"
    23  )
    24  
    25  type GenericEvictionConfiguration struct {
    26  	// Inner plugins is the list of plugins implemented in katalyst to enable or disable
    27  	// '*' means "all enabled by default"
    28  	// 'foo' means "enable 'foo'"
    29  	// '-foo' means "disable 'foo'"
    30  	// first item for a particular name wins
    31  	InnerPlugins []string
    32  
    33  	// ConditionTransitionPeriod is duration the eviction manager has to wait before transitioning out of a condition.
    34  	ConditionTransitionPeriod time.Duration
    35  
    36  	// EvictionManagerSyncPeriod is the interval duration that eviction manager fetches information from registered plugins
    37  	EvictionManagerSyncPeriod time.Duration
    38  
    39  	// those two variables are used to filter out eviction-free pods
    40  	EvictionSkippedAnnotationKeys sets.String
    41  	EvictionSkippedLabelKeys      sets.String
    42  
    43  	// EvictionBurst limit the burst eviction counts
    44  	EvictionBurst int
    45  
    46  	// PodKiller specify the pod killer implementation
    47  	PodKiller string
    48  
    49  	// StrictAuthentication means whether to authenticate plugins strictly
    50  	StrictAuthentication bool
    51  
    52  	// PodMetricLabels defines the pod labels to be added in metric selector lists
    53  	PodMetricLabels sets.String
    54  }
    55  
    56  type EvictionConfiguration struct {
    57  	*ReclaimedResourcesEvictionConfiguration
    58  	*MemoryPressureEvictionConfiguration
    59  	*CPUPressureEvictionConfiguration
    60  }
    61  
    62  func NewGenericEvictionConfiguration() *GenericEvictionConfiguration {
    63  	return &GenericEvictionConfiguration{
    64  		EvictionSkippedAnnotationKeys: sets.NewString(),
    65  		EvictionSkippedLabelKeys:      sets.NewString(),
    66  		PodMetricLabels:               sets.NewString(),
    67  	}
    68  }
    69  
    70  func NewEvictionConfiguration() *EvictionConfiguration {
    71  	return &EvictionConfiguration{
    72  		ReclaimedResourcesEvictionConfiguration: NewReclaimedResourcesEvictionConfiguration(),
    73  		MemoryPressureEvictionConfiguration:     NewMemoryPressureEvictionPluginConfiguration(),
    74  		CPUPressureEvictionConfiguration:        NewCPUPressureEvictionConfiguration(),
    75  	}
    76  }