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
ef6529bf
Commit
ef6529bf
authored
Oct 31, 2016
by
Brendan Burns
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
make groupVersionResource listing dynamic when third party resources are
enabled.
parent
0042ce56
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
55 additions
and
18 deletions
+55
-18
controllermanager.go
cmd/kube-controller-manager/app/controllermanager.go
+22
-3
namespace_controller.go
pkg/controller/namespace/namespace_controller.go
+7
-7
namespace_controller_test.go
pkg/controller/namespace/namespace_controller_test.go
+19
-2
namespace_controller_utils.go
pkg/controller/namespace/namespace_controller_utils.go
+5
-1
namespace_controller.go
test/e2e_node/services/namespace_controller.go
+2
-5
No files found.
cmd/kube-controller-manager/app/controllermanager.go
View file @
ef6529bf
...
@@ -369,11 +369,30 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl
...
@@ -369,11 +369,30 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl
// Find the list of namespaced resources via discovery that the namespace controller must manage
// Find the list of namespaced resources via discovery that the namespace controller must manage
namespaceKubeClient
:=
client
(
"namespace-controller"
)
namespaceKubeClient
:=
client
(
"namespace-controller"
)
namespaceClientPool
:=
dynamic
.
NewClientPool
(
restclient
.
AddUserAgent
(
kubeconfig
,
"namespace-controller"
),
restMapper
,
dynamic
.
LegacyAPIPathResolverFunc
)
namespaceClientPool
:=
dynamic
.
NewClientPool
(
restclient
.
AddUserAgent
(
kubeconfig
,
"namespace-controller"
),
restMapper
,
dynamic
.
LegacyAPIPathResolverFunc
)
groupVersionResources
,
err
:=
namespaceKubeClient
.
Discovery
()
.
ServerPreferredNamespacedResources
()
// TODO: consider using a list-watch + cache here rather than polling
var
gvrFn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
rsrcs
,
err
:=
namespaceKubeClient
.
Discovery
()
.
ServerResources
()
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to get supported resources from server: %v"
,
err
)
glog
.
Fatalf
(
"Failed to get group version resources: %v"
,
err
)
}
for
_
,
rsrcList
:=
range
rsrcs
{
for
ix
:=
range
rsrcList
.
APIResources
{
rsrc
:=
&
rsrcList
.
APIResources
[
ix
]
if
rsrc
.
Kind
==
"ThirdPartyResource"
{
gvrFn
=
namespaceKubeClient
.
Discovery
()
.
ServerPreferredNamespacedResources
}
}
}
if
gvrFn
==
nil
{
gvr
,
err
:=
namespaceKubeClient
.
Discovery
()
.
ServerPreferredNamespacedResources
()
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to get resources: %v"
,
err
)
}
gvrFn
=
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
{
return
gvr
,
nil
}
}
}
namespaceController
:=
namespacecontroller
.
NewNamespaceController
(
namespaceKubeClient
,
namespaceClientPool
,
g
roupVersionResources
,
s
.
NamespaceSyncPeriod
.
Duration
,
api
.
FinalizerKubernetes
)
namespaceController
:=
namespacecontroller
.
NewNamespaceController
(
namespaceKubeClient
,
namespaceClientPool
,
g
vrFn
,
s
.
NamespaceSyncPeriod
.
Duration
,
api
.
FinalizerKubernetes
)
go
namespaceController
.
Run
(
int
(
s
.
ConcurrentNamespaceSyncs
),
wait
.
NeverStop
)
go
namespaceController
.
Run
(
int
(
s
.
ConcurrentNamespaceSyncs
),
wait
.
NeverStop
)
time
.
Sleep
(
wait
.
Jitter
(
s
.
ControllerStartInterval
.
Duration
,
ControllerStartJitter
))
time
.
Sleep
(
wait
.
Jitter
(
s
.
ControllerStartInterval
.
Duration
,
ControllerStartJitter
))
...
...
pkg/controller/namespace/namespace_controller.go
View file @
ef6529bf
...
@@ -47,8 +47,8 @@ type NamespaceController struct {
...
@@ -47,8 +47,8 @@ type NamespaceController struct {
controller
*
cache
.
Controller
controller
*
cache
.
Controller
// namespaces that have been queued up for processing by workers
// namespaces that have been queued up for processing by workers
queue
workqueue
.
RateLimitingInterface
queue
workqueue
.
RateLimitingInterface
// list of preferred group versions and their corresponding resource set for namespace deletion
//
function to
list of preferred group versions and their corresponding resource set for namespace deletion
groupVersionResources
[]
unversioned
.
GroupVersionResource
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
// opCache is a cache to remember if a particular operation is not supported to aid dynamic client.
// opCache is a cache to remember if a particular operation is not supported to aid dynamic client.
opCache
*
operationNotSupportedCache
opCache
*
operationNotSupportedCache
// finalizerToken is the finalizer token managed by this controller
// finalizerToken is the finalizer token managed by this controller
...
@@ -59,7 +59,7 @@ type NamespaceController struct {
...
@@ -59,7 +59,7 @@ type NamespaceController struct {
func
NewNamespaceController
(
func
NewNamespaceController
(
kubeClient
clientset
.
Interface
,
kubeClient
clientset
.
Interface
,
clientPool
dynamic
.
ClientPool
,
clientPool
dynamic
.
ClientPool
,
groupVersionResources
[]
unversioned
.
GroupVersionResource
,
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
,
resyncPeriod
time
.
Duration
,
resyncPeriod
time
.
Duration
,
finalizerToken
api
.
FinalizerName
)
*
NamespaceController
{
finalizerToken
api
.
FinalizerName
)
*
NamespaceController
{
...
@@ -86,9 +86,9 @@ func NewNamespaceController(
...
@@ -86,9 +86,9 @@ func NewNamespaceController(
kubeClient
:
kubeClient
,
kubeClient
:
kubeClient
,
clientPool
:
clientPool
,
clientPool
:
clientPool
,
queue
:
workqueue
.
NewNamedRateLimitingQueue
(
workqueue
.
DefaultControllerRateLimiter
(),
"namespace"
),
queue
:
workqueue
.
NewNamedRateLimitingQueue
(
workqueue
.
DefaultControllerRateLimiter
(),
"namespace"
),
groupVersionResources
:
groupVersionResources
,
groupVersionResources
Fn
:
groupVersionResourcesFn
,
opCache
:
opCache
,
opCache
:
opCache
,
finalizerToken
:
finalizerToken
,
finalizerToken
:
finalizerToken
,
}
}
if
kubeClient
!=
nil
&&
kubeClient
.
Core
()
.
RESTClient
()
.
GetRateLimiter
()
!=
nil
{
if
kubeClient
!=
nil
&&
kubeClient
.
Core
()
.
RESTClient
()
.
GetRateLimiter
()
!=
nil
{
...
@@ -191,7 +191,7 @@ func (nm *NamespaceController) syncNamespaceFromKey(key string) (err error) {
...
@@ -191,7 +191,7 @@ func (nm *NamespaceController) syncNamespaceFromKey(key string) (err error) {
return
err
return
err
}
}
namespace
:=
obj
.
(
*
api
.
Namespace
)
namespace
:=
obj
.
(
*
api
.
Namespace
)
return
syncNamespace
(
nm
.
kubeClient
,
nm
.
clientPool
,
nm
.
opCache
,
nm
.
groupVersionResources
,
namespace
,
nm
.
finalizerToken
)
return
syncNamespace
(
nm
.
kubeClient
,
nm
.
clientPool
,
nm
.
opCache
,
nm
.
groupVersionResources
Fn
,
namespace
,
nm
.
finalizerToken
)
}
}
// Run starts observing the system with the specified number of workers.
// Run starts observing the system with the specified number of workers.
...
...
pkg/controller/namespace/namespace_controller_test.go
View file @
ef6529bf
...
@@ -129,6 +129,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
...
@@ -129,6 +129,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
testNamespace
*
api
.
Namespace
testNamespace
*
api
.
Namespace
kubeClientActionSet
sets
.
String
kubeClientActionSet
sets
.
String
dynamicClientActionSet
sets
.
String
dynamicClientActionSet
sets
.
String
gvrError
error
}{
}{
"pending-finalize"
:
{
"pending-finalize"
:
{
testNamespace
:
testNamespacePendingFinalize
,
testNamespace
:
testNamespacePendingFinalize
,
...
@@ -148,6 +149,15 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
...
@@ -148,6 +149,15 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
),
),
dynamicClientActionSet
:
sets
.
NewString
(),
dynamicClientActionSet
:
sets
.
NewString
(),
},
},
"groupVersionResourceErr"
:
{
testNamespace
:
testNamespaceFinalizeComplete
,
kubeClientActionSet
:
sets
.
NewString
(
strings
.
Join
([]
string
{
"get"
,
"namespaces"
,
""
},
"-"
),
strings
.
Join
([]
string
{
"delete"
,
"namespaces"
,
""
},
"-"
),
),
dynamicClientActionSet
:
sets
.
NewString
(),
gvrError
:
fmt
.
Errorf
(
"test error"
),
},
}
}
for
scenario
,
testInput
:=
range
scenarios
{
for
scenario
,
testInput
:=
range
scenarios
{
...
@@ -158,7 +168,11 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
...
@@ -158,7 +168,11 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
mockClient
:=
fake
.
NewSimpleClientset
(
testInput
.
testNamespace
)
mockClient
:=
fake
.
NewSimpleClientset
(
testInput
.
testNamespace
)
clientPool
:=
dynamic
.
NewClientPool
(
clientConfig
,
registered
.
RESTMapper
(),
dynamic
.
LegacyAPIPathResolverFunc
)
clientPool
:=
dynamic
.
NewClientPool
(
clientConfig
,
registered
.
RESTMapper
(),
dynamic
.
LegacyAPIPathResolverFunc
)
err
:=
syncNamespace
(
mockClient
,
clientPool
,
&
operationNotSupportedCache
{
m
:
make
(
map
[
operationKey
]
bool
)},
groupVersionResources
,
testInput
.
testNamespace
,
api
.
FinalizerKubernetes
)
fn
:=
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
{
return
groupVersionResources
,
nil
}
err
:=
syncNamespace
(
mockClient
,
clientPool
,
&
operationNotSupportedCache
{
m
:
make
(
map
[
operationKey
]
bool
)},
fn
,
testInput
.
testNamespace
,
api
.
FinalizerKubernetes
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"scenario %s - Unexpected error when synching namespace %v"
,
scenario
,
err
)
t
.
Errorf
(
"scenario %s - Unexpected error when synching namespace %v"
,
scenario
,
err
)
}
}
...
@@ -227,7 +241,10 @@ func TestSyncNamespaceThatIsActive(t *testing.T) {
...
@@ -227,7 +241,10 @@ func TestSyncNamespaceThatIsActive(t *testing.T) {
Phase
:
api
.
NamespaceActive
,
Phase
:
api
.
NamespaceActive
,
},
},
}
}
err
:=
syncNamespace
(
mockClient
,
nil
,
&
operationNotSupportedCache
{
m
:
make
(
map
[
operationKey
]
bool
)},
testGroupVersionResources
(),
testNamespace
,
api
.
FinalizerKubernetes
)
fn
:=
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
{
return
testGroupVersionResources
(),
nil
}
err
:=
syncNamespace
(
mockClient
,
nil
,
&
operationNotSupportedCache
{
m
:
make
(
map
[
operationKey
]
bool
)},
fn
,
testNamespace
,
api
.
FinalizerKubernetes
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Unexpected error when synching namespace %v"
,
err
)
t
.
Errorf
(
"Unexpected error when synching namespace %v"
,
err
)
}
}
...
...
pkg/controller/namespace/namespace_controller_utils.go
View file @
ef6529bf
...
@@ -371,7 +371,7 @@ func syncNamespace(
...
@@ -371,7 +371,7 @@ func syncNamespace(
kubeClient
clientset
.
Interface
,
kubeClient
clientset
.
Interface
,
clientPool
dynamic
.
ClientPool
,
clientPool
dynamic
.
ClientPool
,
opCache
*
operationNotSupportedCache
,
opCache
*
operationNotSupportedCache
,
groupVersionResources
[]
unversioned
.
GroupVersionResource
,
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
,
namespace
*
api
.
Namespace
,
namespace
*
api
.
Namespace
,
finalizerToken
api
.
FinalizerName
,
finalizerToken
api
.
FinalizerName
,
)
error
{
)
error
{
...
@@ -422,6 +422,10 @@ func syncNamespace(
...
@@ -422,6 +422,10 @@ func syncNamespace(
}
}
// there may still be content for us to remove
// there may still be content for us to remove
groupVersionResources
,
err
:=
groupVersionResourcesFn
()
if
err
!=
nil
{
return
err
}
estimate
,
err
:=
deleteAllContent
(
kubeClient
,
clientPool
,
opCache
,
groupVersionResources
,
namespace
.
Name
,
*
namespace
.
DeletionTimestamp
)
estimate
,
err
:=
deleteAllContent
(
kubeClient
,
clientPool
,
opCache
,
groupVersionResources
,
namespace
.
Name
,
*
namespace
.
DeletionTimestamp
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
...
test/e2e_node/services/namespace_controller.go
View file @
ef6529bf
...
@@ -56,11 +56,8 @@ func (n *NamespaceController) Start() error {
...
@@ -56,11 +56,8 @@ func (n *NamespaceController) Start() error {
return
err
return
err
}
}
clientPool
:=
dynamic
.
NewClientPool
(
config
,
registered
.
RESTMapper
(),
dynamic
.
LegacyAPIPathResolverFunc
)
clientPool
:=
dynamic
.
NewClientPool
(
config
,
registered
.
RESTMapper
(),
dynamic
.
LegacyAPIPathResolverFunc
)
resources
,
err
:=
client
.
Discovery
()
.
ServerPreferredNamespacedResources
()
gvrFn
:=
client
.
Discovery
()
.
ServerPreferredNamespacedResources
if
err
!=
nil
{
nc
:=
namespacecontroller
.
NewNamespaceController
(
client
,
clientPool
,
gvrFn
,
ncResyncPeriod
,
api
.
FinalizerKubernetes
)
return
err
}
nc
:=
namespacecontroller
.
NewNamespaceController
(
client
,
clientPool
,
resources
,
ncResyncPeriod
,
api
.
FinalizerKubernetes
)
go
nc
.
Run
(
ncConcurrency
,
n
.
stopCh
)
go
nc
.
Run
(
ncConcurrency
,
n
.
stopCh
)
return
nil
return
nil
}
}
...
...
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