...
1
16
17
18
19
20
21
22
23
24
25 package main
26
27 import (
28 "os"
29
30 "k8s.io/apimachinery/pkg/util/wait"
31 cloudprovider "k8s.io/cloud-provider"
32 "k8s.io/cloud-provider/app"
33 cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
34 "k8s.io/cloud-provider/names"
35 "k8s.io/cloud-provider/options"
36 "k8s.io/component-base/cli"
37 cliflag "k8s.io/component-base/cli/flag"
38 _ "k8s.io/component-base/metrics/prometheus/clientgo"
39 _ "k8s.io/component-base/metrics/prometheus/version"
40 "k8s.io/klog/v2"
41 kcmnames "k8s.io/kubernetes/cmd/kube-controller-manager/names"
42
43
44 )
45
46 func main() {
47 ccmOptions, err := options.NewCloudControllerManagerOptions()
48 if err != nil {
49 klog.Fatalf("unable to initialize command options: %v", err)
50 }
51
52 controllerInitializers := app.DefaultInitFuncConstructors
53 controllerAliases := names.CCMControllerAliases()
54
55
56
57
58
59
60
61
62 nodeIpamController := nodeIPAMController{}
63 nodeIpamController.nodeIPAMControllerOptions.NodeIPAMControllerConfiguration = &nodeIpamController.nodeIPAMControllerConfiguration
64 fss := cliflag.NamedFlagSets{}
65 nodeIpamController.nodeIPAMControllerOptions.AddFlags(fss.FlagSet(kcmnames.NodeIpamController))
66
67 controllerInitializers[kcmnames.NodeIpamController] = app.ControllerInitFuncConstructor{
68
69
70 InitContext: app.ControllerInitContext{
71 ClientName: "node-controller",
72 },
73 Constructor: nodeIpamController.StartNodeIpamControllerWrapper,
74 }
75 controllerAliases["nodeipam"] = kcmnames.NodeIpamController
76
77 command := app.NewCloudControllerManagerCommand(ccmOptions, cloudInitializer, controllerInitializers, controllerAliases, fss, wait.NeverStop)
78 code := cli.Run(command)
79 os.Exit(code)
80 }
81
82 func cloudInitializer(config *cloudcontrollerconfig.CompletedConfig) cloudprovider.Interface {
83 cloudConfig := config.ComponentConfig.KubeCloudShared.CloudProvider
84
85 cloud, err := cloudprovider.InitCloudProvider(cloudConfig.Name, cloudConfig.CloudConfigFile)
86 if err != nil {
87 klog.Fatalf("Cloud provider could not be initialized: %v", err)
88 }
89 if cloud == nil {
90 klog.Fatalf("Cloud provider is nil")
91 }
92
93 if !cloud.HasClusterID() {
94 if config.ComponentConfig.KubeCloudShared.AllowUntaggedCloud {
95 klog.Warning("detected a cluster without a ClusterID. A ClusterID will be required in the future. Please tag your cluster to avoid any future issues")
96 } else {
97 klog.Fatalf("no ClusterID found. A ClusterID is required for the cloud provider to function properly. This check can be bypassed by setting the allow-untagged-cloud option")
98 }
99 }
100
101 return cloud
102 }
103
View as plain text