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
2794cf53
Commit
2794cf53
authored
Jul 20, 2016
by
Wojciech Tyczynski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use sharedPodInformer in ReplicaSet controller
parent
976ca09d
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
44 deletions
+60
-44
controllermanager.go
cmd/kube-controller-manager/app/controllermanager.go
+1
-1
controllermanager.go
contrib/mesos/pkg/controllermanager/controllermanager.go
+1
-1
replica_set.go
pkg/controller/replicaset/replica_set.go
+39
-24
replica_set_test.go
pkg/controller/replicaset/replica_set_test.go
+19
-18
No files found.
cmd/kube-controller-manager/app/controllermanager.go
View file @
2794cf53
...
...
@@ -366,7 +366,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
if
containsResource
(
resources
,
"replicasets"
)
{
glog
.
Infof
(
"Starting ReplicaSet controller"
)
go
replicaset
.
NewReplicaSetController
(
clientset
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
kubeconfig
,
"replicaset-controller"
)),
ResyncPeriod
(
s
),
replicaset
.
BurstReplicas
,
int
(
s
.
LookupCacheSizeForRS
))
.
go
replicaset
.
NewReplicaSetController
(
podInformer
,
clientset
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
kubeconfig
,
"replicaset-controller"
)),
ResyncPeriod
(
s
),
replicaset
.
BurstReplicas
,
int
(
s
.
LookupCacheSizeForRS
))
.
Run
(
int
(
s
.
ConcurrentRSSyncs
),
wait
.
NeverStop
)
time
.
Sleep
(
wait
.
Jitter
(
s
.
ControllerStartInterval
.
Duration
,
ControllerStartJitter
))
}
...
...
contrib/mesos/pkg/controllermanager/controllermanager.go
View file @
2794cf53
...
...
@@ -268,7 +268,7 @@ func (s *CMServer) Run(_ []string) error {
if
containsResource
(
resources
,
"replicasets"
)
{
glog
.
Infof
(
"Starting ReplicaSet controller"
)
go
replicaset
.
NewReplicaSetController
(
clientset
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
kubeconfig
,
"replicaset-controller"
)),
s
.
resyncPeriod
,
replicaset
.
BurstReplicas
,
int
(
s
.
LookupCacheSizeForRS
))
.
go
replicaset
.
NewReplicaSetController
FromClient
(
clientset
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
kubeconfig
,
"replicaset-controller"
)),
s
.
resyncPeriod
,
replicaset
.
BurstReplicas
,
int
(
s
.
LookupCacheSizeForRS
))
.
Run
(
int
(
s
.
ConcurrentRSSyncs
),
wait
.
NeverStop
)
}
}
...
...
pkg/controller/replicaset/replica_set.go
View file @
2794cf53
...
...
@@ -35,6 +35,7 @@ import (
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller/framework"
"k8s.io/kubernetes/pkg/controller/framework/informers"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/metrics"
...
...
@@ -68,6 +69,13 @@ type ReplicaSetController struct {
kubeClient
clientset
.
Interface
podControl
controller
.
PodControlInterface
// internalPodInformer is used to hold a personal informer. If we're using
// a normal shared informer, then the informer will be started for us. If
// we have a personal informer, we must start it ourselves. If you start
// the controller using NewReplicationManager(passing SharedInformer), this
// will be null
internalPodInformer
framework
.
SharedIndexInformer
// A ReplicaSet is temporarily suspended after creating/deleting these many replicas.
// It resumes normal action after observing the watch events for them.
burstReplicas
int
...
...
@@ -84,7 +92,7 @@ type ReplicaSetController struct {
// A store of pods, populated by the podController
podStore
cache
.
StoreToPodLister
// Watches changes to all pods
podController
*
framework
.
Controller
podController
framework
.
ControllerInterface
// podStoreSynced returns true if the pod store has been synced at least once.
// Added as a member to the struct to allow injection for testing.
podStoreSynced
func
()
bool
...
...
@@ -96,11 +104,18 @@ type ReplicaSetController struct {
}
// NewReplicaSetController creates a new ReplicaSetController.
func
NewReplicaSetController
(
kubeClient
clientset
.
Interface
,
resyncPeriod
controller
.
ResyncPeriodFunc
,
burstReplicas
int
,
lookupCacheSize
int
)
*
ReplicaSetController
{
func
NewReplicaSetController
(
podInformer
framework
.
SharedIndexInformer
,
kubeClient
clientset
.
Interface
,
resyncPeriod
controller
.
ResyncPeriodFunc
,
burstReplicas
int
,
lookupCacheSize
int
)
*
ReplicaSetController
{
eventBroadcaster
:=
record
.
NewBroadcaster
()
eventBroadcaster
.
StartLogging
(
glog
.
Infof
)
eventBroadcaster
.
StartRecordingToSink
(
&
unversionedcore
.
EventSinkImpl
{
Interface
:
kubeClient
.
Core
()
.
Events
(
""
)})
return
newReplicaSetController
(
eventBroadcaster
.
NewRecorder
(
api
.
EventSource
{
Component
:
"replicaset-controller"
}),
podInformer
,
kubeClient
,
resyncPeriod
,
burstReplicas
,
lookupCacheSize
)
}
// newReplicaSetController configures a replica set controller with the specified event recorder
func
newReplicaSetController
(
eventRecorder
record
.
EventRecorder
,
podInformer
framework
.
SharedIndexInformer
,
kubeClient
clientset
.
Interface
,
resyncPeriod
controller
.
ResyncPeriodFunc
,
burstReplicas
int
,
lookupCacheSize
int
)
*
ReplicaSetController
{
if
kubeClient
!=
nil
&&
kubeClient
.
Core
()
.
GetRESTClient
()
.
GetRateLimiter
()
!=
nil
{
metrics
.
RegisterMetricAndTrackRateLimiterUsage
(
"replicaset_controller"
,
kubeClient
.
Core
()
.
GetRESTClient
()
.
GetRateLimiter
())
}
...
...
@@ -109,7 +124,7 @@ func NewReplicaSetController(kubeClient clientset.Interface, resyncPeriod contro
kubeClient
:
kubeClient
,
podControl
:
controller
.
RealPodControl
{
KubeClient
:
kubeClient
,
Recorder
:
event
Broadcaster
.
NewRecorder
(
api
.
EventSource
{
Component
:
"replicaset-controller"
})
,
Recorder
:
event
Recorder
,
},
burstReplicas
:
burstReplicas
,
expectations
:
controller
.
NewUIDTrackingControllerExpectations
(
controller
.
NewControllerExpectations
()),
...
...
@@ -173,27 +188,16 @@ func NewReplicaSetController(kubeClient clientset.Interface, resyncPeriod contro
},
)
rsc
.
podStore
.
Indexer
,
rsc
.
podController
=
framework
.
NewIndexerInformer
(
&
cache
.
ListWatch
{
ListFunc
:
func
(
options
api
.
ListOptions
)
(
runtime
.
Object
,
error
)
{
return
rsc
.
kubeClient
.
Core
()
.
Pods
(
api
.
NamespaceAll
)
.
List
(
options
)
},
WatchFunc
:
func
(
options
api
.
ListOptions
)
(
watch
.
Interface
,
error
)
{
return
rsc
.
kubeClient
.
Core
()
.
Pods
(
api
.
NamespaceAll
)
.
Watch
(
options
)
},
},
&
api
.
Pod
{},
resyncPeriod
(),
framework
.
ResourceEventHandlerFuncs
{
AddFunc
:
rsc
.
addPod
,
// This invokes the ReplicaSet for every pod change, eg: host assignment. Though this might seem like
// overkill the most frequent pod update is status, and the associated ReplicaSet will only list from
// local storage, so it should be ok.
UpdateFunc
:
rsc
.
updatePod
,
DeleteFunc
:
rsc
.
deletePod
,
},
cache
.
Indexers
{
cache
.
NamespaceIndex
:
cache
.
MetaNamespaceIndexFunc
},
)
podInformer
.
AddEventHandler
(
framework
.
ResourceEventHandlerFuncs
{
AddFunc
:
rsc
.
addPod
,
// This invokes the ReplicaSet for every pod change, eg: host assignment. Though this might seem like
// overkill the most frequent pod update is status, and the associated ReplicaSet will only list from
// local storage, so it should be ok.
UpdateFunc
:
rsc
.
updatePod
,
DeleteFunc
:
rsc
.
deletePod
,
})
rsc
.
podStore
.
Indexer
=
podInformer
.
GetIndexer
()
rsc
.
podController
=
podInformer
.
GetController
()
rsc
.
syncHandler
=
rsc
.
syncReplicaSet
rsc
.
podStoreSynced
=
rsc
.
podController
.
HasSynced
...
...
@@ -201,6 +205,14 @@ func NewReplicaSetController(kubeClient clientset.Interface, resyncPeriod contro
return
rsc
}
// NewReplicationManagerFromClient creates a new ReplicationManager that runs its own informer.
func
NewReplicaSetControllerFromClient
(
kubeClient
clientset
.
Interface
,
resyncPeriod
controller
.
ResyncPeriodFunc
,
burstReplicas
int
,
lookupCacheSize
int
)
*
ReplicaSetController
{
podInformer
:=
informers
.
CreateSharedPodIndexInformer
(
kubeClient
,
resyncPeriod
())
rsc
:=
NewReplicaSetController
(
podInformer
,
kubeClient
,
resyncPeriod
,
burstReplicas
,
lookupCacheSize
)
rsc
.
internalPodInformer
=
podInformer
return
rsc
}
// SetEventRecorder replaces the event recorder used by the ReplicaSetController
// with the given recorder. Only used for testing.
func
(
rsc
*
ReplicaSetController
)
SetEventRecorder
(
recorder
record
.
EventRecorder
)
{
...
...
@@ -217,6 +229,9 @@ func (rsc *ReplicaSetController) Run(workers int, stopCh <-chan struct{}) {
for
i
:=
0
;
i
<
workers
;
i
++
{
go
wait
.
Until
(
rsc
.
worker
,
time
.
Second
,
stopCh
)
}
if
rsc
.
internalPodInformer
!=
nil
{
go
rsc
.
internalPodInformer
.
Run
(
stopCh
)
}
<-
stopCh
glog
.
Infof
(
"Shutting down ReplicaSet Controller"
)
rsc
.
queue
.
ShutDown
()
...
...
pkg/controller/replicaset/replica_set_test.go
View file @
2794cf53
This diff is collapsed.
Click to expand it.
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