mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 18:31:15 +00:00
Separate example func and add README.md
This commit is contained in:
parent
edc5b58e23
commit
498fa39af2
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 (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -40,10 +39,7 @@ import (
|
|||||||
"k8s.io/component-base/logs"
|
"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/clientgo" // load all the prometheus client-go plugins
|
||||||
_ "k8s.io/component-base/metrics/prometheus/version" // for version metric registration
|
_ "k8s.io/component-base/metrics/prometheus/version" // for version metric registration
|
||||||
genericcontrollermanager "k8s.io/controller-manager/app"
|
|
||||||
"k8s.io/klog/v2"
|
"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.
|
// For existing cloud providers, the option to import legacy providers is still available.
|
||||||
// e.g. _"k8s.io/legacy-cloud-providers/<provider>"
|
// e.g. _"k8s.io/legacy-cloud-providers/<provider>"
|
||||||
)
|
)
|
||||||
@ -115,19 +111,3 @@ func cloudInitializer(config *cloudcontrollerconfig.CompletedConfig) cloudprovid
|
|||||||
|
|
||||||
return cloud
|
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 (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
cloudprovider "k8s.io/cloud-provider"
|
cloudprovider "k8s.io/cloud-provider"
|
||||||
|
"k8s.io/cloud-provider/app"
|
||||||
cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
|
cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
|
||||||
genericcontrollermanager "k8s.io/controller-manager/app"
|
genericcontrollermanager "k8s.io/controller-manager/app"
|
||||||
"k8s.io/controller-manager/pkg/features"
|
"k8s.io/controller-manager/pkg/features"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
nodeipamcontrolleroptions "k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
|
||||||
nodeipamcontroller "k8s.io/kubernetes/pkg/controller/nodeipam"
|
nodeipamcontroller "k8s.io/kubernetes/pkg/controller/nodeipam"
|
||||||
nodeipamconfig "k8s.io/kubernetes/pkg/controller/nodeipam/config"
|
nodeipamconfig "k8s.io/kubernetes/pkg/controller/nodeipam/config"
|
||||||
"k8s.io/kubernetes/pkg/controller/nodeipam/ipam"
|
"k8s.io/kubernetes/pkg/controller/nodeipam/ipam"
|
||||||
@ -45,6 +49,22 @@ const (
|
|||||||
defaultNodeMaskCIDRIPv6 = 64
|
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) {
|
func startNodeIpamController(ccmConfig *cloudcontrollerconfig.CompletedConfig, nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration, ctx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (http.Handler, bool, error) {
|
||||||
var serviceCIDR *net.IPNet
|
var serviceCIDR *net.IPNet
|
||||||
var secondaryServiceCIDR *net.IPNet
|
var secondaryServiceCIDR *net.IPNet
|
||||||
|
@ -4,9 +4,9 @@ This directory provides sample code about how all cloud providers should leverag
|
|||||||
|
|
||||||
## Purpose
|
## 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>`
|
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.
|
2. Create `main.go` file under your external repo CCM directory. Please refer to `basic_main.go` for a minimum working sample.
|
||||||
|
Loading…
Reference in New Issue
Block a user