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
// Find the list of namespaced resources via discovery that the namespace controller must manage
namespaceKubeClient
:=
client
(
"namespace-controller"
)
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
{
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
)
time
.
Sleep
(
wait
.
Jitter
(
s
.
ControllerStartInterval
.
Duration
,
ControllerStartJitter
))
...
...
pkg/controller/namespace/namespace_controller.go
View file @
ef6529bf
...
...
@@ -47,8 +47,8 @@ type NamespaceController struct {
controller
*
cache
.
Controller
// namespaces that have been queued up for processing by workers
queue
workqueue
.
RateLimitingInterface
// list of preferred group versions and their corresponding resource set for namespace deletion
groupVersionResources
[]
unversioned
.
GroupVersionResource
//
function to
list of preferred group versions and their corresponding resource set for namespace deletion
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
// opCache is a cache to remember if a particular operation is not supported to aid dynamic client.
opCache
*
operationNotSupportedCache
// finalizerToken is the finalizer token managed by this controller
...
...
@@ -59,7 +59,7 @@ type NamespaceController struct {
func
NewNamespaceController
(
kubeClient
clientset
.
Interface
,
clientPool
dynamic
.
ClientPool
,
groupVersionResources
[]
unversioned
.
GroupVersionResource
,
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
,
resyncPeriod
time
.
Duration
,
finalizerToken
api
.
FinalizerName
)
*
NamespaceController
{
...
...
@@ -86,9 +86,9 @@ func NewNamespaceController(
kubeClient
:
kubeClient
,
clientPool
:
clientPool
,
queue
:
workqueue
.
NewNamedRateLimitingQueue
(
workqueue
.
DefaultControllerRateLimiter
(),
"namespace"
),
groupVersionResources
:
groupVersionResources
,
opCache
:
opCache
,
finalizerToken
:
finalizerToken
,
groupVersionResources
Fn
:
groupVersionResourcesFn
,
opCache
:
opCache
,
finalizerToken
:
finalizerToken
,
}
if
kubeClient
!=
nil
&&
kubeClient
.
Core
()
.
RESTClient
()
.
GetRateLimiter
()
!=
nil
{
...
...
@@ -191,7 +191,7 @@ func (nm *NamespaceController) syncNamespaceFromKey(key string) (err error) {
return
err
}
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.
...
...
pkg/controller/namespace/namespace_controller_test.go
View file @
ef6529bf
...
...
@@ -129,6 +129,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
testNamespace
*
api
.
Namespace
kubeClientActionSet
sets
.
String
dynamicClientActionSet
sets
.
String
gvrError
error
}{
"pending-finalize"
:
{
testNamespace
:
testNamespacePendingFinalize
,
...
...
@@ -148,6 +149,15 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
),
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
{
...
...
@@ -158,7 +168,11 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, versions *unversioned.APIV
mockClient
:=
fake
.
NewSimpleClientset
(
testInput
.
testNamespace
)
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
{
t
.
Errorf
(
"scenario %s - Unexpected error when synching namespace %v"
,
scenario
,
err
)
}
...
...
@@ -227,7 +241,10 @@ func TestSyncNamespaceThatIsActive(t *testing.T) {
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
{
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(
kubeClient
clientset
.
Interface
,
clientPool
dynamic
.
ClientPool
,
opCache
*
operationNotSupportedCache
,
groupVersionResources
[]
unversioned
.
GroupVersionResource
,
groupVersionResources
Fn
func
()
([]
unversioned
.
GroupVersionResource
,
error
)
,
namespace
*
api
.
Namespace
,
finalizerToken
api
.
FinalizerName
,
)
error
{
...
...
@@ -422,6 +422,10 @@ func syncNamespace(
}
// 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
)
if
err
!=
nil
{
return
err
...
...
test/e2e_node/services/namespace_controller.go
View file @
ef6529bf
...
...
@@ -56,11 +56,8 @@ func (n *NamespaceController) Start() error {
return
err
}
clientPool
:=
dynamic
.
NewClientPool
(
config
,
registered
.
RESTMapper
(),
dynamic
.
LegacyAPIPathResolverFunc
)
resources
,
err
:=
client
.
Discovery
()
.
ServerPreferredNamespacedResources
()
if
err
!=
nil
{
return
err
}
nc
:=
namespacecontroller
.
NewNamespaceController
(
client
,
clientPool
,
resources
,
ncResyncPeriod
,
api
.
FinalizerKubernetes
)
gvrFn
:=
client
.
Discovery
()
.
ServerPreferredNamespacedResources
nc
:=
namespacecontroller
.
NewNamespaceController
(
client
,
clientPool
,
gvrFn
,
ncResyncPeriod
,
api
.
FinalizerKubernetes
)
go
nc
.
Run
(
ncConcurrency
,
n
.
stopCh
)
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