func createAutoscalingOptions()

in cluster-autoscaler/config/flags/flags.go [245:410]


func createAutoscalingOptions() config.AutoscalingOptions {
	minCoresTotal, maxCoresTotal, err := parseMinMaxFlag(*coresTotal)
	if err != nil {
		klog.Fatalf("Failed to parse flags: %v", err)
	}
	minMemoryTotal, maxMemoryTotal, err := parseMinMaxFlag(*memoryTotal)
	if err != nil {
		klog.Fatalf("Failed to parse flags: %v", err)
	}
	// Convert memory limits to bytes.
	minMemoryTotal = minMemoryTotal * units.GiB
	maxMemoryTotal = maxMemoryTotal * units.GiB

	parsedGpuTotal, err := parseMultipleGpuLimits(*gpuTotal)
	if err != nil {
		klog.Fatalf("Failed to parse flags: %v", err)
	}

	var parsedSchedConfig *scheduler_config.KubeSchedulerConfiguration
	// if scheduler config flag was set by the user
	if pflag.CommandLine.Changed(config.SchedulerConfigFileFlag) {
		parsedSchedConfig, err = scheduler_util.ConfigFromPath(*schedulerConfigFile)
	}
	if err != nil {
		klog.Fatalf("Failed to get scheduler config: %v", err)
	}

	if isFlagPassed("drain-priority-config") && isFlagPassed("max-graceful-termination-sec") {
		klog.Fatalf("Invalid configuration, could not use --drain-priority-config together with --max-graceful-termination-sec")
	}

	var drainPriorityConfigMap []kubelet_config.ShutdownGracePeriodByPodPriority
	if isFlagPassed("drain-priority-config") {
		drainPriorityConfigMap = parseShutdownGracePeriodsAndPriorities(*drainPriorityConfig)
		if len(drainPriorityConfigMap) == 0 {
			klog.Fatalf("Invalid configuration, parsing --drain-priority-config")
		}
	}

	return config.AutoscalingOptions{
		NodeGroupDefaults: config.NodeGroupAutoscalingOptions{
			ScaleDownUtilizationThreshold:    *scaleDownUtilizationThreshold,
			ScaleDownGpuUtilizationThreshold: *scaleDownGpuUtilizationThreshold,
			ScaleDownUnneededTime:            *scaleDownUnneededTime,
			ScaleDownUnreadyTime:             *scaleDownUnreadyTime,
			IgnoreDaemonSetsUtilization:      *ignoreDaemonSetsUtilization,
			MaxNodeProvisionTime:             *maxNodeProvisionTime,
		},
		CloudConfig:                      *cloudConfig,
		CloudProviderName:                *cloudProviderFlag,
		NodeGroupAutoDiscovery:           *nodeGroupAutoDiscoveryFlag,
		MaxTotalUnreadyPercentage:        *maxTotalUnreadyPercentage,
		OkTotalUnreadyCount:              *okTotalUnreadyCount,
		ScaleUpFromZero:                  *scaleUpFromZero,
		ParallelScaleUp:                  *parallelScaleUp,
		EstimatorName:                    *estimatorFlag,
		ExpanderNames:                    *expanderFlag,
		GRPCExpanderCert:                 *grpcExpanderCert,
		GRPCExpanderURL:                  *grpcExpanderURL,
		IgnoreMirrorPodsUtilization:      *ignoreMirrorPodsUtilization,
		MaxBulkSoftTaintCount:            *maxBulkSoftTaintCount,
		MaxBulkSoftTaintTime:             *maxBulkSoftTaintTime,
		MaxGracefulTerminationSec:        *maxGracefulTerminationFlag,
		MaxPodEvictionTime:               *maxPodEvictionTime,
		MaxNodesTotal:                    *maxNodesTotal,
		MaxCoresTotal:                    maxCoresTotal,
		MinCoresTotal:                    minCoresTotal,
		MaxMemoryTotal:                   maxMemoryTotal,
		MinMemoryTotal:                   minMemoryTotal,
		GpuTotal:                         parsedGpuTotal,
		NodeGroups:                       *nodeGroupsFlag,
		EnforceNodeGroupMinSize:          *enforceNodeGroupMinSize,
		ScaleDownDelayAfterAdd:           *scaleDownDelayAfterAdd,
		ScaleDownDelayTypeLocal:          *scaleDownDelayTypeLocal,
		ScaleDownDelayAfterDelete:        *scaleDownDelayAfterDelete,
		ScaleDownDelayAfterFailure:       *scaleDownDelayAfterFailure,
		ScaleDownEnabled:                 *scaleDownEnabled,
		ScaleDownUnreadyEnabled:          *scaleDownUnreadyEnabled,
		ScaleDownNonEmptyCandidatesCount: *scaleDownNonEmptyCandidatesCount,
		ScaleDownCandidatesPoolRatio:     *scaleDownCandidatesPoolRatio,
		ScaleDownCandidatesPoolMinCount:  *scaleDownCandidatesPoolMinCount,
		DrainPriorityConfig:              drainPriorityConfigMap,
		SchedulerConfig:                  parsedSchedConfig,
		WriteStatusConfigMap:             *writeStatusConfigMapFlag,
		StatusConfigMapName:              *statusConfigMapName,
		BalanceSimilarNodeGroups:         *balanceSimilarNodeGroupsFlag,
		ConfigNamespace:                  *namespace,
		ClusterName:                      *clusterName,
		UnremovableNodeRecheckTimeout:    *unremovableNodeRecheckTimeout,
		ExpendablePodsPriorityCutoff:     *expendablePodsPriorityCutoff,
		Regional:                         *regional,
		NewPodScaleUpDelay:               *newPodScaleUpDelay,
		StartupTaints:                    append(*ignoreTaintsFlag, *startupTaintsFlag...),
		StatusTaints:                     *statusTaintsFlag,
		BalancingExtraIgnoredLabels:      *balancingIgnoreLabelsFlag,
		BalancingLabels:                  *balancingLabelsFlag,
		KubeClientOpts: config.KubeClientOptions{
			Master:          *kubernetes,
			KubeConfigPath:  *kubeConfigFile,
			APIContentType:  *kubeAPIContentType,
			KubeClientBurst: int(*kubeClientBurst),
			KubeClientQPS:   float32(*kubeClientQPS),
		},
		NodeDeletionDelayTimeout: *nodeDeletionDelayTimeout,
		AWSUseStaticInstanceList: *awsUseStaticInstanceList,
		GCEOptions: config.GCEOptions{
			ConcurrentRefreshes:            *concurrentGceRefreshes,
			MigInstancesMinRefreshWaitTime: *gceMigInstancesMinRefreshWaitTime,
			LocalSSDDiskSizeProvider:       localssdsize.NewSimpleLocalSSDProvider(),
			BulkMigInstancesListingEnabled: *bulkGceMigInstancesListingEnabled,
		},
		ClusterAPICloudConfigAuthoritative: *clusterAPICloudConfigAuthoritative,
		CordonNodeBeforeTerminate:          *cordonNodeBeforeTerminate,
		DaemonSetEvictionForEmptyNodes:     *daemonSetEvictionForEmptyNodes,
		DaemonSetEvictionForOccupiedNodes:  *daemonSetEvictionForOccupiedNodes,
		UserAgent:                          *userAgent,
		InitialNodeGroupBackoffDuration:    *initialNodeGroupBackoffDuration,
		MaxNodeGroupBackoffDuration:        *maxNodeGroupBackoffDuration,
		NodeGroupBackoffResetTimeout:       *nodeGroupBackoffResetTimeout,
		MaxScaleDownParallelism:            *maxScaleDownParallelismFlag,
		MaxDrainParallelism:                *maxDrainParallelismFlag,
		RecordDuplicatedEvents:             *recordDuplicatedEvents,
		MaxNodesPerScaleUp:                 *maxNodesPerScaleUp,
		MaxNodeGroupBinpackingDuration:     *maxNodeGroupBinpackingDuration,
		MaxBinpackingTime:                  *maxBinpackingTimeFlag,
		NodeDeletionBatcherInterval:        *nodeDeletionBatcherInterval,
		SkipNodesWithSystemPods:            *skipNodesWithSystemPods,
		SkipNodesWithLocalStorage:          *skipNodesWithLocalStorage,
		MinReplicaCount:                    *minReplicaCount,
		BspDisruptionTimeout:               *bspDisruptionTimeout,
		NodeDeleteDelayAfterTaint:          *nodeDeleteDelayAfterTaint,
		ScaleDownSimulationTimeout:         *scaleDownSimulationTimeout,
		SkipNodesWithCustomControllerPods:  *skipNodesWithCustomControllerPods,
		NodeGroupSetRatios: config.NodeGroupDifferenceRatios{
			MaxCapacityMemoryDifferenceRatio: *maxCapacityMemoryDifferenceRatio,
			MaxAllocatableDifferenceRatio:    *maxAllocatableDifferenceRatio,
			MaxFreeDifferenceRatio:           *maxFreeDifferenceRatio,
		},
		DynamicNodeDeleteDelayAfterTaintEnabled:      *dynamicNodeDeleteDelayAfterTaintEnabled,
		BypassedSchedulers:                           scheduler_util.GetBypassedSchedulersMap(*bypassedSchedulers),
		ProvisioningRequestEnabled:                   *provisioningRequestsEnabled,
		AsyncNodeGroupsEnabled:                       *asyncNodeGroupsEnabled,
		ProvisioningRequestInitialBackoffTime:        *provisioningRequestInitialBackoffTime,
		ProvisioningRequestMaxBackoffTime:            *provisioningRequestMaxBackoffTime,
		ProvisioningRequestMaxBackoffCacheSize:       *provisioningRequestMaxBackoffCacheSize,
		CheckCapacityBatchProcessing:                 *checkCapacityBatchProcessing,
		CheckCapacityProvisioningRequestMaxBatchSize: *checkCapacityProvisioningRequestMaxBatchSize,
		CheckCapacityProvisioningRequestBatchTimebox: *checkCapacityProvisioningRequestBatchTimebox,
		ForceDeleteLongUnregisteredNodes:             *forceDeleteLongUnregisteredNodes,
		DynamicResourceAllocationEnabled:             *enableDynamicResourceAllocation,
		ClusterSnapshotParallelism:                   *clusterSnapshotParallelism,
		CheckCapacityProcessorInstance:               *checkCapacityProcessorInstance,
		MaxInactivityTime:                            *maxInactivityTimeFlag,
		MaxFailingTime:                               *maxFailingTimeFlag,
		DebuggingSnapshotEnabled:                     *debuggingSnapshotEnabled,
		EnableProfiling:                              *enableProfiling,
		Address:                                      *address,
		EmitPerNodeGroupMetrics:                      *emitPerNodeGroupMetrics,
		FrequentLoopsEnabled:                         *frequentLoopsEnabled,
		ScanInterval:                                 *scanInterval,
		ForceDaemonSets:                              *forceDaemonSets,
		NodeInfoCacheExpireTime:                      *nodeInfoCacheExpireTime,
		ProactiveScaleupEnabled:                      *proactiveScaleupEnabled,
		PodInjectionLimit:                            *podInjectionLimit,
	}
}