298 lines
10 KiB
Go
298 lines
10 KiB
Go
/*
|
|
Copyright 2015 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package v1alpha1
|
|
|
|
import (
|
|
"net"
|
|
"strconv"
|
|
"time"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
kruntime "k8s.io/apimachinery/pkg/runtime"
|
|
api "k8s.io/kubernetes/pkg/apis/core"
|
|
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
|
"k8s.io/kubernetes/pkg/master/ports"
|
|
utilpointer "k8s.io/kubernetes/pkg/util/pointer"
|
|
)
|
|
|
|
func addDefaultingFuncs(scheme *kruntime.Scheme) error {
|
|
return RegisterDefaults(scheme)
|
|
}
|
|
|
|
func SetDefaults_CloudControllerManagerConfiguration(obj *CloudControllerManagerConfiguration) {
|
|
zero := metav1.Duration{}
|
|
if obj.ServiceController.ConcurrentServiceSyncs == 0 {
|
|
obj.ServiceController.ConcurrentServiceSyncs = 1
|
|
}
|
|
if obj.NodeStatusUpdateFrequency == zero {
|
|
obj.NodeStatusUpdateFrequency = metav1.Duration{Duration: 5 * time.Minute}
|
|
}
|
|
}
|
|
|
|
func SetDefaults_KubeControllerManagerConfiguration(obj *KubeControllerManagerConfiguration) {
|
|
zero := metav1.Duration{}
|
|
if len(obj.Controllers) == 0 {
|
|
obj.Controllers = []string{"*"}
|
|
}
|
|
if obj.EndPointController.ConcurrentEndpointSyncs == 0 {
|
|
obj.EndPointController.ConcurrentEndpointSyncs = 5
|
|
}
|
|
if obj.ServiceController.ConcurrentServiceSyncs == 0 {
|
|
obj.ServiceController.ConcurrentServiceSyncs = 1
|
|
}
|
|
if obj.ReplicationController.ConcurrentRCSyncs == 0 {
|
|
obj.ReplicationController.ConcurrentRCSyncs = 5
|
|
}
|
|
if obj.ReplicaSetController.ConcurrentRSSyncs == 0 {
|
|
obj.ReplicaSetController.ConcurrentRSSyncs = 5
|
|
}
|
|
if obj.DaemonSetController.ConcurrentDaemonSetSyncs == 0 {
|
|
obj.DaemonSetController.ConcurrentDaemonSetSyncs = 2
|
|
}
|
|
if obj.JobController.ConcurrentJobSyncs == 0 {
|
|
obj.JobController.ConcurrentJobSyncs = 5
|
|
}
|
|
if obj.ResourceQuotaController.ConcurrentResourceQuotaSyncs == 0 {
|
|
obj.ResourceQuotaController.ConcurrentResourceQuotaSyncs = 5
|
|
}
|
|
if obj.DeploymentController.ConcurrentDeploymentSyncs == 0 {
|
|
obj.DeploymentController.ConcurrentDeploymentSyncs = 5
|
|
}
|
|
if obj.NamespaceController.ConcurrentNamespaceSyncs == 0 {
|
|
obj.NamespaceController.ConcurrentNamespaceSyncs = 10
|
|
}
|
|
if obj.SAController.ConcurrentSATokenSyncs == 0 {
|
|
obj.SAController.ConcurrentSATokenSyncs = 5
|
|
}
|
|
if obj.ResourceQuotaController.ResourceQuotaSyncPeriod == zero {
|
|
obj.ResourceQuotaController.ResourceQuotaSyncPeriod = metav1.Duration{Duration: 5 * time.Minute}
|
|
}
|
|
if obj.NamespaceController.NamespaceSyncPeriod == zero {
|
|
obj.NamespaceController.NamespaceSyncPeriod = metav1.Duration{Duration: 5 * time.Minute}
|
|
}
|
|
if obj.PersistentVolumeBinderController.PVClaimBinderSyncPeriod == zero {
|
|
obj.PersistentVolumeBinderController.PVClaimBinderSyncPeriod = metav1.Duration{Duration: 15 * time.Second}
|
|
}
|
|
if obj.HPAController.HorizontalPodAutoscalerSyncPeriod == zero {
|
|
obj.HPAController.HorizontalPodAutoscalerSyncPeriod = metav1.Duration{Duration: 30 * time.Second}
|
|
}
|
|
if obj.HPAController.HorizontalPodAutoscalerUpscaleForbiddenWindow == zero {
|
|
obj.HPAController.HorizontalPodAutoscalerUpscaleForbiddenWindow = metav1.Duration{Duration: 3 * time.Minute}
|
|
}
|
|
if obj.HPAController.HorizontalPodAutoscalerDownscaleForbiddenWindow == zero {
|
|
obj.HPAController.HorizontalPodAutoscalerDownscaleForbiddenWindow = metav1.Duration{Duration: 5 * time.Minute}
|
|
}
|
|
if obj.HPAController.HorizontalPodAutoscalerTolerance == 0 {
|
|
obj.HPAController.HorizontalPodAutoscalerTolerance = 0.1
|
|
}
|
|
if obj.DeploymentController.DeploymentControllerSyncPeriod == zero {
|
|
obj.DeploymentController.DeploymentControllerSyncPeriod = metav1.Duration{Duration: 30 * time.Second}
|
|
}
|
|
if obj.DeprecatedController.RegisterRetryCount == 0 {
|
|
obj.DeprecatedController.RegisterRetryCount = 10
|
|
}
|
|
if obj.NodeLifecycleController.PodEvictionTimeout == zero {
|
|
obj.NodeLifecycleController.PodEvictionTimeout = metav1.Duration{Duration: 5 * time.Minute}
|
|
}
|
|
if obj.NodeLifecycleController.NodeMonitorGracePeriod == zero {
|
|
obj.NodeLifecycleController.NodeMonitorGracePeriod = metav1.Duration{Duration: 40 * time.Second}
|
|
}
|
|
if obj.NodeLifecycleController.NodeStartupGracePeriod == zero {
|
|
obj.NodeLifecycleController.NodeStartupGracePeriod = metav1.Duration{Duration: 60 * time.Second}
|
|
}
|
|
if obj.NodeIpamController.NodeCIDRMaskSize == 0 {
|
|
obj.NodeIpamController.NodeCIDRMaskSize = 24
|
|
}
|
|
if obj.PodGCController.TerminatedPodGCThreshold == 0 {
|
|
obj.PodGCController.TerminatedPodGCThreshold = 12500
|
|
}
|
|
if obj.GarbageCollectorController.EnableGarbageCollector == nil {
|
|
obj.GarbageCollectorController.EnableGarbageCollector = utilpointer.BoolPtr(true)
|
|
}
|
|
if obj.GarbageCollectorController.ConcurrentGCSyncs == 0 {
|
|
obj.GarbageCollectorController.ConcurrentGCSyncs = 20
|
|
}
|
|
if obj.CSRSigningController.ClusterSigningCertFile == "" {
|
|
obj.CSRSigningController.ClusterSigningCertFile = "/etc/kubernetes/ca/ca.pem"
|
|
}
|
|
if obj.CSRSigningController.ClusterSigningKeyFile == "" {
|
|
obj.CSRSigningController.ClusterSigningKeyFile = "/etc/kubernetes/ca/ca.key"
|
|
}
|
|
if obj.CSRSigningController.ClusterSigningDuration == zero {
|
|
obj.CSRSigningController.ClusterSigningDuration = metav1.Duration{Duration: 365 * 24 * time.Hour}
|
|
}
|
|
if obj.AttachDetachController.ReconcilerSyncLoopPeriod == zero {
|
|
obj.AttachDetachController.ReconcilerSyncLoopPeriod = metav1.Duration{Duration: 60 * time.Second}
|
|
}
|
|
if obj.NodeLifecycleController.EnableTaintManager == nil {
|
|
obj.NodeLifecycleController.EnableTaintManager = utilpointer.BoolPtr(true)
|
|
}
|
|
if obj.HPAController.HorizontalPodAutoscalerUseRESTClients == nil {
|
|
obj.HPAController.HorizontalPodAutoscalerUseRESTClients = utilpointer.BoolPtr(true)
|
|
}
|
|
}
|
|
|
|
func SetDefaults_GenericComponentConfiguration(obj *GenericComponentConfiguration) {
|
|
zero := metav1.Duration{}
|
|
if obj.MinResyncPeriod == zero {
|
|
obj.MinResyncPeriod = metav1.Duration{Duration: 12 * time.Hour}
|
|
}
|
|
if obj.ContentType == "" {
|
|
obj.ContentType = "application/vnd.kubernetes.protobuf"
|
|
}
|
|
if obj.KubeAPIQPS == 0 {
|
|
obj.KubeAPIQPS = 20.0
|
|
}
|
|
if obj.KubeAPIBurst == 0 {
|
|
obj.KubeAPIBurst = 30
|
|
}
|
|
if obj.ControllerStartInterval == zero {
|
|
obj.ControllerStartInterval = metav1.Duration{Duration: 0 * time.Second}
|
|
}
|
|
}
|
|
|
|
func SetDefaults_KubeCloudSharedConfiguration(obj *KubeCloudSharedConfiguration) {
|
|
zero := metav1.Duration{}
|
|
// Port
|
|
if obj.Address == "" {
|
|
obj.Address = "0.0.0.0"
|
|
}
|
|
if obj.RouteReconciliationPeriod == zero {
|
|
obj.RouteReconciliationPeriod = metav1.Duration{Duration: 10 * time.Second}
|
|
}
|
|
if obj.NodeMonitorPeriod == zero {
|
|
obj.NodeMonitorPeriod = metav1.Duration{Duration: 5 * time.Second}
|
|
}
|
|
if obj.ClusterName == "" {
|
|
obj.ClusterName = "kubernetes"
|
|
}
|
|
if obj.ConfigureCloudRoutes == nil {
|
|
obj.ConfigureCloudRoutes = utilpointer.BoolPtr(true)
|
|
}
|
|
}
|
|
|
|
func SetDefaults_PersistentVolumeRecyclerConfiguration(obj *PersistentVolumeRecyclerConfiguration) {
|
|
if obj.MaximumRetry == 0 {
|
|
obj.MaximumRetry = 3
|
|
}
|
|
if obj.MinimumTimeoutNFS == 0 {
|
|
obj.MinimumTimeoutNFS = 300
|
|
}
|
|
if obj.IncrementTimeoutNFS == 0 {
|
|
obj.IncrementTimeoutNFS = 30
|
|
}
|
|
if obj.MinimumTimeoutHostPath == 0 {
|
|
obj.MinimumTimeoutHostPath = 60
|
|
}
|
|
if obj.IncrementTimeoutHostPath == 0 {
|
|
obj.IncrementTimeoutHostPath = 30
|
|
}
|
|
}
|
|
|
|
func SetDefaults_VolumeConfiguration(obj *VolumeConfiguration) {
|
|
if obj.EnableHostPathProvisioning == nil {
|
|
obj.EnableHostPathProvisioning = utilpointer.BoolPtr(false)
|
|
}
|
|
if obj.EnableDynamicProvisioning == nil {
|
|
obj.EnableDynamicProvisioning = utilpointer.BoolPtr(true)
|
|
}
|
|
if obj.FlexVolumePluginDir == "" {
|
|
obj.FlexVolumePluginDir = "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
|
|
}
|
|
}
|
|
|
|
func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) {
|
|
if len(obj.SchedulerName) == 0 {
|
|
obj.SchedulerName = api.DefaultSchedulerName
|
|
}
|
|
|
|
if obj.HardPodAffinitySymmetricWeight == 0 {
|
|
obj.HardPodAffinitySymmetricWeight = api.DefaultHardPodAffinitySymmetricWeight
|
|
}
|
|
|
|
if obj.AlgorithmSource.Policy == nil &&
|
|
(obj.AlgorithmSource.Provider == nil || len(*obj.AlgorithmSource.Provider) == 0) {
|
|
val := SchedulerDefaultProviderName
|
|
obj.AlgorithmSource.Provider = &val
|
|
}
|
|
|
|
if policy := obj.AlgorithmSource.Policy; policy != nil {
|
|
if policy.ConfigMap != nil && len(policy.ConfigMap.Namespace) == 0 {
|
|
obj.AlgorithmSource.Policy.ConfigMap.Namespace = api.NamespaceSystem
|
|
}
|
|
}
|
|
|
|
if host, port, err := net.SplitHostPort(obj.HealthzBindAddress); err == nil {
|
|
if len(host) == 0 {
|
|
host = "0.0.0.0"
|
|
}
|
|
obj.HealthzBindAddress = net.JoinHostPort(host, port)
|
|
} else {
|
|
obj.HealthzBindAddress = net.JoinHostPort("0.0.0.0", strconv.Itoa(ports.SchedulerPort))
|
|
}
|
|
|
|
if host, port, err := net.SplitHostPort(obj.MetricsBindAddress); err == nil {
|
|
if len(host) == 0 {
|
|
host = "0.0.0.0"
|
|
}
|
|
obj.MetricsBindAddress = net.JoinHostPort(host, port)
|
|
} else {
|
|
obj.MetricsBindAddress = net.JoinHostPort("0.0.0.0", strconv.Itoa(ports.SchedulerPort))
|
|
}
|
|
|
|
if len(obj.ClientConnection.ContentType) == 0 {
|
|
obj.ClientConnection.ContentType = "application/vnd.kubernetes.protobuf"
|
|
}
|
|
if obj.ClientConnection.QPS == 0.0 {
|
|
obj.ClientConnection.QPS = 50.0
|
|
}
|
|
if obj.ClientConnection.Burst == 0 {
|
|
obj.ClientConnection.Burst = 100
|
|
}
|
|
|
|
if len(obj.LeaderElection.LockObjectNamespace) == 0 {
|
|
obj.LeaderElection.LockObjectNamespace = SchedulerDefaultLockObjectNamespace
|
|
}
|
|
if len(obj.LeaderElection.LockObjectName) == 0 {
|
|
obj.LeaderElection.LockObjectName = SchedulerDefaultLockObjectName
|
|
}
|
|
|
|
if len(obj.FailureDomains) == 0 {
|
|
obj.FailureDomains = kubeletapis.DefaultFailureDomains
|
|
}
|
|
}
|
|
|
|
func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) {
|
|
zero := metav1.Duration{}
|
|
if obj.LeaseDuration == zero {
|
|
obj.LeaseDuration = metav1.Duration{Duration: 15 * time.Second}
|
|
}
|
|
if obj.RenewDeadline == zero {
|
|
obj.RenewDeadline = metav1.Duration{Duration: 10 * time.Second}
|
|
}
|
|
if obj.RetryPeriod == zero {
|
|
obj.RetryPeriod = metav1.Duration{Duration: 2 * time.Second}
|
|
}
|
|
if obj.ResourceLock == "" {
|
|
// obj.ResourceLock = rl.EndpointsResourceLock
|
|
obj.ResourceLock = "endpoints"
|
|
}
|
|
if obj.LeaderElect == nil {
|
|
obj.LeaderElect = utilpointer.BoolPtr(true)
|
|
}
|
|
}
|