diff --git a/hack/.golint_failures b/hack/.golint_failures index d768862ee26..3fff57a95c7 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -137,7 +137,6 @@ pkg/kubelet/status/testing pkg/kubelet/sysctl pkg/kubelet/types pkg/kubemark -pkg/master pkg/master/controller/crdregistration pkg/master/tunneler pkg/proxy/apis/config diff --git a/pkg/master/client_ca_hook.go b/pkg/master/client_ca_hook.go index 07de81d9568..4d13b0a51f7 100644 --- a/pkg/master/client_ca_hook.go +++ b/pkg/master/client_ca_hook.go @@ -31,6 +31,7 @@ import ( corev1client "k8s.io/client-go/kubernetes/typed/core/v1" ) +// ClientCARegistrationHook defines CA registration hook request structure type ClientCARegistrationHook struct { ClientCA []byte @@ -41,6 +42,7 @@ type ClientCARegistrationHook struct { RequestHeaderAllowedNames []string } +// PostStartHook initializes client CA configmap for the API server func (h ClientCARegistrationHook) PostStartHook(hookContext genericapiserver.PostStartHookContext) error { // initializing CAs is important so that aggregated API servers can come up with "normal" config. // We've seen lagging etcd before, so we want to retry this a few times before we decide to crashloop diff --git a/pkg/master/controller.go b/pkg/master/controller.go index 36307def915..4d9f35d5cd0 100644 --- a/pkg/master/controller.go +++ b/pkg/master/controller.go @@ -131,11 +131,13 @@ func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.Lega } } +// PostStartHook initiates the core controller loops that must exist for bootstrapping. func (c *Controller) PostStartHook(hookContext genericapiserver.PostStartHookContext) error { c.Start() return nil } +// PreShutdownHook triggers the actions needed to shut down the API Server cleanly. func (c *Controller) PreShutdownHook() error { c.Stop() return nil @@ -171,6 +173,7 @@ func (c *Controller) Start() { c.runner.Start() } +// Stop cleans up this API Servers endpoint reconciliation leases so another master can take over more quickly. func (c *Controller) Stop() { if c.runner != nil { c.runner.Stop() @@ -279,7 +282,7 @@ func createEndpointPortSpec(endpointPort int, endpointPortName string, extraEndp return endpointPorts } -// CreateMasterServiceIfNeeded will create the specified service if it +// CreateOrUpdateMasterServiceIfNeeded will create the specified service if it // doesn't already exist. func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, serviceIP net.IP, servicePorts []corev1.ServicePort, serviceType corev1.ServiceType, reconcile bool) error { if s, err := c.ServiceClient.Services(metav1.NamespaceDefault).Get(serviceName, metav1.GetOptions{}); err == nil { diff --git a/pkg/master/controller_test.go b/pkg/master/controller_test.go index 4578161b26e..99a4ff02345 100644 --- a/pkg/master/controller_test.go +++ b/pkg/master/controller_test.go @@ -34,7 +34,7 @@ func TestReconcileEndpoints(t *testing.T) { om := func(name string) metav1.ObjectMeta { return metav1.ObjectMeta{Namespace: ns, Name: name} } - reconcile_tests := []struct { + reconcileTests := []struct { testName string serviceName string ip string @@ -387,7 +387,7 @@ func TestReconcileEndpoints(t *testing.T) { }, }, } - for _, test := range reconcile_tests { + for _, test := range reconcileTests { fakeClient := fake.NewSimpleClientset() if test.endpoints != nil { fakeClient = fake.NewSimpleClientset(test.endpoints) @@ -437,7 +437,7 @@ func TestReconcileEndpoints(t *testing.T) { } - non_reconcile_tests := []struct { + nonReconcileTests := []struct { testName string serviceName string ip string @@ -506,7 +506,7 @@ func TestReconcileEndpoints(t *testing.T) { }, }, } - for _, test := range non_reconcile_tests { + for _, test := range nonReconcileTests { fakeClient := fake.NewSimpleClientset() if test.endpoints != nil { fakeClient = fake.NewSimpleClientset(test.endpoints) @@ -564,7 +564,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { return metav1.ObjectMeta{Namespace: ns, Name: name} } - create_tests := []struct { + createTests := []struct { testName string serviceName string servicePorts []corev1.ServicePort @@ -592,7 +592,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { }, }, } - for _, test := range create_tests { + for _, test := range createTests { master := Controller{} fakeClient := fake.NewSimpleClientset() master.ServiceClient = fakeClient.CoreV1() @@ -618,7 +618,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { } } - reconcile_tests := []struct { + reconcileTests := []struct { testName string serviceName string servicePorts []corev1.ServicePort @@ -874,7 +874,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { expectUpdate: nil, }, } - for _, test := range reconcile_tests { + for _, test := range reconcileTests { master := Controller{} fakeClient := fake.NewSimpleClientset(test.service) master.ServiceClient = fakeClient.CoreV1() @@ -903,7 +903,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { } } - non_reconcile_tests := []struct { + nonReconcileTests := []struct { testName string serviceName string servicePorts []corev1.ServicePort @@ -933,7 +933,7 @@ func TestCreateOrUpdateMasterService(t *testing.T) { expectUpdate: nil, }, } - for _, test := range non_reconcile_tests { + for _, test := range nonReconcileTests { master := Controller{} fakeClient := fake.NewSimpleClientset(test.service) master.ServiceClient = fakeClient.CoreV1() diff --git a/pkg/master/import_known_versions.go b/pkg/master/import_known_versions.go index 50239609cdc..d97aca13d79 100644 --- a/pkg/master/import_known_versions.go +++ b/pkg/master/import_known_versions.go @@ -16,8 +16,8 @@ limitations under the License. package master -// These imports are the API groups the API server will support. import ( + // These imports are the API groups the API server will support. _ "k8s.io/kubernetes/pkg/apis/admission/install" _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" _ "k8s.io/kubernetes/pkg/apis/apps/install" diff --git a/pkg/master/master.go b/pkg/master/master.go index 6703bcd604e..0c4cc573c60 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -118,6 +118,7 @@ const ( DefaultEndpointReconcilerTTL = 15 * time.Second ) +// ExtraConfig defines extra configuration for the master type ExtraConfig struct { ClientCARegistrationHook ClientCARegistrationHook @@ -189,6 +190,7 @@ type ExtraConfig struct { VersionedInformers informers.SharedInformerFactory } +// Config defines configuration for the master type Config struct { GenericConfig *genericapiserver.Config ExtraConfig ExtraConfig @@ -199,8 +201,8 @@ type completedConfig struct { ExtraConfig *ExtraConfig } +// CompletedConfig embeds a private pointer that cannot be instantiated outside of this package type CompletedConfig struct { - // Embed a private pointer that cannot be instantiated outside of this package. *completedConfig } @@ -272,50 +274,50 @@ func (c *Config) createEndpointReconciler() reconcilers.EndpointReconciler { } // Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. -func (cfg *Config) Complete() CompletedConfig { - c := completedConfig{ - cfg.GenericConfig.Complete(cfg.ExtraConfig.VersionedInformers), - &cfg.ExtraConfig, +func (c *Config) Complete() CompletedConfig { + cfg := completedConfig{ + c.GenericConfig.Complete(c.ExtraConfig.VersionedInformers), + &c.ExtraConfig, } - serviceIPRange, apiServerServiceIP, err := ServiceIPRange(c.ExtraConfig.ServiceIPRange) + serviceIPRange, apiServerServiceIP, err := ServiceIPRange(cfg.ExtraConfig.ServiceIPRange) if err != nil { klog.Fatalf("Error determining service IP ranges: %v", err) } - if c.ExtraConfig.ServiceIPRange.IP == nil { - c.ExtraConfig.ServiceIPRange = serviceIPRange + if cfg.ExtraConfig.ServiceIPRange.IP == nil { + cfg.ExtraConfig.ServiceIPRange = serviceIPRange } - if c.ExtraConfig.APIServerServiceIP == nil { - c.ExtraConfig.APIServerServiceIP = apiServerServiceIP + if cfg.ExtraConfig.APIServerServiceIP == nil { + cfg.ExtraConfig.APIServerServiceIP = apiServerServiceIP } - discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: c.GenericConfig.ExternalAddress} + discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: cfg.GenericConfig.ExternalAddress} discoveryAddresses.CIDRRules = append(discoveryAddresses.CIDRRules, - discovery.CIDRRule{IPRange: c.ExtraConfig.ServiceIPRange, Address: net.JoinHostPort(c.ExtraConfig.APIServerServiceIP.String(), strconv.Itoa(c.ExtraConfig.APIServerServicePort))}) - c.GenericConfig.DiscoveryAddresses = discoveryAddresses + discovery.CIDRRule{IPRange: cfg.ExtraConfig.ServiceIPRange, Address: net.JoinHostPort(cfg.ExtraConfig.APIServerServiceIP.String(), strconv.Itoa(cfg.ExtraConfig.APIServerServicePort))}) + cfg.GenericConfig.DiscoveryAddresses = discoveryAddresses - if c.ExtraConfig.ServiceNodePortRange.Size == 0 { + if cfg.ExtraConfig.ServiceNodePortRange.Size == 0 { // TODO: Currently no way to specify an empty range (do we need to allow this?) // We should probably allow this for clouds that don't require NodePort to do load-balancing (GCE) // but then that breaks the strict nestedness of ServiceType. // Review post-v1 - c.ExtraConfig.ServiceNodePortRange = kubeoptions.DefaultServiceNodePortRange - klog.Infof("Node port range unspecified. Defaulting to %v.", c.ExtraConfig.ServiceNodePortRange) + cfg.ExtraConfig.ServiceNodePortRange = kubeoptions.DefaultServiceNodePortRange + klog.Infof("Node port range unspecified. Defaulting to %v.", cfg.ExtraConfig.ServiceNodePortRange) } - if c.ExtraConfig.EndpointReconcilerConfig.Interval == 0 { - c.ExtraConfig.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval + if cfg.ExtraConfig.EndpointReconcilerConfig.Interval == 0 { + cfg.ExtraConfig.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval } - if c.ExtraConfig.MasterEndpointReconcileTTL == 0 { - c.ExtraConfig.MasterEndpointReconcileTTL = DefaultEndpointReconcilerTTL + if cfg.ExtraConfig.MasterEndpointReconcileTTL == 0 { + cfg.ExtraConfig.MasterEndpointReconcileTTL = DefaultEndpointReconcilerTTL } - if c.ExtraConfig.EndpointReconcilerConfig.Reconciler == nil { - c.ExtraConfig.EndpointReconcilerConfig.Reconciler = cfg.createEndpointReconciler() + if cfg.ExtraConfig.EndpointReconcilerConfig.Reconciler == nil { + cfg.ExtraConfig.EndpointReconcilerConfig.Reconciler = c.createEndpointReconciler() } - return CompletedConfig{&c} + return CompletedConfig{&cfg} } // New returns a new instance of Master from the given config. @@ -403,6 +405,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) return m, nil } +// InstallLegacyAPI will install the legacy APIs for the restStorageProviders if they are enabled. func (m *Master) InstallLegacyAPI(c *completedConfig, restOptionsGetter generic.RESTOptionsGetter, legacyRESTStorageProvider corerest.LegacyRESTStorageProvider) error { legacyRESTStorage, apiGroupInfo, err := legacyRESTStorageProvider.NewLegacyRESTStorage(restOptionsGetter) if err != nil { @@ -452,7 +455,7 @@ func (m *Master) InstallAPIs(apiResourceConfigSource serverstorage.APIResourceCo } apiGroupInfo, enabled, err := restStorageBuilder.NewRESTStorage(apiResourceConfigSource, restOptionsGetter) if err != nil { - return fmt.Errorf("problem initializing API group %q : %v.", groupName, err) + return fmt.Errorf("problem initializing API group %q : %v", groupName, err) } if !enabled { klog.Warningf("API group %q is not enabled, skipping.", groupName) @@ -512,6 +515,7 @@ func (n nodeAddressProvider) externalAddresses() ([]string, error) { return addrs, nil } +// DefaultAPIResourceConfigSource returns default configuration for an APIResource. func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret := serverstorage.NewResourceConfig() // NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list.