diff --git a/docs/clusterdefinition.md b/docs/clusterdefinition.md index 09f2ddf205..0e89932ca0 100644 --- a/docs/clusterdefinition.md +++ b/docs/clusterdefinition.md @@ -49,6 +49,7 @@ Here are the valid values for the orchestrator types: |Name of addon|Enabled by default?|How many containers|Description| |tiller|true|Delivers the Helm server-side component: tiller. See https://github.com/kubernetes/helm for more info.| |kubernetes-dashboard|true|1|Delivers the kubernetes dashboard component. See https://github.com/kubernetes/dashboard for more info.| +|rescheduler|false|Delivers the kubernetes rescheduler component.| To give a bit more info on the `addons` property: We've tried to expose the basic bits of data that allow useful configuration of these cluster features. Here are some example usage patterns that will unpack what `addons` provide: @@ -75,7 +76,7 @@ As you can see above, `addons` is an array child property of `kubernetesConfig`. "enabled" : false }, { - "name": "dashboard", + "name": "kubernetes-dashboard", "enabled" : false } ] diff --git a/examples/kubernetes-config/kubernetes-no-dashboard.json b/examples/kubernetes-config/kubernetes-no-dashboard.json index f044de08f5..0ddd636f6d 100644 --- a/examples/kubernetes-config/kubernetes-no-dashboard.json +++ b/examples/kubernetes-config/kubernetes-no-dashboard.json @@ -6,7 +6,7 @@ "kubernetesConfig": { "addons": [ { - "name": "dashboard", + "name": "kubernetes-dashboard", "enabled" : false } ] diff --git a/examples/kubernetes-config/kubernetes-rescheduler.json b/examples/kubernetes-config/kubernetes-rescheduler.json new file mode 100644 index 0000000000..c85444586f --- /dev/null +++ b/examples/kubernetes-config/kubernetes-rescheduler.json @@ -0,0 +1,43 @@ +{ + "apiVersion": "vlabs", + "properties": { + "orchestratorProfile": { + "orchestratorType": "Kubernetes", + "kubernetesConfig": { + "addons": [ + { + "name": "rescheduler", + "enabled" : true + } + ] + } + }, + "masterProfile": { + "count": 1, + "dnsPrefix": "", + "vmSize": "Standard_D2_v2" + }, + "agentPoolProfiles": [ + { + "name": "agentpool1", + "count": 1, + "vmSize": "Standard_D2_v2", + "availabilityProfile": "AvailabilitySet" + } + ], + "linuxProfile": { + "adminUsername": "azureUser", + "ssh": { + "publicKeys": [ + { + "keyData": "" + } + ] + } + }, + "servicePrincipalProfile": { + "clientId": "", + "secret": "" + } + } +} diff --git a/parts/kubernetesmasteraddons-kube-rescheduler-deployment.yaml b/parts/kubernetesmasteraddons-kube-rescheduler-deployment.yaml new file mode 100644 index 0000000000..fc62947df0 --- /dev/null +++ b/parts/kubernetesmasteraddons-kube-rescheduler-deployment.yaml @@ -0,0 +1,35 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: rescheduler + namespace: kube-system + labels: + k8s-app: rescheduler + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +spec: + replicas: 1 + selector: + matchLabels: + k8s-app: rescheduler + template: + metadata: + labels: + k8s-app: rescheduler + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + containers: + - image: + name: rescheduler + resources: + requests: + cpu: + memory: + limits: + cpu: + memory: + command: + - sh + - -c + - '/rescheduler' \ No newline at end of file diff --git a/parts/kubernetesmastercustomdata.yml b/parts/kubernetesmastercustomdata.yml index c7b148cd18..2826b08d49 100644 --- a/parts/kubernetesmastercustomdata.yml +++ b/parts/kubernetesmastercustomdata.yml @@ -140,6 +140,15 @@ write_files: content: !!binary | MASTER_ADDON_HEAPSTER_DEPLOYMENT_B64_GZIP_STR +{{if .OrchestratorProfile.KubernetesConfig.IsReschedulerEnabled}} +- path: /etc/kubernetes/addons/kube-rescheduler-deployment.yaml + permissions: "0644" + encoding: gzip + owner: "root" + content: !!binary | + MASTER_ADDON_RESCHEDULER_DEPLOYMENT_B64_GZIP_STR +{{end}} + - path: /etc/kubernetes/addons/azure-storage-classes.yaml permissions: "0644" encoding: gzip @@ -270,6 +279,8 @@ write_files: sed -i "s||{{WrapAsVariable "kubernetesHyperkubeSpec"}}|g; s||{{WrapAsVariable "kubeClusterCidr"}}|g" "/etc/kubernetes/addons/kube-proxy-daemonset.yaml" sed -i "s||{{WrapAsVariable "kubernetesKubeDNSSpec"}}|g; s||{{WrapAsVariable "kubernetesDNSMasqSpec"}}|g; s||{{WrapAsVariable "kubernetesExecHealthzSpec"}}|g" "/etc/kubernetes/addons/kube-dns-deployment.yaml" sed -i "s||{{WrapAsVariable "kubernetesHeapsterSpec"}}|g; s||{{WrapAsVariable "kubernetesAddonResizerSpec"}}|g" "/etc/kubernetes/addons/kube-heapster-deployment.yaml" + sed -i "s||{{WrapAsVariable "kubeDNSServiceIP"}}|g" "/etc/kubernetes/addons/kube-dns-deployment.yaml" + {{if .OrchestratorProfile.KubernetesConfig.IsDashboardEnabled}} sed -i "s||{{WrapAsVariable "kubernetesDashboardSpec"}}|g" "/etc/kubernetes/addons/kubernetes-dashboard-deployment.yaml" sed -i "s||{{WrapAsVariable "kubernetesDashboardCPURequests"}}|g" "/etc/kubernetes/addons/kubernetes-dashboard-deployment.yaml" @@ -277,6 +288,7 @@ write_files: sed -i "s||{{WrapAsVariable "kubernetesDashboardCPULimit"}}|g" "/etc/kubernetes/addons/kubernetes-dashboard-deployment.yaml" sed -i "s||{{WrapAsVariable "kubernetesDashboardMemoryLimit"}}|g" "/etc/kubernetes/addons/kubernetes-dashboard-deployment.yaml" {{end}} + {{if .OrchestratorProfile.KubernetesConfig.IsTillerEnabled}} sed -i "s||{{WrapAsVariable "kubernetesTillerSpec"}}|g" "/etc/kubernetes/addons/kube-tiller-deployment.yaml" sed -i "s||{{WrapAsVariable "kubernetesTillerCPURequests"}}|g" "/etc/kubernetes/addons/kube-tiller-deployment.yaml" @@ -284,7 +296,14 @@ write_files: sed -i "s||{{WrapAsVariable "kubernetesTillerCPULimit"}}|g" "/etc/kubernetes/addons/kube-tiller-deployment.yaml" sed -i "s||{{WrapAsVariable "kubernetesTillerMemoryLimit"}}|g" "/etc/kubernetes/addons/kube-tiller-deployment.yaml" {{end}} - sed -i "s||{{WrapAsVariable "kubeDNSServiceIP"}}|g" "/etc/kubernetes/addons/kube-dns-deployment.yaml" + +{{if .OrchestratorProfile.KubernetesConfig.IsReschedulerEnabled}} + sed -i "s||{{WrapAsVariable "kubernetesReschedulerSpec"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml" + sed -i "s||{{WrapAsVariable "kubernetesReschedulerCPURequests"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml" + sed -i "s||{{WrapAsVariable "kubernetesReschedulerMemoryRequests"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml" + sed -i "s||{{WrapAsVariable "kubernetesReschedulerCPULimit"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml" + sed -i "s||{{WrapAsVariable "kubernetesReschedulerMemoryLimit"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml" +{{end}} {{if .OrchestratorProfile.KubernetesConfig.EnableRbac }} # If RBAC enabled then add parameters to API server and Controller manager configuration diff --git a/parts/kubernetesmastervars.t b/parts/kubernetesmastervars.t index 0fe0108fc8..59a0273a23 100644 --- a/parts/kubernetesmastervars.t +++ b/parts/kubernetesmastervars.t @@ -25,6 +25,11 @@ "kubernetesTillerMemoryRequests": "[parameters('kubernetesTillerMemoryRequests')]", "kubernetesTillerCPULimit": "[parameters('kubernetesTillerCPULimit')]", "kubernetesTillerMemoryLimit": "[parameters('kubernetesTillerMemoryLimit')]", + "kubernetesReschedulerSpec": "[parameters('kubernetesReschedulerSpec')]", + "kubernetesReschedulerCPURequests": "[parameters('kubernetesReschedulerCPURequests')]", + "kubernetesReschedulerMemoryRequests": "[parameters('kubernetesReschedulerMemoryRequests')]", + "kubernetesReschedulerCPULimit": "[parameters('kubernetesReschedulerCPULimit')]", + "kubernetesReschedulerMemoryLimit": "[parameters('kubernetesReschedulerMemoryLimit')]", "kubernetesPodInfraContainerSpec": "[parameters('kubernetesPodInfraContainerSpec')]", "kubernetesNodeStatusUpdateFrequency": "[parameters('kubernetesNodeStatusUpdateFrequency')]", "kubernetesCtrlMgrNodeMonitorGracePeriod": "[parameters('kubernetesCtrlMgrNodeMonitorGracePeriod')]", diff --git a/parts/kubernetesparams.t b/parts/kubernetesparams.t index 0e7a10731b..da09ef0fab 100644 --- a/parts/kubernetesparams.t +++ b/parts/kubernetesparams.t @@ -225,6 +225,41 @@ }, "type": "string" }, + "kubernetesReschedulerSpec": { + {{PopulateClassicModeDefaultValue "kubernetesReschedulerSpec"}} + "metadata": { + "description": "The container spec for rescheduler." + }, + "type": "string" + }, + "kubernetesReschedulerCPURequests": { + {{PopulateClassicModeDefaultValue "kubernetesReschedulerCPURequests"}} + "metadata": { + "description": "Rescheduler CPU Requests." + }, + "type": "string" + }, + "kubernetesReschedulerMemoryRequests": { + {{PopulateClassicModeDefaultValue "kubernetesReschedulerMemoryRequests"}} + "metadata": { + "description": "Rescheduler Memory Requests." + }, + "type": "string" + }, + "kubernetesReschedulerCPULimit": { + {{PopulateClassicModeDefaultValue "kubernetesReschedulerCPULimit"}} + "metadata": { + "description": "Rescheduler CPU Limit." + }, + "type": "string" + }, + "kubernetesReschedulerMemoryLimit": { + {{PopulateClassicModeDefaultValue "kubernetesReschedulerMemoryLimit"}} + "metadata": { + "description": "Rescheduler Memory Limit." + }, + "type": "string" + }, "kubernetesPodInfraContainerSpec": { {{PopulateClassicModeDefaultValue "kubernetesPodInfraContainerSpec"}} "metadata": { diff --git a/pkg/acsengine/const.go b/pkg/acsengine/const.go index 68c0945b0c..570ef38552 100644 --- a/pkg/acsengine/const.go +++ b/pkg/acsengine/const.go @@ -85,6 +85,10 @@ const ( DefaultOrchestratorName = "k8s" // DefaultEtcdDiskSize specifies the default size for Kubernetes master etcd disk volumes in GB DefaultEtcdDiskSize = "128" + // DefaultReschedulerImage defines the rescheduler deployment version on Kubernetes Clusters + DefaultReschedulerImage = "rescheduler:v0.3.1" + // DefaultReschedulerAddonName is the name of the rescheduler addon deployment + DefaultReschedulerAddonName = "rescheduler" ) const ( diff --git a/pkg/acsengine/defaults.go b/pkg/acsengine/defaults.go index b2b8d08ea8..ece2d0dae5 100644 --- a/pkg/acsengine/defaults.go +++ b/pkg/acsengine/defaults.go @@ -152,7 +152,7 @@ var ( // DefaultTillerAddonsConfig is the default tiller Kubernetes addon Config DefaultTillerAddonsConfig = api.KubernetesAddon{ Name: DefaultTillerAddonName, - Enabled: pointerToBool(true), + Enabled: pointerToBool(api.DefaultTillerAddonEnabled), Containers: []api.KubernetesContainerSpec{ { Name: DefaultTillerAddonName, @@ -167,7 +167,7 @@ var ( // DefaultDashboardAddonsConfig is the default kubernetes-dashboard addon Config DefaultDashboardAddonsConfig = api.KubernetesAddon{ Name: DefaultDashboardAddonName, - Enabled: pointerToBool(true), + Enabled: pointerToBool(api.DefaultDashboardAddonEnabled), Containers: []api.KubernetesContainerSpec{ { Name: DefaultDashboardAddonName, @@ -178,6 +178,21 @@ var ( }, }, } + + // DefaultReschedulerAddonsConfig is the default rescheduler Kubernetes addon Config + DefaultReschedulerAddonsConfig = api.KubernetesAddon{ + Name: DefaultReschedulerAddonName, + Enabled: pointerToBool(api.DefaultReschedulerAddonEnabled), + Containers: []api.KubernetesContainerSpec{ + { + Name: DefaultReschedulerAddonName, + CPURequests: "10m", + MemoryRequests: "100Mi", + CPULimits: "10m", + MemoryLimits: "100Mi", + }, + }, + } ) // SetPropertiesDefaults for the container Properties, returns true if certs are generated @@ -227,6 +242,7 @@ func setOrchestratorDefaults(cs *api.ContainerService) { o.KubernetesConfig.Addons = []api.KubernetesAddon{ DefaultTillerAddonsConfig, DefaultDashboardAddonsConfig, + DefaultReschedulerAddonsConfig, } } else { // For each addon, provide default configuration if user didn't provide its own config @@ -240,6 +256,11 @@ func setOrchestratorDefaults(cs *api.ContainerService) { // Provide default acs-engine config for Dashboard o.KubernetesConfig.Addons = append(o.KubernetesConfig.Addons, DefaultDashboardAddonsConfig) } + r := getAddonsIndexByName(o.KubernetesConfig.Addons, DefaultReschedulerAddonName) + if r < 0 { + // Provide default acs-engine config for Rescheduler + o.KubernetesConfig.Addons = append(o.KubernetesConfig.Addons, DefaultReschedulerAddonsConfig) + } } if o.KubernetesConfig.KubernetesImageBase == "" { o.KubernetesConfig.KubernetesImageBase = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase @@ -334,6 +355,10 @@ func setOrchestratorDefaults(cs *api.ContainerService) { if a.OrchestratorProfile.KubernetesConfig.Addons[d].IsEnabled(api.DefaultDashboardAddonEnabled) { a.OrchestratorProfile.KubernetesConfig.Addons[d] = assignDefaultAddonVals(a.OrchestratorProfile.KubernetesConfig.Addons[d], DefaultDashboardAddonsConfig) } + r := getAddonsIndexByName(a.OrchestratorProfile.KubernetesConfig.Addons, DefaultReschedulerAddonName) + if a.OrchestratorProfile.KubernetesConfig.Addons[r].IsEnabled(api.DefaultReschedulerAddonEnabled) { + a.OrchestratorProfile.KubernetesConfig.Addons[r] = assignDefaultAddonVals(a.OrchestratorProfile.KubernetesConfig.Addons[r], DefaultReschedulerAddonsConfig) + } if "" == a.OrchestratorProfile.KubernetesConfig.EtcdDiskSizeGB { a.OrchestratorProfile.KubernetesConfig.EtcdDiskSizeGB = DefaultEtcdDiskSize diff --git a/pkg/acsengine/engine.go b/pkg/acsengine/engine.go index dc541d2fd1..80d08a0631 100644 --- a/pkg/acsengine/engine.go +++ b/pkg/acsengine/engine.go @@ -121,6 +121,7 @@ var kubernetesAddonYamls = map[string]string{ "MASTER_ADDON_KUBERNETES_DASHBOARD_DEPLOYMENT_B64_GZIP_STR": "kubernetesmasteraddons-kubernetes-dashboard-deployment.yaml", "MASTER_ADDON_AZURE_STORAGE_CLASSES_B64_GZIP_STR": "kubernetesmasteraddons-azure-storage-classes.yaml", "MASTER_ADDON_TILLER_DEPLOYMENT_B64_GZIP_STR": "kubernetesmasteraddons-tiller-deployment.yaml", + "MASTER_ADDON_RESCHEDULER_DEPLOYMENT_B64_GZIP_STR": "kubernetesmasteraddons-kube-rescheduler-deployment.yaml", } var kubernetesAddonYamls15 = map[string]string{ @@ -570,7 +571,20 @@ func getParameters(cs *api.ContainerService, isClassicMode bool, generatorCode s if dashboardAddon.Containers[c].Image != "" { addValue(parametersMap, "kubernetesDashboardSpec", dashboardAddon.Containers[c].Image) } else { - addValue(parametersMap, "kubernetesDashboardSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion]["dashboard"]) + addValue(parametersMap, "kubernetesDashboardSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion][DefaultDashboardAddonName]) + } + } + reschedulerAddon := getAddonByName(properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultReschedulerAddonName) + c = getAddonContainersIndexByName(reschedulerAddon.Containers, DefaultReschedulerAddonName) + if c > -1 { + addValue(parametersMap, "kubernetesReschedulerCPURequests", reschedulerAddon.Containers[c].CPURequests) + addValue(parametersMap, "kubernetesReschedulerCPULimit", reschedulerAddon.Containers[c].CPULimits) + addValue(parametersMap, "kubernetesReschedulerMemoryRequests", reschedulerAddon.Containers[c].MemoryRequests) + addValue(parametersMap, "kubernetesReschedulerMemoryLimit", reschedulerAddon.Containers[c].MemoryLimits) + if reschedulerAddon.Containers[c].Image != "" { + addValue(parametersMap, "kubernetesReschedulerSpec", dashboardAddon.Containers[c].Image) + } else { + addValue(parametersMap, "kubernetesReschedulerSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion][DefaultReschedulerAddonName]) } } addValue(parametersMap, "kubernetesKubeDNSSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion]["dns"]) @@ -962,6 +976,9 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat if !profile.OrchestratorProfile.KubernetesConfig.IsDashboardEnabled() { delete(addonYamls, "MASTER_ADDON_KUBERNETES_DASHBOARD_DEPLOYMENT_B64_GZIP_STR") } + if !profile.OrchestratorProfile.KubernetesConfig.IsReschedulerEnabled() { + delete(addonYamls, "MASTER_ADDON_RESCHEDULER_DEPLOYMENT_B64_GZIP_STR") + } for placeholder, filename := range addonYamls { addonTextContents := getBase64CustomScript(filename) str = strings.Replace(str, placeholder, addonTextContents, -1) @@ -1175,6 +1192,8 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat tC := getAddonContainersIndexByName(tillerAddon.Containers, DefaultTillerAddonName) dashboardAddon := getAddonByName(cs.Properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultDashboardAddonName) dC := getAddonContainersIndexByName(dashboardAddon.Containers, DefaultDashboardAddonName) + reschedulerAddon := getAddonByName(cs.Properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultReschedulerAddonName) + rC := getAddonContainersIndexByName(reschedulerAddon.Containers, DefaultReschedulerAddonName) switch attr { case "kubernetesHyperkubeSpec": val = cs.Properties.OrchestratorProfile.KubernetesConfig.KubernetesImageBase + KubeConfigs[k8sVersion]["hyperkube"] @@ -1191,7 +1210,7 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat val = dashboardAddon.Containers[dC].Image } } else { - val = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase + KubeConfigs[k8sVersion]["dashboard"] + val = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase + KubeConfigs[k8sVersion][DefaultDashboardAddonName] } case "kubernetesDashboardCPURequests": if dC > -1 { @@ -1255,6 +1274,38 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat } else { val = "" } + case "kubernetesReschedulerSpec": + if rC > -1 { + if reschedulerAddon.Containers[rC].Image != "" { + val = reschedulerAddon.Containers[rC].Image + } + } else { + val = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase + KubeConfigs[k8sVersion][DefaultReschedulerAddonName] + } + case "kubernetesReschedulerCPURequests": + if rC > -1 { + val = reschedulerAddon.Containers[rC].CPURequests + } else { + val = "" + } + case "kubernetesReschedulerMemoryRequests": + if rC > -1 { + val = reschedulerAddon.Containers[rC].MemoryRequests + } else { + val = "" + } + case "kubernetesReschedulerCPULimit": + if rC > -1 { + val = reschedulerAddon.Containers[rC].CPULimits + } else { + val = "" + } + case "kubernetesReschedulerMemoryLimit": + if rC > -1 { + val = reschedulerAddon.Containers[rC].MemoryLimits + } else { + val = "" + } case "kubernetesKubeDNSSpec": val = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase + KubeConfigs[k8sVersion]["dns"] case "kubernetesPodInfraContainerSpec": diff --git a/pkg/acsengine/k8s_versions.go b/pkg/acsengine/k8s_versions.go index 6e0f901856..b53245a229 100644 --- a/pkg/acsengine/k8s_versions.go +++ b/pkg/acsengine/k8s_versions.go @@ -9,408 +9,423 @@ import ( // KubeConfigs represents Docker images used for Kubernetes components based on Kubernetes versions (major.minor.patch) var KubeConfigs = map[string]map[string]string{ common.KubernetesVersion1Dot8Dot2: { - "hyperkube": "hyperkube-amd64:v1.8.2", - "dashboard": "kubernetes-dashboard-amd64:v1.7.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.8.2-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.8.2", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.7.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.8.2-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot8Dot1: { - "hyperkube": "hyperkube-amd64:v1.8.1", - "dashboard": "kubernetes-dashboard-amd64:v1.7.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.8.1-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.8.1", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.7.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.8.1-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot8Dot0: { - "hyperkube": "hyperkube-amd64:v1.8.0", - "dashboard": "kubernetes-dashboard-amd64:v1.7.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.8.0-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.8.0", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.7.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.8.0-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot10: { - "hyperkube": "hyperkube-amd64:v1.7.10", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.10-1int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.10", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.10-1int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot9: { - "hyperkube": "hyperkube-amd64:v1.7.9", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.9-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.9", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.9-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot7: { - "hyperkube": "hyperkube-amd64:v1.7.7", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.7-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.7", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.7-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot5: { - "hyperkube": "hyperkube-amd64:v1.7.5", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.2", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.5-4int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.5", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.2", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.5-4int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot4: { - "hyperkube": "hyperkube-amd64:v1.7.4", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.1", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.4-2int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.4", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.1", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.4-2int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot2: { - "hyperkube": "hyperkube-amd64:v1.7.2", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.4.1", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "windowszip": "v1.7.2-1int.zip", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.2", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.4.1", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "windowszip": "v1.7.2-1int.zip", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot1: { - "hyperkube": "hyperkube-amd64:v1.7.1", - "dashboard": "kubernetes-dashboard-amd64:v1.6.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster:v1.4.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.1", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster:v1.4.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot7Dot0: { - "hyperkube": "hyperkube-amd64:v1.7.0", - "dashboard": "kubernetes-dashboard-amd64:v1.6.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster:v1.4.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.7.0", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster:v1.4.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot6Dot12: { - "hyperkube": "hyperkube-amd64:v1.6.12", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.3.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.6.12", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.3.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot6Dot11: { - "hyperkube": "hyperkube-amd64:v1.6.11", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.3.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.5", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.6.11", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.3.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.5", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.5", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot6Dot9: { - "hyperkube": "hyperkube-amd64:v1.6.9", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.3.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.6.9", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.3.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot6Dot6: { - "hyperkube": "hyperkube-amd64:v1.6.6", - "dashboard": "kubernetes-dashboard-amd64:v1.6.3", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.7", - "heapster": "heapster-amd64:v1.3.0", - "dns": "k8s-dns-kube-dns-amd64:1.14.4", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: DefaultTillerImage, - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), - "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), - "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), - "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), - "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), - "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.6.6", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.6.3", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.7", + "heapster": "heapster-amd64:v1.3.0", + "dns": "k8s-dns-kube-dns-amd64:1.14.4", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.4", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: DefaultTillerImage, + DefaultReschedulerAddonName: DefaultReschedulerImage, + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "backoffretries": strconv.Itoa(DefaultKubernetesCloudProviderBackoffRetries), + "backoffjitter": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffJitter, 'f', -1, 64), + "backoffduration": strconv.Itoa(DefaultKubernetesCloudProviderBackoffDuration), + "backoffexponent": strconv.FormatFloat(DefaultKubernetesCloudProviderBackoffExponent, 'f', -1, 64), + "ratelimitqps": strconv.FormatFloat(DefaultKubernetesCloudProviderRateLimitQPS, 'f', -1, 64), + "ratelimitbucket": strconv.Itoa(DefaultKubernetesCloudProviderRateLimitBucket), + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot5Dot8: { - "hyperkube": "hyperkube-amd64:v1.5.8", - "dashboard": "kubernetes-dashboard-amd64:v1.5.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.6", - "heapster": "heapster:v1.2.0", - "dns": "kubedns-amd64:1.7", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "kube-dnsmasq-amd64:1.3", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: "tiller:v2.5.1", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.5.8", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.5.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.6", + "heapster": "heapster:v1.2.0", + "dns": "kubedns-amd64:1.7", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "kube-dnsmasq-amd64:1.3", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: "tiller:v2.5.1", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, common.KubernetesVersion1Dot5Dot7: { - "hyperkube": "hyperkube-amd64:v1.5.7", - "dashboard": "kubernetes-dashboard-amd64:v1.5.1", - "exechealthz": "exechealthz-amd64:1.2", - "addonresizer": "addon-resizer:1.6", - "heapster": "heapster:v1.2.0", - "dns": "kubedns-amd64:1.7", - "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", - "dnsmasq": "kube-dnsmasq-amd64:1.3", - "pause": "pause-amd64:3.0", - DefaultTillerAddonName: "tiller:v2.5.1", - "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, - "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, - "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, - "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, - "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), - "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), + "hyperkube": "hyperkube-amd64:v1.5.7", + DefaultDashboardAddonName: "kubernetes-dashboard-amd64:v1.5.1", + "exechealthz": "exechealthz-amd64:1.2", + "addonresizer": "addon-resizer:1.6", + "heapster": "heapster:v1.2.0", + "dns": "kubedns-amd64:1.7", + "addonmanager": "kube-addon-manager-amd64:v6.4-beta.2", + "dnsmasq": "kube-dnsmasq-amd64:1.3", + "pause": "pause-amd64:3.0", + DefaultTillerAddonName: "tiller:v2.5.1", + "nodestatusfreq": DefaultKubernetesNodeStatusUpdateFrequency, + "nodegraceperiod": DefaultKubernetesCtrlMgrNodeMonitorGracePeriod, + "podeviction": DefaultKubernetesCtrlMgrPodEvictionTimeout, + "routeperiod": DefaultKubernetesCtrlMgrRouteReconciliationPeriod, + "gchighthreshold": strconv.Itoa(DefaultKubernetesGCHighThreshold), + "gclowthreshold": strconv.Itoa(DefaultKubernetesGCLowThreshold), }, } diff --git a/pkg/api/const.go b/pkg/api/const.go index f55819d9d6..531e1e6a01 100644 --- a/pkg/api/const.go +++ b/pkg/api/const.go @@ -86,4 +86,12 @@ const ( DefaultTillerAddonEnabled = true // DefaultDashboardAddonEnabled determines the acs-engine provided default for enabling kubernetes-dashboard addon DefaultDashboardAddonEnabled = true + // DefaultReschedulerAddonEnabled determines the acs-engine provided default for enabling kubernetes-rescheduler addon + DefaultReschedulerAddonEnabled = false + // DefaultTillerAddonName is the name of the tiller addon deployment + DefaultTillerAddonName = "tiller" + // DefaultDashboardAddonName is the name of the kubernetes-dashboard addon deployment + DefaultDashboardAddonName = "kubernetes-dashboard" + // DefaultReschedulerAddonName is the name of the rescheduler addon deployment + DefaultReschedulerAddonName = "rescheduler" ) diff --git a/pkg/api/types.go b/pkg/api/types.go index 0442f518ad..e4c81fa2df 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -582,7 +582,7 @@ func (o *OrchestratorProfile) GetAPIServerEtcdAPIVersion() string { func (k *KubernetesConfig) IsTillerEnabled() bool { var tillerAddon KubernetesAddon for i := range k.Addons { - if k.Addons[i].Name == "tiller" { + if k.Addons[i].Name == DefaultTillerAddonName { tillerAddon = k.Addons[i] } } @@ -593,9 +593,20 @@ func (k *KubernetesConfig) IsTillerEnabled() bool { func (k *KubernetesConfig) IsDashboardEnabled() bool { var dashboardAddon KubernetesAddon for i := range k.Addons { - if k.Addons[i].Name == "kubernetes-dashboard" { + if k.Addons[i].Name == DefaultDashboardAddonName { dashboardAddon = k.Addons[i] } } return dashboardAddon.IsEnabled(DefaultDashboardAddonEnabled) } + +// IsReschedulerEnabled checks if the rescheduler addon is enabled +func (k *KubernetesConfig) IsReschedulerEnabled() bool { + var reschedulerAddon KubernetesAddon + for i := range k.Addons { + if k.Addons[i].Name == DefaultReschedulerAddonName { + reschedulerAddon = k.Addons[i] + } + } + return reschedulerAddon.IsEnabled(DefaultReschedulerAddonEnabled) +} diff --git a/pkg/api/types_test.go b/pkg/api/types_test.go index 9af88ff4fb..749290ace3 100644 --- a/pkg/api/types_test.go +++ b/pkg/api/types_test.go @@ -94,17 +94,17 @@ func TestIsTillerEnabled(t *testing.T) { if e != DefaultTillerAddonEnabled { t.Fatalf("KubernetesConfig.IsTillerEnabled() should return %t when no tiller addon has been specified, instead returned %t", DefaultTillerAddonEnabled, e) } - c.Addons = append(c.Addons, getMockAddon("tiller")) + c.Addons = append(c.Addons, getMockAddon(DefaultTillerAddonName)) e = c.IsTillerEnabled() if e != true { t.Fatalf("KubernetesConfig.IsTillerEnabled() should return true when a custom tiller addon has been specified, instead returned %t", e) } - f := false + b := false c = KubernetesConfig{ Addons: []KubernetesAddon{ { - Name: "tiller", - Enabled: &f, + Name: DefaultTillerAddonName, + Enabled: &b, }, }, } @@ -124,17 +124,17 @@ func TestIsDashboardEnabled(t *testing.T) { if e != DefaultDashboardAddonEnabled { t.Fatalf("KubernetesConfig.IsDashboardEnabled() should return %t when no kubernetes-dashboard addon has been specified, instead returned %t", DefaultDashboardAddonEnabled, e) } - c.Addons = append(c.Addons, getMockAddon("kubernetes-dashboard")) + c.Addons = append(c.Addons, getMockAddon(DefaultDashboardAddonName)) e = c.IsDashboardEnabled() if e != true { t.Fatalf("KubernetesConfig.IsDashboardEnabled() should return true when a custom kubernetes-dashboard addon has been specified, instead returned %t", e) } - f := false + b := false c = KubernetesConfig{ Addons: []KubernetesAddon{ { - Name: "kubernetes-dashboard", - Enabled: &f, + Name: DefaultDashboardAddonName, + Enabled: &b, }, }, } @@ -144,6 +144,36 @@ func TestIsDashboardEnabled(t *testing.T) { } } +func TestIsReschedulerEnabled(t *testing.T) { + c := KubernetesConfig{ + Addons: []KubernetesAddon{ + getMockAddon("addon"), + }, + } + e := c.IsReschedulerEnabled() + if e != DefaultReschedulerAddonEnabled { + t.Fatalf("KubernetesConfig.IsReschedulerEnabled() should return %t when no rescheduler addon has been specified, instead returned %t", DefaultReschedulerAddonEnabled, e) + } + c.Addons = append(c.Addons, getMockAddon(DefaultReschedulerAddonName)) + e = c.IsReschedulerEnabled() + if e != false { + t.Fatalf("KubernetesConfig.IsReschedulerEnabled() should return true when a custom rescheduler addon has been specified, instead returned %t", e) + } + b := true + c = KubernetesConfig{ + Addons: []KubernetesAddon{ + { + Name: DefaultReschedulerAddonName, + Enabled: &b, + }, + }, + } + e = c.IsReschedulerEnabled() + if e != true { + t.Fatalf("KubernetesConfig.IsReschedulerEnabled() should return false when a custom rescheduler addon has been specified as enabled, instead returned %t", e) + } +} + func getMockAddon(name string) KubernetesAddon { return KubernetesAddon{ Name: name, diff --git a/test/acse-conf/acse-regression.json b/test/acse-conf/acse-regression.json index 3f76898a27..2a97c66e4c 100644 --- a/test/acse-conf/acse-regression.json +++ b/test/acse-conf/acse-regression.json @@ -77,6 +77,10 @@ "cluster_definition": "kubernetes-config/kubernetes-no-dashboard.json", "category": "config" }, + { + "cluster_definition": "kubernetes-config/kubernetes-rescheduler.json", + "category": "config" + }, { "cluster_definition": "v20170131/swarmmode.json", "category": "version" @@ -94,4 +98,4 @@ "category": "network" } ] -} +} \ No newline at end of file diff --git a/test/cluster-tests/kubernetes/test.sh b/test/cluster-tests/kubernetes/test.sh index e6fe85a577..8d38e61ffd 100755 --- a/test/cluster-tests/kubernetes/test.sh +++ b/test/cluster-tests/kubernetes/test.sh @@ -102,7 +102,7 @@ fi ###### Check existence and status of essential pods # we test other essential pods (kube-dns, kube-proxy) separately -pods="heapster kube-addon-manager kube-apiserver kube-controller-manager kube-scheduler tiller" +pods="heapster rescheduler kube-addon-manager kube-apiserver kube-controller-manager kube-scheduler tiller" log "Checking $pods" count=60