diff --git a/.circleci/config.yml b/.circleci/config.yml index d241894f5..af0892451 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -175,6 +175,34 @@ jobs: path: /go/src/github.com/Azure/acs-engine/_logs - store_artifacts: path: /go/src/github.com/Azure/acs-engine/_output + k8s-1.13-release-e2e: + <<: *defaults + steps: + - checkout + - run: | + echo 'export TIMEOUT=20m' >> $BASH_ENV + echo 'export ORCHESTRATOR_RELEASE=1.13' >> $BASH_ENV + echo 'export CLUSTER_DEFINITION=examples/e2e-tests/kubernetes/release/default/definition.json' >> $BASH_ENV + echo 'export CREATE_VNET=true' >> $BASH_ENV + echo 'export ENABLE_KMS_ENCRYPTION=true' >> $BASH_ENV + echo 'export CLEANUP_ON_EXIT=${CLEANUP_ON_EXIT}' >> $BASH_ENV + echo 'export CLEANUP_IF_FAIL=${CLEANUP_IF_FAIL_LINUX}' >> $BASH_ENV + echo 'export RETAIN_SSH=false' >> $BASH_ENV + echo 'export SUBSCRIPTION_ID=${SUBSCRIPTION_ID_E2E_KUBERNETES}' >> $BASH_ENV + echo 'export CLIENT_ID=${SERVICE_PRINCIPAL_CLIENT_ID_E2E_KUBERNETES}' >> $BASH_ENV + echo 'export CLIENT_SECRET=${SERVICE_PRINCIPAL_CLIENT_SECRET_E2E_KUBERNETES}' >> $BASH_ENV + echo 'export CLIENT_OBJECTID=${SERVICE_PRINCIPAL_OBJECT_ID_E2E_KUBERNETES}' >> $BASH_ENV + - run: + name: compile + command: make build-binary + - run: + name: ginkgo k8s e2e tests + command: make test-kubernetes + no_output_timeout: "30m" + - store_artifacts: + path: /go/src/github.com/Azure/acs-engine/_logs + - store_artifacts: + path: /go/src/github.com/Azure/acs-engine/_output k8s-1.8-release-e2e: <<: *defaults steps: @@ -301,6 +329,31 @@ jobs: path: /go/src/github.com/Azure/acs-engine/_logs - store_artifacts: path: /go/src/github.com/Azure/acs-engine/_output + k8s-windows-1.13-release-e2e: + <<: *defaults + steps: + - checkout + - run: | + echo 'export TIMEOUT=30m' >> $BASH_ENV + echo 'export ORCHESTRATOR_RELEASE=1.13' >> $BASH_ENV + echo 'export CLUSTER_DEFINITION=examples/e2e-tests/kubernetes/windows/hybrid/definition.json' >> $BASH_ENV + echo 'export CLEANUP_ON_EXIT=${CLEANUP_ON_EXIT}' >> $BASH_ENV + echo 'export CLEANUP_IF_FAIL=${CLEANUP_IF_FAIL_WINDOWS}' >> $BASH_ENV + echo 'export RETAIN_SSH=false' >> $BASH_ENV + echo 'export SUBSCRIPTION_ID=${SUBSCRIPTION_ID_E2E_KUBERNETES}' >> $BASH_ENV + echo 'export CLIENT_ID=${SERVICE_PRINCIPAL_CLIENT_ID_E2E_KUBERNETES}' >> $BASH_ENV + echo 'export CLIENT_SECRET=${SERVICE_PRINCIPAL_CLIENT_SECRET_E2E_KUBERNETES}' >> $BASH_ENV + - run: + name: compile + command: make build-binary + - run: + name: ginkgo k8s windows e2e tests + command: make test-kubernetes + no_output_timeout: "30m" + - store_artifacts: + path: /go/src/github.com/Azure/acs-engine/_logs + - store_artifacts: + path: /go/src/github.com/Azure/acs-engine/_output workflows: version: 2 build_and_test_pr: @@ -352,6 +405,12 @@ workflows: filters: branches: ignore: master + - k8s-windows-1.13-release-e2e: + requires: + - pr-e2e-hold + filters: + branches: + ignore: master - k8s-1.9-release-e2e: requires: - pr-e2e-hold @@ -376,6 +435,12 @@ workflows: filters: branches: ignore: master + - k8s-1.13-release-e2e: + requires: + - pr-e2e-hold + filters: + branches: + ignore: master build_and_test_master: jobs: - test: diff --git a/pkg/api/common/versions.go b/pkg/api/common/versions.go index 094f1f394..956cbd730 100644 --- a/pkg/api/common/versions.go +++ b/pkg/api/common/versions.go @@ -86,6 +86,7 @@ var AllKubernetesSupportedVersions = map[string]bool{ "1.12.0-rc.2": false, "1.12.0": true, "1.12.1": true, + "1.13.0-alpha.1": true, } // GetDefaultKubernetesVersion returns the default Kubernetes version, that is the latest patch of the default release diff --git a/pkg/api/k8s_versions.go b/pkg/api/k8s_versions.go index dca8642c0..5aa19aa8f 100644 --- a/pkg/api/k8s_versions.go +++ b/pkg/api/k8s_versions.go @@ -8,6 +8,38 @@ import ( ) var k8sComponentVersions = map[string]map[string]string{ + "1.13": { + "dockerEngine": "1.13.*", + "dashboard": "kubernetes-dashboard-amd64:v1.10.0", + "addon-resizer": "addon-resizer:1.8.1", + "heapster": "heapster-amd64:v1.5.3", + "metrics-server": "metrics-server-amd64:v0.2.1", + "coredns": "coredns:1.2.2", + "kube-dns": "k8s-dns-kube-dns-amd64:1.14.13", + "addon-manager": "kube-addon-manager-amd64:v8.8", + "dnsmasq": "k8s-dns-dnsmasq-nanny-amd64:1.14.10", + "pause": "pause-amd64:3.1", + "tiller": "tiller:v2.8.1", + "rescheduler": "rescheduler:v0.4.0", + "aci-connector": "virtual-kubelet:latest", + ContainerMonitoringAddonName: "oms:ciprod05082018", + AzureCNINetworkMonitoringAddonName: "networkmonitor:v0.0.4", + "cluster-autoscaler": "cluster-autoscaler:v1.3.3", + NVIDIADevicePluginAddonName: "k8s-device-plugin:1.11", + "k8s-dns-sidecar": "k8s-dns-sidecar-amd64:1.14.10", + "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), + }, "1.12": { "dockerEngine": "1.13.*", "dashboard": "kubernetes-dashboard-amd64:v1.10.0", @@ -281,6 +313,43 @@ func getK8sVersionComponents(version string, overrides map[string]string) map[st majorMinor := strings.Join(s[:2], ".") var ret map[string]string switch majorMinor { + case "1.13": + ret = map[string]string{ + "hyperkube": "hyperkube-amd64:v" + version, + "ccm": "cloud-controller-manager-amd64:v" + version, + "windowszip": "v" + version + "-1int.zip", + "dockerEngineVersion": k8sComponentVersions["1.13"]["dockerEngine"], + DefaultDashboardAddonName: k8sComponentVersions["1.13"]["dashboard"], + "exechealthz": k8sComponentVersions["1.13"]["exechealthz"], + "addonresizer": k8sComponentVersions["1.13"]["addon-resizer"], + "heapster": k8sComponentVersions["1.13"]["heapster"], + DefaultMetricsServerAddonName: k8sComponentVersions["1.13"]["metrics-server"], + "coredns": k8sComponentVersions["1.13"]["coredns"], + "kube-dns": k8sComponentVersions["1.13"]["kube-dns"], + "addonmanager": k8sComponentVersions["1.13"]["addon-manager"], + "dnsmasq": k8sComponentVersions["1.13"]["dnsmasq"], + "pause": k8sComponentVersions["1.13"]["pause"], + DefaultTillerAddonName: k8sComponentVersions["1.13"]["tiller"], + DefaultReschedulerAddonName: k8sComponentVersions["1.13"]["rescheduler"], + DefaultACIConnectorAddonName: k8sComponentVersions["1.13"]["aci-connector"], + ContainerMonitoringAddonName: k8sComponentVersions["1.13"][ContainerMonitoringAddonName], + AzureCNINetworkMonitoringAddonName: k8sComponentVersions["1.13"][AzureCNINetworkMonitoringAddonName], + DefaultClusterAutoscalerAddonName: k8sComponentVersions["1.13"]["cluster-autoscaler"], + "k8s-dns-sidecar": k8sComponentVersions["1.13"]["k8s-dns-sidecar"], + "nodestatusfreq": k8sComponentVersions["1.13"]["nodestatusfreq"], + "nodegraceperiod": k8sComponentVersions["1.13"]["nodegraceperiod"], + "podeviction": k8sComponentVersions["1.13"]["podeviction"], + "routeperiod": k8sComponentVersions["1.13"]["routeperiod"], + "backoffretries": k8sComponentVersions["1.13"]["backoffretries"], + "backoffjitter": k8sComponentVersions["1.13"]["backoffjitter"], + "backoffduration": k8sComponentVersions["1.13"]["backoffduration"], + "backoffexponent": k8sComponentVersions["1.13"]["backoffexponent"], + "ratelimitqps": k8sComponentVersions["1.13"]["ratelimitqps"], + "ratelimitbucket": k8sComponentVersions["1.13"]["ratelimitbucket"], + "gchighthreshold": k8sComponentVersions["1.13"]["gchighthreshold"], + "gclowthreshold": k8sComponentVersions["1.13"]["gclowthreshold"], + NVIDIADevicePluginAddonName: k8sComponentVersions["1.13"][NVIDIADevicePluginAddonName], + } case "1.12": ret = map[string]string{ "hyperkube": "hyperkube-amd64:v" + version, diff --git a/pkg/operations/kubernetesupgrade/upgradecluster.go b/pkg/operations/kubernetesupgrade/upgradecluster.go index 772523224..f4505ed4d 100644 --- a/pkg/operations/kubernetesupgrade/upgradecluster.go +++ b/pkg/operations/kubernetesupgrade/upgradecluster.go @@ -117,7 +117,8 @@ func (uc *UpgradeCluster) UpgradeCluster(subscriptionID uuid.UUID, kubeConfig, r case strings.HasPrefix(upgradeVersion, "1.9."), strings.HasPrefix(upgradeVersion, "1.10."), strings.HasPrefix(upgradeVersion, "1.11."), - strings.HasPrefix(upgradeVersion, "1.12."): + strings.HasPrefix(upgradeVersion, "1.12."), + strings.HasPrefix(upgradeVersion, "1.13."): u := &Upgrader{} u.Init(uc.Translator, uc.Logger, uc.ClusterTopology, uc.Client, kubeConfig, uc.StepTimeout, acsengineVersion) upgrader = u