sanitize names and add more comments, and other essential boilerplate changes

This commit is contained in:
wlan0 2016-12-17 09:27:48 -08:00
parent 1e48fd18cb
commit 75da310757
12 changed files with 44 additions and 69 deletions

View File

@ -5,9 +5,6 @@ licenses(["notice"])
load( load(
"@io_bazel_rules_go//go:def.bzl", "@io_bazel_rules_go//go:def.bzl",
"go_binary", "go_binary",
"go_library",
"go_test",
"cgo_library",
) )
go_binary( go_binary(

View File

@ -4,10 +4,7 @@ licenses(["notice"])
load( load(
"@io_bazel_rules_go//go:def.bzl", "@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library", "go_library",
"go_test",
"cgo_library",
) )
go_library( go_library(
@ -17,8 +14,8 @@ go_library(
deps = [ deps = [
"//cmd/cloud-controller-manager/app/options:go_default_library", "//cmd/cloud-controller-manager/app/options:go_default_library",
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/release_1_5:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/release_1_5/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library",
"//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection:go_default_library",
"//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library",
"//pkg/client/record:go_default_library", "//pkg/client/record:go_default_library",

View File

@ -14,12 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
// Package app implements a server that runs a set of active
// components. This includes replication controllers, service endpoints and
// nodes.
//
// CAUTION: If you update code in this file, you may need to also update code
// in contrib/mesos/pkg/controllermanager/controllermanager.go
package app package app
import ( import (
@ -33,8 +27,8 @@ import (
"k8s.io/kubernetes/cmd/cloud-controller-manager/app/options" "k8s.io/kubernetes/cmd/cloud-controller-manager/app/options"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
v1core "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/core/v1" v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1"
"k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection"
"k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
@ -61,20 +55,14 @@ const (
ControllerStartJitter = 1.0 ControllerStartJitter = 1.0
) )
// NewControllerManagerCommand creates a *cobra.Command object with default parameters // NewCloudControllerManagerCommand creates a *cobra.Command object with default parameters
func NewControllerManagerCommand() *cobra.Command { func NewCloudControllerManagerCommand() *cobra.Command {
s := options.NewExternalCMServer() s := options.NewCloudControllerManagerServer()
s.AddFlags(pflag.CommandLine) s.AddFlags(pflag.CommandLine)
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "cloud-controller-manager", Use: "cloud-controller-manager",
Long: `The Kubernetes controller manager is a daemon that embeds Long: `The Cloud controller manager is a daemon that embeds
the core control loops shipped with Kubernetes. In applications of robotics and the cloud specific control loops shipped with Kubernetes.`,
automation, a control loop is a non-terminating loop that regulates the state of
the system. In Kubernetes, a controller is a control loop that watches the shared
state of the cluster through the apiserver and makes changes attempting to move the
current state towards the desired state. Examples of controllers that ship with
Kubernetes today are the replication controller, endpoints controller, namespace
controller, and serviceaccounts controller.`,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
}, },
} }
@ -82,7 +70,8 @@ controller, and serviceaccounts controller.`,
return cmd return cmd
} }
func ResyncPeriod(s *options.ExternalCMServer) func() time.Duration { // ResyncPeriod computes the time interval a shared informer waits before resyncing with the api server
func ResyncPeriod(s *options.CloudControllerManagerServer) func() time.Duration {
return func() time.Duration { return func() time.Duration {
factor := rand.Float64() + 1 factor := rand.Float64() + 1
return time.Duration(float64(s.MinResyncPeriod.Nanoseconds()) * factor) return time.Duration(float64(s.MinResyncPeriod.Nanoseconds()) * factor)
@ -90,7 +79,7 @@ func ResyncPeriod(s *options.ExternalCMServer) func() time.Duration {
} }
// Run runs the ExternalCMServer. This should never exit. // Run runs the ExternalCMServer. This should never exit.
func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error { func Run(s *options.CloudControllerManagerServer, cloud cloudprovider.Interface) error {
if c, err := configz.New("componentconfig"); err == nil { if c, err := configz.New("componentconfig"); err == nil {
c.Set(s.KubeControllerManagerConfiguration) c.Set(s.KubeControllerManagerConfiguration)
} else { } else {
@ -101,6 +90,7 @@ func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error {
return err return err
} }
// Set the ContentType of the requests from kube client
kubeconfig.ContentConfig.ContentType = s.ContentType kubeconfig.ContentConfig.ContentType = s.ContentType
// Override kubeconfig qps/burst settings from flags // Override kubeconfig qps/burst settings from flags
kubeconfig.QPS = s.KubeAPIQPS kubeconfig.QPS = s.KubeAPIQPS
@ -111,6 +101,7 @@ func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error {
} }
leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election")) leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election"))
// Start the external controller manager server
go func() { go func() {
mux := http.NewServeMux() mux := http.NewServeMux()
healthz.InstallHandler(mux) healthz.InstallHandler(mux)
@ -159,12 +150,13 @@ func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error {
panic("unreachable") panic("unreachable")
} }
// Identity used to distinguish between multiple cloud controller manager instances
id, err := os.Hostname() id, err := os.Hostname()
if err != nil { if err != nil {
return err return err
} }
// TODO: enable other lock types // Lock required for leader election
rl := resourcelock.EndpointsLock{ rl := resourcelock.EndpointsLock{
EndpointsMeta: v1.ObjectMeta{ EndpointsMeta: v1.ObjectMeta{
Namespace: "kube-system", Namespace: "kube-system",
@ -177,6 +169,7 @@ func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error {
}, },
} }
// Try and become the leader and start cloud controller manager loops
leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{ leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{
Lock: &rl, Lock: &rl,
LeaseDuration: s.LeaderElection.LeaseDuration.Duration, LeaseDuration: s.LeaderElection.LeaseDuration.Duration,
@ -192,7 +185,9 @@ func Run(s *options.ExternalCMServer, cloud cloudprovider.Interface) error {
panic("unreachable") panic("unreachable")
} }
func StartControllers(s *options.ExternalCMServer, kubeconfig *restclient.Config, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}, recorder record.EventRecorder, cloud cloudprovider.Interface) error { // StartControllers starts the cloud specific controller loops.
func StartControllers(s *options.CloudControllerManagerServer, kubeconfig *restclient.Config, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}, recorder record.EventRecorder, cloud cloudprovider.Interface) error {
// Function to build the kube client object
client := func(serviceAccountName string) clientset.Interface { client := func(serviceAccountName string) clientset.Interface {
return rootClientBuilder.ClientOrDie(serviceAccountName) return rootClientBuilder.ClientOrDie(serviceAccountName)
} }
@ -203,6 +198,7 @@ func StartControllers(s *options.ExternalCMServer, kubeconfig *restclient.Config
glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", s.ClusterCIDR, err) glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", s.ClusterCIDR, err)
} }
// Start the CloudNodeController
nodeController, err := nodecontroller.NewCloudNodeController( nodeController, err := nodecontroller.NewCloudNodeController(
sharedInformers.Nodes(), sharedInformers.Nodes(),
client("cloud-node-controller"), cloud, client("cloud-node-controller"), cloud,
@ -213,6 +209,7 @@ func StartControllers(s *options.ExternalCMServer, kubeconfig *restclient.Config
nodeController.Run() nodeController.Run()
time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
// Start the service controller
serviceController, err := servicecontroller.New(cloud, client("service-controller"), s.ClusterName) serviceController, err := servicecontroller.New(cloud, client("service-controller"), s.ClusterName)
if err != nil { if err != nil {
glog.Errorf("Failed to start service controller: %v", err) glog.Errorf("Failed to start service controller: %v", err)
@ -221,6 +218,7 @@ func StartControllers(s *options.ExternalCMServer, kubeconfig *restclient.Config
} }
time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
// If CIDRs should be allocated for pods and set on the CloudProvider, then start the route controller
if s.AllocateNodeCIDRs && s.ConfigureCloudRoutes { if s.AllocateNodeCIDRs && s.ConfigureCloudRoutes {
if routes, ok := cloud.Routes(); !ok { if routes, ok := cloud.Routes(); !ok {
glog.Warning("configure-cloud-routes is set, but cloud provider does not support routes. Will not configure cloud provider routes.") glog.Warning("configure-cloud-routes is set, but cloud provider does not support routes. Will not configure cloud provider routes.")

View File

@ -4,10 +4,7 @@ licenses(["notice"])
load( load(
"@io_bazel_rules_go//go:def.bzl", "@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library", "go_library",
"go_test",
"cgo_library",
) )
go_library( go_library(

View File

@ -14,10 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
// Package options provides the flags used for the controller manager.
//
// CAUTION: If you update code in this file, you may need to also update code
// in contrib/mesos/pkg/controllermanager/controllermanager.go
package options package options
import ( import (
@ -32,23 +28,22 @@ import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
) )
// ExternalCMServer is the main context object for the controller manager. // CloudControllerMangerServer is the main context object for the controller manager.
type ExternalCMServer struct { type CloudControllerManagerServer struct {
componentconfig.KubeControllerManagerConfiguration componentconfig.KubeControllerManagerConfiguration
Master string Master string
Kubeconfig string Kubeconfig string
} }
// NewCMServer creates a new ExternalCMServer with a default config. // NewCloudControllerManagerServer creates a new ExternalCMServer with a default config.
func NewExternalCMServer() *ExternalCMServer { func NewCloudControllerManagerServer() *CloudControllerManagerServer {
s := ExternalCMServer{ s := CloudControllerManagerServer{
KubeControllerManagerConfiguration: componentconfig.KubeControllerManagerConfiguration{ KubeControllerManagerConfiguration: componentconfig.KubeControllerManagerConfiguration{
Port: ports.ControllerManagerPort, Port: ports.CloudControllerManagerPort,
Address: "0.0.0.0", Address: "0.0.0.0",
ConcurrentServiceSyncs: 1, ConcurrentServiceSyncs: 1,
MinResyncPeriod: metav1.Duration{Duration: 12 * time.Hour}, MinResyncPeriod: metav1.Duration{Duration: 12 * time.Hour},
RegisterRetryCount: 10,
NodeMonitorPeriod: metav1.Duration{Duration: 5 * time.Second}, NodeMonitorPeriod: metav1.Duration{Duration: 5 * time.Second},
ClusterName: "kubernetes", ClusterName: "kubernetes",
ConfigureCloudRoutes: true, ConfigureCloudRoutes: true,
@ -57,10 +52,6 @@ func NewExternalCMServer() *ExternalCMServer {
KubeAPIBurst: 30, KubeAPIBurst: 30,
LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(), LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(),
ControllerStartInterval: metav1.Duration{Duration: 0 * time.Second}, ControllerStartInterval: metav1.Duration{Duration: 0 * time.Second},
EnableGarbageCollector: true,
ConcurrentGCSyncs: 20,
ClusterSigningCertFile: "/etc/kubernetes/ca/ca.pem",
ClusterSigningKeyFile: "/etc/kubernetes/ca/ca.key",
}, },
} }
s.LeaderElection.LeaderElect = true s.LeaderElection.LeaderElect = true
@ -68,8 +59,8 @@ func NewExternalCMServer() *ExternalCMServer {
} }
// AddFlags adds flags for a specific ExternalCMServer to the specified FlagSet // AddFlags adds flags for a specific ExternalCMServer to the specified FlagSet
func (s *ExternalCMServer) AddFlags(fs *pflag.FlagSet) { func (s *CloudControllerManagerServer) AddFlags(fs *pflag.FlagSet) {
fs.Int32Var(&s.Port, "port", s.Port, "The port that the controller-manager's http service runs on") fs.Int32Var(&s.Port, "port", s.Port, "The port that the cloud-controller-manager's http service runs on")
fs.Var(componentconfig.IPVar{Val: &s.Address}, "address", "The IP address to serve on (set to 0.0.0.0 for all interfaces)") fs.Var(componentconfig.IPVar{Val: &s.Address}, "address", "The IP address to serve on (set to 0.0.0.0 for all interfaces)")
fs.StringVar(&s.CloudProvider, "cloud-provider", s.CloudProvider, "The provider of cloud services. Empty for no provider.") fs.StringVar(&s.CloudProvider, "cloud-provider", s.CloudProvider, "The provider of cloud services. Empty for no provider.")
fs.StringVar(&s.CloudConfigFile, "cloud-config", s.CloudConfigFile, "The path to the cloud provider configuration file. Empty string for no configuration file.") fs.StringVar(&s.CloudConfigFile, "cloud-config", s.CloudConfigFile, "The path to the cloud provider configuration file. Empty string for no configuration file.")

View File

@ -15,7 +15,7 @@ limitations under the License.
*/ */
// The external controller manager is responsible for running controller loops that // The external controller manager is responsible for running controller loops that
// are cloud provider dependent. It uses the API to listen for new events on resources. // are cloud provider dependent. It uses the API to listen to new events on resources.
package main package main
@ -43,7 +43,7 @@ func init() {
} }
func main() { func main() {
s := options.NewExternalCMServer() s := options.NewCloudControllerManagerServer()
s.AddFlags(pflag.CommandLine) s.AddFlags(pflag.CommandLine)
flag.InitFlags() flag.InitFlags()

View File

@ -378,9 +378,7 @@ func StartControllers(controllers map[string]InitFunc, s *options.CMServer, root
time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
if s.AllocateNodeCIDRs && s.ConfigureCloudRoutes { if s.AllocateNodeCIDRs && s.ConfigureCloudRoutes {
if s.CloudProvider == "external" { if cloud == nil {
glog.Warning("configure-cloud-routes is set, but external cloudprovider is specified. This manager will not configure cloud provider routes.")
} else if cloud == nil {
glog.Warning("configure-cloud-routes is set, but no cloud provider specified. Will not configure cloud provider routes.") glog.Warning("configure-cloud-routes is set, but no cloud provider specified. Will not configure cloud provider routes.")
} else if routes, ok := cloud.Routes(); !ok { } else if routes, ok := cloud.Routes(); !ok {
glog.Warning("configure-cloud-routes is set, but cloud provider does not support routes. Will not configure cloud provider routes.") glog.Warning("configure-cloud-routes is set, but cloud provider does not support routes. Will not configure cloud provider routes.")

View File

@ -90,11 +90,6 @@ func InitCloudProvider(name string, configFilePath string) (Interface, error) {
var cloud Interface var cloud Interface
var err error var err error
if name == "external" {
glog.Info("cloud provider external specified.")
return nil, nil
}
if name == "" { if name == "" {
glog.Info("No cloud provider specified.") glog.Info("No cloud provider specified.")
return nil, nil return nil, nil

View File

@ -4,10 +4,8 @@ licenses(["notice"])
load( load(
"@io_bazel_rules_go//go:def.bzl", "@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library", "go_library",
"go_test", "go_test",
"cgo_library",
) )
go_library( go_library(
@ -17,8 +15,8 @@ go_library(
deps = [ deps = [
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/apis/meta/v1:go_default_library", "//pkg/apis/meta/v1:go_default_library",
"//pkg/client/clientset_generated/release_1_5:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/release_1_5/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library",
"//pkg/client/record:go_default_library", "//pkg/client/record:go_default_library",
"//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider:go_default_library",
"//pkg/controller/informers:go_default_library", "//pkg/controller/informers:go_default_library",
@ -37,7 +35,7 @@ go_test(
deps = [ deps = [
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/apis/meta/v1:go_default_library", "//pkg/apis/meta/v1:go_default_library",
"//pkg/client/clientset_generated/release_1_5/fake:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library",
"//pkg/client/record:go_default_library", "//pkg/client/record:go_default_library",
"//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider:go_default_library",
"//pkg/cloudprovider/providers/fake:go_default_library", "//pkg/cloudprovider/providers/fake:go_default_library",

View File

@ -24,8 +24,8 @@ import (
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
v1core "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/core/v1" v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/controller/informers"
@ -55,6 +55,7 @@ const (
retrySleepTime = 20 * time.Millisecond retrySleepTime = 20 * time.Millisecond
) )
// NewCloudNodeController creates a CloudNodeController object
func NewCloudNodeController( func NewCloudNodeController(
nodeInformer informers.NodeInformer, nodeInformer informers.NodeInformer,
kubeClient clientset.Interface, kubeClient clientset.Interface,

View File

@ -23,7 +23,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"

View File

@ -29,6 +29,9 @@ const (
// ControllerManagerPort is the default port for the controller manager status server. // ControllerManagerPort is the default port for the controller manager status server.
// May be overridden by a flag at startup. // May be overridden by a flag at startup.
ControllerManagerPort = 10252 ControllerManagerPort = 10252
// CloudControllerManagerPort is the default port for the cloud controller manager server.
// This value may be overriden by a flag at startup.
CloudControllerManagerPort = 10253
// KubeletReadOnlyPort exposes basic read-only services from the kubelet. // KubeletReadOnlyPort exposes basic read-only services from the kubelet.
// May be overridden by a flag at startup. // May be overridden by a flag at startup.
// This is necessary for heapster to collect monitoring stats from the kubelet // This is necessary for heapster to collect monitoring stats from the kubelet