Add regional flag

This commit is contained in:
Aleksandra Malinowska 2018-02-15 16:53:09 +01:00
parent 887408b6a6
commit f98e953eb4
5 changed files with 22 additions and 18 deletions

View File

@ -53,15 +53,17 @@ type CloudProviderBuilder struct {
cloudConfig string cloudConfig string
clusterName string clusterName string
autoprovisioningEnabled bool autoprovisioningEnabled bool
regional bool
} }
// NewCloudProviderBuilder builds a new builder from static settings // NewCloudProviderBuilder builds a new builder from static settings
func NewCloudProviderBuilder(cloudProviderFlag string, cloudConfig string, clusterName string, autoprovisioningEnabled bool) CloudProviderBuilder { func NewCloudProviderBuilder(cloudProviderFlag, cloudConfig, clusterName string, autoprovisioningEnabled, regional bool) CloudProviderBuilder {
return CloudProviderBuilder{ return CloudProviderBuilder{
cloudProviderFlag: cloudProviderFlag, cloudProviderFlag: cloudProviderFlag,
cloudConfig: cloudConfig, cloudConfig: cloudConfig,
clusterName: clusterName, clusterName: clusterName,
autoprovisioningEnabled: autoprovisioningEnabled, autoprovisioningEnabled: autoprovisioningEnabled,
regional: regional,
} }
} }
@ -107,7 +109,7 @@ func (b CloudProviderBuilder) buildGCE(do cloudprovider.NodeGroupDiscoveryOption
defer config.Close() defer config.Close()
} }
manager, err := gce.CreateGceManager(config, mode, b.clusterName, do) manager, err := gce.CreateGceManager(config, mode, b.clusterName, do, b.regional)
if err != nil { if err != nil {
glog.Fatalf("Failed to create GCE Manager: %v", err) glog.Fatalf("Failed to create GCE Manager: %v", err)
} }

View File

@ -152,7 +152,7 @@ type gceManagerImpl struct {
mode GcpCloudProviderMode mode GcpCloudProviderMode
templates *templateBuilder templates *templateBuilder
interrupt chan struct{} interrupt chan struct{}
isRegional bool regional bool
explicitlyConfigured map[GceRef]bool explicitlyConfigured map[GceRef]bool
migAutoDiscoverySpecs []cloudprovider.MIGAutoDiscoveryConfig migAutoDiscoverySpecs []cloudprovider.MIGAutoDiscoveryConfig
resourceLimiter *cloudprovider.ResourceLimiter resourceLimiter *cloudprovider.ResourceLimiter
@ -160,7 +160,7 @@ type gceManagerImpl struct {
} }
// CreateGceManager constructs gceManager object. // CreateGceManager constructs gceManager object.
func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, clusterName string, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions) (GceManager, error) { func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, clusterName string, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, regional bool) (GceManager, error) {
// Create Google Compute Engine token. // Create Google Compute Engine token.
var err error var err error
tokenSource := google.ComputeTokenSource("") tokenSource := google.ComputeTokenSource("")
@ -171,7 +171,6 @@ func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, cluster
} }
} }
var projectId, location string var projectId, location string
var isRegional bool
if configReader != nil { if configReader != nil {
var cfg provider_gce.ConfigFile var cfg provider_gce.ConfigFile
if err := gcfg.ReadInto(&cfg, configReader); err != nil { if err := gcfg.ReadInto(&cfg, configReader); err != nil {
@ -185,7 +184,6 @@ func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, cluster
glog.V(1).Infof("Using TokenSource from config %#v", tokenSource) glog.V(1).Infof("Using TokenSource from config %#v", tokenSource)
} }
projectId = cfg.Global.ProjectID projectId = cfg.Global.ProjectID
isRegional = cfg.Global.Multizone
location = cfg.Global.LocalZone location = cfg.Global.LocalZone
} else { } else {
glog.V(1).Infof("Using default TokenSource %#v", tokenSource) glog.V(1).Infof("Using default TokenSource %#v", tokenSource)
@ -196,7 +194,7 @@ func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, cluster
// be specified in config. For now we can just assume that hosted // be specified in config. For now we can just assume that hosted
// master project is in the same zone as cluster and only use // master project is in the same zone as cluster and only use
// discoveredZone. // discoveredZone.
discoveredProjectId, discoveredLocation, err := getProjectAndLocation(isRegional) discoveredProjectId, discoveredLocation, err := getProjectAndLocation(regional)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -220,7 +218,7 @@ func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, cluster
gceService: gceService, gceService: gceService,
migCache: make(map[GceRef]*Mig), migCache: make(map[GceRef]*Mig),
location: location, location: location,
isRegional: isRegional, regional: regional,
projectId: projectId, projectId: projectId,
clusterName: clusterName, clusterName: clusterName,
mode: mode, mode: mode,
@ -250,7 +248,7 @@ func CreateGceManager(configReader io.Reader, mode GcpCloudProviderMode, cluster
gkeService.BasePath = *gkeAPIEndpoint gkeService.BasePath = *gkeAPIEndpoint
} }
manager.gkeService = gkeService manager.gkeService = gkeService
if manager.isRegional { if manager.regional {
gkeBetaService, err := gke_beta.New(client) gkeBetaService, err := gke_beta.New(client)
if err != nil { if err != nil {
return nil, err return nil, err
@ -319,7 +317,7 @@ func (m *gceManagerImpl) fetchAllNodePools() error {
if m.mode == ModeGKENAP { if m.mode == ModeGKENAP {
return m.fetchAllNodePoolsGkeNapImpl() return m.fetchAllNodePoolsGkeNapImpl()
} }
if m.isRegional { if m.regional {
return m.fetchAllNodePoolsGkeRegionalImpl() return m.fetchAllNodePoolsGkeRegionalImpl()
} }
return m.fetchAllNodePoolsGkeImpl() return m.fetchAllNodePoolsGkeImpl()
@ -1051,7 +1049,7 @@ func (m *gceManagerImpl) GetResourceLimiter() (*cloudprovider.ResourceLimiter, e
} }
// Code borrowed from gce cloud provider. Reuse the original as soon as it becomes public. // Code borrowed from gce cloud provider. Reuse the original as soon as it becomes public.
func getProjectAndLocation(isRegional bool) (string, string, error) { func getProjectAndLocation(regional bool) (string, string, error) {
result, err := metadata.Get("instance/zone") result, err := metadata.Get("instance/zone")
if err != nil { if err != nil {
return "", "", err return "", "", err
@ -1061,7 +1059,7 @@ func getProjectAndLocation(isRegional bool) (string, string, error) {
return "", "", fmt.Errorf("unexpected response: %s", result) return "", "", fmt.Errorf("unexpected response: %s", result)
} }
location := parts[3] location := parts[3]
if isRegional { if regional {
location, err = provider_gce.GetGCERegion(location) location, err = provider_gce.GetGCERegion(location)
if err != nil { if err != nil {
return "", "", err return "", "", err
@ -1075,7 +1073,7 @@ func getProjectAndLocation(isRegional bool) (string, string, error) {
} }
func (m *gceManagerImpl) findMigsNamed(name *regexp.Regexp) ([]string, error) { func (m *gceManagerImpl) findMigsNamed(name *regexp.Regexp) ([]string, error) {
if m.isRegional { if m.regional {
return m.findMigsInRegion(m.location, name) return m.findMigsInRegion(m.location, name)
} }
return m.findMigsInZone(m.location, name) return m.findMigsInZone(m.location, name)

View File

@ -526,7 +526,7 @@ func getManagedInstancesResponse2Named(name, zone string) string {
return fmt.Sprintf(managedInstancesResponse2, zone, name) return fmt.Sprintf(managedInstancesResponse2, zone, name)
} }
func newTestGceManager(t *testing.T, testServerURL string, mode GcpCloudProviderMode, isRegional bool) *gceManagerImpl { func newTestGceManager(t *testing.T, testServerURL string, mode GcpCloudProviderMode, regional bool) *gceManagerImpl {
client := &http.Client{} client := &http.Client{}
gceService, err := gce.New(client) gceService, err := gce.New(client)
assert.NoError(t, err) assert.NoError(t, err)
@ -538,7 +538,7 @@ func newTestGceManager(t *testing.T, testServerURL string, mode GcpCloudProvider
projectId: projectId, projectId: projectId,
clusterName: clusterName, clusterName: clusterName,
mode: mode, mode: mode,
isRegional: isRegional, regional: regional,
templates: &templateBuilder{ templates: &templateBuilder{
projectId: projectId, projectId: projectId,
service: gceService, service: gceService,
@ -546,7 +546,7 @@ func newTestGceManager(t *testing.T, testServerURL string, mode GcpCloudProvider
explicitlyConfigured: make(map[GceRef]bool), explicitlyConfigured: make(map[GceRef]bool),
} }
if isRegional { if regional {
manager.location = region manager.location = region
} else { } else {
manager.location = zoneB manager.location = zoneB
@ -557,7 +557,7 @@ func newTestGceManager(t *testing.T, testServerURL string, mode GcpCloudProvider
assert.NoError(t, err) assert.NoError(t, err)
gkeService.BasePath = testServerURL gkeService.BasePath = testServerURL
manager.gkeService = gkeService manager.gkeService = gkeService
if isRegional { if regional {
gkeService, err := gke_beta.New(client) gkeService, err := gke_beta.New(client)
assert.NoError(t, err) assert.NoError(t, err)
gkeService.BasePath = testServerURL gkeService.BasePath = testServerURL

View File

@ -132,6 +132,8 @@ type AutoscalingOptions struct {
// Pods with priority below cutoff are expendable. They can be killed without any consideration during scale down and they don't cause scale up. // Pods with priority below cutoff are expendable. They can be killed without any consideration during scale down and they don't cause scale up.
// Pods with null priority (PodPriority disabled) are non expendable. // Pods with null priority (PodPriority disabled) are non expendable.
ExpendablePodsPriorityCutoff int ExpendablePodsPriorityCutoff int
// Regional tells whether the cluster is regional.
Regional bool
} }
// NewAutoscalingContext returns an autoscaling context from all the necessary parameters passed via arguments // NewAutoscalingContext returns an autoscaling context from all the necessary parameters passed via arguments
@ -139,7 +141,7 @@ func NewAutoscalingContext(options AutoscalingOptions, predicateChecker *simulat
kubeClient kube_client.Interface, kubeEventRecorder kube_record.EventRecorder, kubeClient kube_client.Interface, kubeEventRecorder kube_record.EventRecorder,
logEventRecorder *utils.LogEventRecorder, listerRegistry kube_util.ListerRegistry) (*AutoscalingContext, errors.AutoscalerError) { logEventRecorder *utils.LogEventRecorder, listerRegistry kube_util.ListerRegistry) (*AutoscalingContext, errors.AutoscalerError) {
cloudProviderBuilder := builder.NewCloudProviderBuilder(options.CloudProviderName, options.CloudConfig, options.ClusterName, options.NodeAutoprovisioningEnabled) cloudProviderBuilder := builder.NewCloudProviderBuilder(options.CloudProviderName, options.CloudConfig, options.ClusterName, options.NodeAutoprovisioningEnabled, options.Regional)
cloudProvider := cloudProviderBuilder.Build(cloudprovider.NodeGroupDiscoveryOptions{ cloudProvider := cloudProviderBuilder.Build(cloudprovider.NodeGroupDiscoveryOptions{
NodeGroupSpecs: options.NodeGroups, NodeGroupSpecs: options.NodeGroups,
NodeGroupAutoDiscoverySpecs: options.NodeGroupAutoDiscovery}, NodeGroupAutoDiscoverySpecs: options.NodeGroupAutoDiscovery},

View File

@ -131,6 +131,7 @@ var (
maxAutoprovisionedNodeGroupCount = flag.Int("max-autoprovisioned-node-group-count", 15, "The maximum number of autoprovisioned groups in the cluster.") maxAutoprovisionedNodeGroupCount = flag.Int("max-autoprovisioned-node-group-count", 15, "The maximum number of autoprovisioned groups in the cluster.")
expendablePodsPriorityCutoff = flag.Int("expendable-pods-priority-cutoff", 0, "Pods with priority below cutoff will be expendable. They can be killed without any consideration during scale down and they don't cause scale up. Pods with null priority (PodPriority disabled) are non expendable.") expendablePodsPriorityCutoff = flag.Int("expendable-pods-priority-cutoff", 0, "Pods with priority below cutoff will be expendable. They can be killed without any consideration during scale down and they don't cause scale up. Pods with null priority (PodPriority disabled) are non expendable.")
regional = flag.Bool("regional", false, "Cluster is regional.")
) )
func createAutoscalerOptions() core.AutoscalerOptions { func createAutoscalerOptions() core.AutoscalerOptions {
@ -180,6 +181,7 @@ func createAutoscalerOptions() core.AutoscalerOptions {
NodeAutoprovisioningEnabled: *nodeAutoprovisioningEnabled, NodeAutoprovisioningEnabled: *nodeAutoprovisioningEnabled,
MaxAutoprovisionedNodeGroupCount: *maxAutoprovisionedNodeGroupCount, MaxAutoprovisionedNodeGroupCount: *maxAutoprovisionedNodeGroupCount,
ExpendablePodsPriorityCutoff: *expendablePodsPriorityCutoff, ExpendablePodsPriorityCutoff: *expendablePodsPriorityCutoff,
Regional: *regional,
} }
configFetcherOpts := dynamic.ConfigFetcherOptions{ configFetcherOpts := dynamic.ConfigFetcherOptions{