Commit 3f1d7669 authored by andrewsykim's avatar andrewsykim

renable nodeipam in kube-controller-manager

parent c29aa3d2
...@@ -326,9 +326,9 @@ func NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc ...@@ -326,9 +326,9 @@ func NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc
controllers["ttl"] = startTTLController controllers["ttl"] = startTTLController
controllers["bootstrapsigner"] = startBootstrapSignerController controllers["bootstrapsigner"] = startBootstrapSignerController
controllers["tokencleaner"] = startTokenCleanerController controllers["tokencleaner"] = startTokenCleanerController
controllers["nodeipam"] = startNodeIpamController
if loopMode == IncludeCloudLoops { if loopMode == IncludeCloudLoops {
controllers["service"] = startServiceController controllers["service"] = startServiceController
controllers["nodeipam"] = startNodeIpamController
controllers["route"] = startRouteController controllers["route"] = startRouteController
// TODO: volume controller into the IncludeCloudLoops only set. // TODO: volume controller into the IncludeCloudLoops only set.
// TODO: Separate cluster in cloud check from node lifecycle controller. // TODO: Separate cluster in cloud check from node lifecycle controller.
......
...@@ -82,20 +82,23 @@ func startServiceController(ctx ControllerContext) (bool, error) { ...@@ -82,20 +82,23 @@ func startServiceController(ctx ControllerContext) (bool, error) {
func startNodeIpamController(ctx ControllerContext) (bool, error) { func startNodeIpamController(ctx ControllerContext) (bool, error) {
var clusterCIDR *net.IPNet = nil var clusterCIDR *net.IPNet = nil
var serviceCIDR *net.IPNet = nil var serviceCIDR *net.IPNet = nil
if ctx.ComponentConfig.AllocateNodeCIDRs {
var err error if !ctx.ComponentConfig.AllocateNodeCIDRs {
if len(strings.TrimSpace(ctx.ComponentConfig.ClusterCIDR)) != 0 { return false, nil
_, clusterCIDR, err = net.ParseCIDR(ctx.ComponentConfig.ClusterCIDR) }
if err != nil {
glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", ctx.ComponentConfig.ClusterCIDR, err) var err error
} if len(strings.TrimSpace(ctx.ComponentConfig.ClusterCIDR)) != 0 {
_, clusterCIDR, err = net.ParseCIDR(ctx.ComponentConfig.ClusterCIDR)
if err != nil {
glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", ctx.ComponentConfig.ClusterCIDR, err)
} }
}
if len(strings.TrimSpace(ctx.ComponentConfig.ServiceCIDR)) != 0 { if len(strings.TrimSpace(ctx.ComponentConfig.ServiceCIDR)) != 0 {
_, serviceCIDR, err = net.ParseCIDR(ctx.ComponentConfig.ServiceCIDR) _, serviceCIDR, err = net.ParseCIDR(ctx.ComponentConfig.ServiceCIDR)
if err != nil { if err != nil {
glog.Warningf("Unsuccessful parsing of service CIDR %v: %v", ctx.ComponentConfig.ServiceCIDR, err) glog.Warningf("Unsuccessful parsing of service CIDR %v: %v", ctx.ComponentConfig.ServiceCIDR, err)
}
} }
} }
...@@ -106,7 +109,6 @@ func startNodeIpamController(ctx ControllerContext) (bool, error) { ...@@ -106,7 +109,6 @@ func startNodeIpamController(ctx ControllerContext) (bool, error) {
clusterCIDR, clusterCIDR,
serviceCIDR, serviceCIDR,
int(ctx.ComponentConfig.NodeCIDRMaskSize), int(ctx.ComponentConfig.NodeCIDRMaskSize),
ctx.ComponentConfig.AllocateNodeCIDRs,
ipam.CIDRAllocatorType(ctx.ComponentConfig.CIDRAllocatorType), ipam.CIDRAllocatorType(ctx.ComponentConfig.CIDRAllocatorType),
) )
if err != nil { if err != nil {
......
...@@ -58,8 +58,7 @@ const ( ...@@ -58,8 +58,7 @@ const (
// Controller is the controller that manages node ipam state. // Controller is the controller that manages node ipam state.
type Controller struct { type Controller struct {
allocateNodeCIDRs bool allocatorType ipam.CIDRAllocatorType
allocatorType ipam.CIDRAllocatorType
cloud cloudprovider.Interface cloud cloudprovider.Interface
clusterCIDR *net.IPNet clusterCIDR *net.IPNet
...@@ -88,7 +87,6 @@ func NewNodeIpamController( ...@@ -88,7 +87,6 @@ func NewNodeIpamController(
clusterCIDR *net.IPNet, clusterCIDR *net.IPNet,
serviceCIDR *net.IPNet, serviceCIDR *net.IPNet,
nodeCIDRMaskSize int, nodeCIDRMaskSize int,
allocateNodeCIDRs bool,
allocatorType ipam.CIDRAllocatorType) (*Controller, error) { allocatorType ipam.CIDRAllocatorType) (*Controller, error) {
if kubeClient == nil { if kubeClient == nil {
...@@ -108,54 +106,49 @@ func NewNodeIpamController( ...@@ -108,54 +106,49 @@ func NewNodeIpamController(
metrics.RegisterMetricAndTrackRateLimiterUsage("node_ipam_controller", kubeClient.CoreV1().RESTClient().GetRateLimiter()) metrics.RegisterMetricAndTrackRateLimiterUsage("node_ipam_controller", kubeClient.CoreV1().RESTClient().GetRateLimiter())
} }
if allocateNodeCIDRs { if clusterCIDR == nil {
if clusterCIDR == nil { glog.Fatal("Controller: Must specify --cluster-cidr if --allocate-node-cidrs is set")
glog.Fatal("Controller: Must specify clusterCIDR if allocateNodeCIDRs == true.") }
} mask := clusterCIDR.Mask
mask := clusterCIDR.Mask if maskSize, _ := mask.Size(); maskSize > nodeCIDRMaskSize {
if maskSize, _ := mask.Size(); maskSize > nodeCIDRMaskSize { glog.Fatal("Controller: Invalid --cluster-cidr, mask size of cluster CIDR must be less than --node-cidr-mask-size")
glog.Fatal("Controller: Invalid clusterCIDR, mask size of clusterCIDR must be less than nodeCIDRMaskSize.")
}
} }
ic := &Controller{ ic := &Controller{
cloud: cloud, cloud: cloud,
kubeClient: kubeClient, kubeClient: kubeClient,
lookupIP: net.LookupIP, lookupIP: net.LookupIP,
clusterCIDR: clusterCIDR, clusterCIDR: clusterCIDR,
serviceCIDR: serviceCIDR, serviceCIDR: serviceCIDR,
allocateNodeCIDRs: allocateNodeCIDRs, allocatorType: allocatorType,
allocatorType: allocatorType,
} }
// TODO: Abstract this check into a generic controller manager should run method. // TODO: Abstract this check into a generic controller manager should run method.
if ic.allocateNodeCIDRs { if ic.allocatorType == ipam.IPAMFromClusterAllocatorType || ic.allocatorType == ipam.IPAMFromCloudAllocatorType {
if ic.allocatorType == ipam.IPAMFromClusterAllocatorType || ic.allocatorType == ipam.IPAMFromCloudAllocatorType { cfg := &ipam.Config{
cfg := &ipam.Config{ Resync: ipamResyncInterval,
Resync: ipamResyncInterval, MaxBackoff: ipamMaxBackoff,
MaxBackoff: ipamMaxBackoff, InitialRetry: ipamInitialBackoff,
InitialRetry: ipamInitialBackoff, }
} switch ic.allocatorType {
switch ic.allocatorType { case ipam.IPAMFromClusterAllocatorType:
case ipam.IPAMFromClusterAllocatorType: cfg.Mode = nodesync.SyncFromCluster
cfg.Mode = nodesync.SyncFromCluster case ipam.IPAMFromCloudAllocatorType:
case ipam.IPAMFromCloudAllocatorType: cfg.Mode = nodesync.SyncFromCloud
cfg.Mode = nodesync.SyncFromCloud }
} ipamc, err := ipam.NewController(cfg, kubeClient, cloud, clusterCIDR, serviceCIDR, nodeCIDRMaskSize)
ipamc, err := ipam.NewController(cfg, kubeClient, cloud, clusterCIDR, serviceCIDR, nodeCIDRMaskSize) if err != nil {
if err != nil { glog.Fatalf("Error creating ipam controller: %v", err)
glog.Fatalf("Error creating ipam controller: %v", err) }
} if err := ipamc.Start(nodeInformer); err != nil {
if err := ipamc.Start(nodeInformer); err != nil { glog.Fatalf("Error trying to Init(): %v", err)
glog.Fatalf("Error trying to Init(): %v", err) }
} } else {
} else { var err error
var err error ic.cidrAllocator, err = ipam.New(
ic.cidrAllocator, err = ipam.New( kubeClient, cloud, nodeInformer, ic.allocatorType, ic.clusterCIDR, ic.serviceCIDR, nodeCIDRMaskSize)
kubeClient, cloud, nodeInformer, ic.allocatorType, ic.clusterCIDR, ic.serviceCIDR, nodeCIDRMaskSize) if err != nil {
if err != nil { return nil, err
return nil, err
}
} }
} }
...@@ -176,11 +169,8 @@ func (nc *Controller) Run(stopCh <-chan struct{}) { ...@@ -176,11 +169,8 @@ func (nc *Controller) Run(stopCh <-chan struct{}) {
return return
} }
// TODO: Abstract this check into a generic controller manager should run method. if nc.allocatorType != ipam.IPAMFromClusterAllocatorType && nc.allocatorType != ipam.IPAMFromCloudAllocatorType {
if nc.allocateNodeCIDRs { go nc.cidrAllocator.Run(stopCh)
if nc.allocatorType != ipam.IPAMFromClusterAllocatorType && nc.allocatorType != ipam.IPAMFromCloudAllocatorType {
go nc.cidrAllocator.Run(stopCh)
}
} }
<-stopCh <-stopCh
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment