Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
61ba80cb
Commit
61ba80cb
authored
Aug 24, 2018
by
yue9944882
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
externalize limitrange
parent
444373b4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
29 deletions
+43
-29
BUILD
plugin/pkg/admission/limitranger/BUILD
+11
-8
admission.go
plugin/pkg/admission/limitranger/admission.go
+0
-0
admission_test.go
plugin/pkg/admission/limitranger/admission_test.go
+28
-17
interfaces.go
plugin/pkg/admission/limitranger/interfaces.go
+4
-4
No files found.
plugin/pkg/admission/limitranger/BUILD
View file @
61ba80cb
...
...
@@ -15,10 +15,7 @@ go_library(
importpath = "k8s.io/kubernetes/plugin/pkg/admission/limitranger",
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/client/listers/core/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
...
...
@@ -26,6 +23,10 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
"//vendor/github.com/hashicorp/golang-lru:go_default_library",
],
)
...
...
@@ -36,16 +37,18 @@ go_test(
embed = [":go_default_library"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/apis/core/v1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
],
)
...
...
plugin/pkg/admission/limitranger/admission.go
View file @
61ba80cb
This diff is collapsed.
Click to expand it.
plugin/pkg/admission/limitranger/admission_test.go
View file @
61ba80cb
...
...
@@ -22,18 +22,20 @@ import (
"testing"
"time"
corev1
"k8s.io/api/core/v1"
apiequality
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/api/resource"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/admission"
genericadmissioninitializer
"k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/client-go/informers"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
kubeadmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
"k8s.io/kubernetes/pkg/apis/core/v1"
)
func
getComputeResourceList
(
cpu
,
memory
string
)
api
.
ResourceList
{
...
...
@@ -63,8 +65,8 @@ func getResourceRequirements(requests, limits api.ResourceList) api.ResourceRequ
}
// createLimitRange creates a limit range with the specified data
func
createLimitRange
(
limitType
api
.
LimitType
,
min
,
max
,
defaultLimit
,
defaultRequest
,
maxLimitRequestRatio
api
.
ResourceList
)
api
.
LimitRange
{
return
api
.
LimitRange
{
func
createLimitRange
(
limitType
api
.
LimitType
,
min
,
max
,
defaultLimit
,
defaultRequest
,
maxLimitRequestRatio
api
.
ResourceList
)
corev1
.
LimitRange
{
internalLimitRage
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Namespace
:
"test"
,
...
...
@@ -82,10 +84,13 @@ func createLimitRange(limitType api.LimitType, min, max, defaultLimit, defaultRe
},
},
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRage
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
func
validLimitRange
()
api
.
LimitRange
{
return
api
.
LimitRange
{
func
validLimitRange
()
corev1
.
LimitRange
{
internalLimitRange
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Namespace
:
"test"
,
...
...
@@ -107,10 +112,13 @@ func validLimitRange() api.LimitRange {
},
},
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRange
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
func
validLimitRangeNoDefaults
()
api
.
LimitRange
{
return
api
.
LimitRange
{
func
validLimitRangeNoDefaults
()
corev1
.
LimitRange
{
internalLimitRange
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Namespace
:
"test"
,
...
...
@@ -130,6 +138,9 @@ func validLimitRangeNoDefaults() api.LimitRange {
},
},
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRange
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
func
validPod
(
name
string
,
numContainers
int
,
resources
api
.
ResourceRequirements
)
api
.
Pod
{
...
...
@@ -255,7 +266,7 @@ func TestMergePodResourceRequirements(t *testing.T) {
func
TestPodLimitFunc
(
t
*
testing
.
T
)
{
type
testCase
struct
{
pod
api
.
Pod
limitRange
api
.
LimitRange
limitRange
corev1
.
LimitRange
}
successCases
:=
[]
testCase
{
...
...
@@ -686,7 +697,7 @@ func TestPodLimitFuncApplyDefault(t *testing.T) {
func
TestLimitRangerIgnoresSubresource
(
t
*
testing
.
T
)
{
limitRange
:=
validLimitRangeNoDefaults
()
mockClient
:=
newMockClientForTest
([]
api
.
LimitRange
{
limitRange
})
mockClient
:=
newMockClientForTest
([]
corev1
.
LimitRange
{
limitRange
})
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
...
...
@@ -712,7 +723,7 @@ func TestLimitRangerIgnoresSubresource(t *testing.T) {
func
TestLimitRangerAdmitPod
(
t
*
testing
.
T
)
{
limitRange
:=
validLimitRangeNoDefaults
()
mockClient
:=
newMockClientForTest
([]
api
.
LimitRange
{
limitRange
})
mockClient
:=
newMockClientForTest
([]
corev1
.
LimitRange
{
limitRange
})
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
...
...
@@ -745,10 +756,10 @@ func TestLimitRangerAdmitPod(t *testing.T) {
}
// newMockClientForTest creates a mock client that returns a client configured for the specified list of limit ranges
func
newMockClientForTest
(
limitRanges
[]
api
.
LimitRange
)
*
fake
.
Clientset
{
func
newMockClientForTest
(
limitRanges
[]
corev1
.
LimitRange
)
*
fake
.
Clientset
{
mockClient
:=
&
fake
.
Clientset
{}
mockClient
.
AddReactor
(
"list"
,
"limitranges"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
limitRangeList
:=
&
api
.
LimitRangeList
{
limitRangeList
:=
&
corev1
.
LimitRangeList
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
len
(
limitRanges
)),
},
...
...
@@ -769,7 +780,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
if
err
!=
nil
{
return
nil
,
f
,
err
}
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
@@ -788,7 +799,7 @@ func validPersistentVolumeClaim(name string, resources api.ResourceRequirements)
func
TestPersistentVolumeClaimLimitFunc
(
t
*
testing
.
T
)
{
type
testCase
struct
{
pvc
api
.
PersistentVolumeClaim
limitRange
api
.
LimitRange
limitRange
corev1
.
LimitRange
}
successCases
:=
[]
testCase
{
...
...
plugin/pkg/admission/limitranger/interfaces.go
View file @
61ba80cb
...
...
@@ -17,20 +17,20 @@ limitations under the License.
package
limitranger
import
(
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
api
"k8s.io/kubernetes/pkg/apis/core"
)
type
LimitRangerActions
interface
{
// MutateLimit is a pluggable function to set limits on the object.
MutateLimit
(
limitRange
*
api
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
MutateLimit
(
limitRange
*
corev1
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
// ValidateLimits is a pluggable function to enforce limits on the object.
ValidateLimit
(
limitRange
*
api
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
ValidateLimit
(
limitRange
*
corev1
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
// SupportsAttributes is a pluggable function to allow overridding what resources the limitranger
// supports.
SupportsAttributes
(
attr
admission
.
Attributes
)
bool
// SupportsLimit is a pluggable function to allow ignoring limits that should not be applied
// for any reason.
SupportsLimit
(
limitRange
*
api
.
LimitRange
)
bool
SupportsLimit
(
limitRange
*
corev1
.
LimitRange
)
bool
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment