mirror of
https://github.com/rancher/rke.git
synced 2025-04-27 11:21:08 +00:00
86 lines
3.4 KiB
Go
86 lines
3.4 KiB
Go
/*
|
|
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 types
|
|
|
|
import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
// LimitType is the type of the limit (e.g., per-namespace)
|
|
type LimitType string
|
|
|
|
const (
|
|
// ServerLimitType is a type of limit where there is one bucket shared by
|
|
// all of the event queries received by the API Server.
|
|
ServerLimitType LimitType = "Server"
|
|
// NamespaceLimitType is a type of limit where there is one bucket used by
|
|
// each namespace
|
|
NamespaceLimitType LimitType = "Namespace"
|
|
// UserLimitType is a type of limit where there is one bucket used by each
|
|
// user
|
|
UserLimitType LimitType = "User"
|
|
// SourceAndObjectLimitType is a type of limit where there is one bucket used
|
|
// by each combination of source and involved object of the event.
|
|
SourceAndObjectLimitType LimitType = "SourceAndObject"
|
|
)
|
|
|
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
|
|
// Configuration provides configuration for the EventRateLimit admission
|
|
// controller.
|
|
type Configuration struct {
|
|
metav1.TypeMeta `json:",inline"`
|
|
|
|
// limits are the limits to place on event queries received.
|
|
// Limits can be placed on events received server-wide, per namespace,
|
|
// per user, and per source+object.
|
|
// At least one limit is required.
|
|
Limits []Limit `json:"limits"`
|
|
}
|
|
|
|
// Limit is the configuration for a particular limit type
|
|
type Limit struct {
|
|
// type is the type of limit to which this configuration applies
|
|
Type LimitType `json:"type"`
|
|
|
|
// qps is the number of event queries per second that are allowed for this
|
|
// type of limit. The qps and burst fields are used together to determine if
|
|
// a particular event query is accepted. The qps determines how many queries
|
|
// are accepted once the burst amount of queries has been exhausted.
|
|
QPS int32 `json:"qps"`
|
|
|
|
// burst is the burst number of event queries that are allowed for this type
|
|
// of limit. The qps and burst fields are used together to determine if a
|
|
// particular event query is accepted. The burst determines the maximum size
|
|
// of the allowance granted for a particular bucket. For example, if the burst
|
|
// is 10 and the qps is 3, then the admission control will accept 10 queries
|
|
// before blocking any queries. Every second, 3 more queries will be allowed.
|
|
// If some of that allowance is not used, then it will roll over to the next
|
|
// second, until the maximum allowance of 10 is reached.
|
|
Burst int32 `json:"burst"`
|
|
|
|
// cacheSize is the size of the LRU cache for this type of limit. If a bucket
|
|
// is evicted from the cache, then the allowance for that bucket is reset. If
|
|
// more queries are later received for an evicted bucket, then that bucket
|
|
// will re-enter the cache with a clean slate, giving that bucket a full
|
|
// allowance of burst queries.
|
|
//
|
|
// The default cache size is 4096.
|
|
//
|
|
// If limitType is 'server', then cacheSize is ignored.
|
|
// +optional
|
|
CacheSize int32 `json:"cacheSize,omitempty"`
|
|
}
|