...
1
2
3
4
19
20 package nodeipam
21
22 import (
23 "context"
24 "fmt"
25 "net"
26
27 coreinformers "k8s.io/client-go/informers/core/v1"
28 clientset "k8s.io/client-go/kubernetes"
29 cloudprovider "k8s.io/cloud-provider"
30 "k8s.io/klog/v2"
31
32 "k8s.io/kubernetes/pkg/controller/nodeipam/ipam"
33 nodesync "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/sync"
34 )
35
36 func createLegacyIPAM(
37 ctx context.Context,
38 ic *Controller,
39 nodeInformer coreinformers.NodeInformer,
40 cloud cloudprovider.Interface,
41 kubeClient clientset.Interface,
42 clusterCIDRs []*net.IPNet,
43 serviceCIDR *net.IPNet,
44 nodeCIDRMaskSizes []int,
45 ) (*ipam.Controller, error) {
46 cfg := &ipam.Config{
47 Resync: ipamResyncInterval,
48 MaxBackoff: ipamMaxBackoff,
49 InitialRetry: ipamInitialBackoff,
50 }
51 switch ic.allocatorType {
52 case ipam.IPAMFromClusterAllocatorType:
53 cfg.Mode = nodesync.SyncFromCluster
54 case ipam.IPAMFromCloudAllocatorType:
55 cfg.Mode = nodesync.SyncFromCloud
56 }
57
58
59 var cidr *net.IPNet
60 if len(clusterCIDRs) > 0 {
61 cidr = clusterCIDRs[0]
62 }
63 logger := klog.FromContext(ctx)
64 if len(clusterCIDRs) > 1 {
65 logger.Info("Multiple cidrs were configured with FromCluster or FromCloud. cidrs except first one were discarded")
66 }
67 ipamc, err := ipam.NewController(ctx, cfg, kubeClient, cloud, cidr, serviceCIDR, nodeCIDRMaskSizes[0])
68 if err != nil {
69 return nil, fmt.Errorf("error creating ipam controller: %w", err)
70 }
71 if err := ipamc.Start(logger, nodeInformer); err != nil {
72 return nil, fmt.Errorf("error trying to Init(): %w", err)
73 }
74 return ipamc, nil
75 }
76
View as plain text