mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Separate example func and add README.md
This commit is contained in:
		
							
								
								
									
										14
									
								
								cmd/cloud-controller-manager/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								cmd/cloud-controller-manager/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
# cloud-controller-manager/example
 | 
			
		||||
 | 
			
		||||
This directory provides an example of how to leverage CCM extension mechanism.
 | 
			
		||||
 | 
			
		||||
## Purpose
 | 
			
		||||
 | 
			
		||||
Begin with 1.20, all cloud providers should not copy over or vendor in `k8s.io/kubernetes/cmd/cloud-controller-manager`. Inside this directory, an example is included to demonstrate how to leverage CCM extension mechanism to add a controller.
 | 
			
		||||
Please refer to `k8s.io/cloud-provider/sample` if you do not have the requirement of adding/deleting controllers in CCM.
 | 
			
		||||
 | 
			
		||||
## Things you should NOT do
 | 
			
		||||
 | 
			
		||||
1. Vendor in `k8s.io/cmd/cloud-controller-manager`.
 | 
			
		||||
2. Directly modify anything under `k8s.io/cmd/cloud-controller-manager` in this repo. 
 | 
			
		||||
3. Make specific cloud provider changes here.
 | 
			
		||||
@@ -26,7 +26,6 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
@@ -40,10 +39,7 @@ import (
 | 
			
		||||
	"k8s.io/component-base/logs"
 | 
			
		||||
	_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugins
 | 
			
		||||
	_ "k8s.io/component-base/metrics/prometheus/version"  // for version metric registration
 | 
			
		||||
	genericcontrollermanager "k8s.io/controller-manager/app"
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	nodeipamcontrolleroptions "k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
 | 
			
		||||
	nodeipamconfig "k8s.io/kubernetes/pkg/controller/nodeipam/config"
 | 
			
		||||
	// For existing cloud providers, the option to import legacy providers is still available.
 | 
			
		||||
	// e.g. _"k8s.io/legacy-cloud-providers/<provider>"
 | 
			
		||||
)
 | 
			
		||||
@@ -115,19 +111,3 @@ func cloudInitializer(config *cloudcontrollerconfig.CompletedConfig) cloudprovid
 | 
			
		||||
 | 
			
		||||
	return cloud
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func startNodeIpamControllerWrapper(completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
 | 
			
		||||
	fs := pflag.NewFlagSet("fs", pflag.ContinueOnError)
 | 
			
		||||
	var nodeIPAMControllerOptions nodeipamcontrolleroptions.NodeIPAMControllerOptions
 | 
			
		||||
	nodeIPAMControllerOptions.AddFlags(fs)
 | 
			
		||||
	errors := nodeIPAMControllerOptions.Validate()
 | 
			
		||||
	if len(errors) > 0 {
 | 
			
		||||
		klog.Fatal("NodeIPAM controller values are not properly.")
 | 
			
		||||
	}
 | 
			
		||||
	var nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration
 | 
			
		||||
	nodeIPAMControllerOptions.ApplyTo(&nodeIPAMConfig)
 | 
			
		||||
 | 
			
		||||
	return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) {
 | 
			
		||||
		return startNodeIpamController(completedConfig, nodeIPAMConfig, ctx, cloud)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,16 +22,20 @@ package main
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/cloud-provider/app"
 | 
			
		||||
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
 | 
			
		||||
	genericcontrollermanager "k8s.io/controller-manager/app"
 | 
			
		||||
	"k8s.io/controller-manager/pkg/features"
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	nodeipamcontrolleroptions "k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
 | 
			
		||||
	nodeipamcontroller "k8s.io/kubernetes/pkg/controller/nodeipam"
 | 
			
		||||
	nodeipamconfig "k8s.io/kubernetes/pkg/controller/nodeipam/config"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller/nodeipam/ipam"
 | 
			
		||||
@@ -45,6 +49,22 @@ const (
 | 
			
		||||
	defaultNodeMaskCIDRIPv6 = 64
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func startNodeIpamControllerWrapper(completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
 | 
			
		||||
	fs := pflag.NewFlagSet("fs", pflag.ContinueOnError)
 | 
			
		||||
	var nodeIPAMControllerOptions nodeipamcontrolleroptions.NodeIPAMControllerOptions
 | 
			
		||||
	nodeIPAMControllerOptions.AddFlags(fs)
 | 
			
		||||
	errors := nodeIPAMControllerOptions.Validate()
 | 
			
		||||
	if len(errors) > 0 {
 | 
			
		||||
		klog.Fatal("NodeIPAM controller values are not properly.")
 | 
			
		||||
	}
 | 
			
		||||
	var nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration
 | 
			
		||||
	nodeIPAMControllerOptions.ApplyTo(&nodeIPAMConfig)
 | 
			
		||||
 | 
			
		||||
	return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) {
 | 
			
		||||
		return startNodeIpamController(completedConfig, nodeIPAMConfig, ctx, cloud)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func startNodeIpamController(ccmConfig *cloudcontrollerconfig.CompletedConfig, nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration, ctx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (http.Handler, bool, error) {
 | 
			
		||||
	var serviceCIDR *net.IPNet
 | 
			
		||||
	var secondaryServiceCIDR *net.IPNet
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,9 @@ This directory provides sample code about how all cloud providers should leverag
 | 
			
		||||
 | 
			
		||||
## Purpose
 | 
			
		||||
 | 
			
		||||
Begin with 1.20, all cloud providers should not copy over or vender in `k8s.io/kubernetes/cmd/cloud-controller-manager`. Inside this directory, some sample code will be provided to demonstrate how cloud providers should leverage cloud-controller-manager. 
 | 
			
		||||
Begin with 1.20, all cloud providers should not copy over or vendor in `k8s.io/kubernetes/cmd/cloud-controller-manager`. Inside this directory, some sample code will be provided to demonstrate how cloud providers should leverage cloud-controller-manager. 
 | 
			
		||||
 | 
			
		||||
## Steps cloud providers shoud follow
 | 
			
		||||
## Steps cloud providers should follow
 | 
			
		||||
 | 
			
		||||
1. Have your external repo under k8s.io. e.g. `k8s.io/cloud-provider-<provider>`
 | 
			
		||||
2. Create `main.go` file under your external repo CCM directory. Please refer to `basic_main.go` for a minimum working sample.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user