diff --git a/hack/jenkins/e2e.sh b/hack/jenkins/e2e.sh index 178d5347b72c..b0fe373fcf77 100755 --- a/hack/jenkins/e2e.sh +++ b/hack/jenkins/e2e.sh @@ -110,9 +110,22 @@ GKE_REQUIRED_SKIP_TESTS=( "Etcd\sFailure" "MasterCerts" "Shell" + "experimental\sresource\susage\stracking" # Expect --max-pods=100 + ) + +# Specialized tests which should be skipped by default for GKE. +GKE_DEFAULT_SKIP_TESTS=( "Daemon\sset" + "Deployment" + "Jobs" + "${GKE_REQUIRED_SKIP_TESTS[@]}" ) +# Tests which cannot be run on AWS. +AWS_REQUIRED_SKIP_TESTS=( + "experimental\sresource\susage\stracking" # Expect --max-pods=100 +) + # The following tests are known to be flaky, and are thus run only in their own # -flaky- build variants. GCE_FLAKY_TESTS=( @@ -301,6 +314,7 @@ case ${JOB_NAME} in ${GCE_PARALLEL_SKIP_TESTS[@]:+${GCE_PARALLEL_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ ${GCE_PARALLEL_FLAKY_TESTS[@]:+${GCE_PARALLEL_FLAKY_TESTS[@]}} \ + ${AWS_REQUIRED_SKIP_TESTS[@]:+${AWS_REQUIRED_SKIP_TESTS[@]}} \ )"} : ${ENABLE_DEPLOYMENTS:=true} # Override AWS defaults. @@ -393,7 +407,7 @@ case ${JOB_NAME} in : ${JENKINS_USE_SERVER_VERSION:=y} : ${PROJECT:="k8s-jkns-e2e-gke-prod"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ )"} @@ -408,7 +422,7 @@ case ${JOB_NAME} in : ${JENKINS_USE_SERVER_VERSION:=y} : ${PROJECT:="k8s-jkns-e2e-gke-staging"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ )"} @@ -423,7 +437,7 @@ case ${JOB_NAME} in : ${JENKINS_USE_RELEASE_TARS:=y} : ${PROJECT:="k8s-jkns-e2e-gke-ci"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ )"} @@ -438,9 +452,10 @@ case ${JOB_NAME} in : ${E2E_SET_CLUSTER_API_VERSION:=y} : ${PROJECT:="k8s-jkns-e2e-gke-ci"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ )"} ;; @@ -453,13 +468,45 @@ case ${JOB_NAME} in : ${E2E_SET_CLUSTER_API_VERSION:=y} : ${PROJECT:="k8s-jkns-e2e-gke-ci"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${REBOOT_SKIP_TESTS[@]:+${REBOOT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ ${GCE_PARALLEL_SKIP_TESTS[@]:+${GCE_PARALLEL_SKIP_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ + )"} + ;; + + kubernetes-e2e-gke-1.1) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-release-1-1"} + : ${E2E_NETWORK:="gke-release-1-1"} + : ${E2E_SET_CLUSTER_API_VERSION:=y} + : ${JENKINS_PUBLISHED_VERSION:="ci/latest-1.1"} + : ${PROJECT:="k8s-jkns-e2e-gke-release-1-1"} + : ${FAIL_ON_GCP_RESOURCE_LEAK:="true"} + # Note Daemon sets and Deployments are experimental features in 1.1, + # and are turned off in GKE. + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + "Daemon\sset|Deployment" \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ )"} ;; + # kubernetes-upgrade-gke + # + # This suite: + # + # 1. launches a cluster at release/latest, + # 2. upgrades the master to ci/latest, + # 3. runs release/latest e2es, + # 4. upgrades the rest of the cluster, + # 5. runs release/latest e2es again, then + # 6. runs ci/latest e2es and tears down the cluster. + kubernetes-upgrade-gke-step1-deploy) : ${DOGFOOD_GCLOUD:="true"} : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} @@ -472,7 +519,41 @@ case ${JOB_NAME} in : ${E2E_DOWN:="false"} ;; - kubernetes-upgrade-gke-step2-upgrade) + kubernetes-upgrade-gke-step2-upgrade-master) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade"} + : ${E2E_NETWORK:="gke-upgrade"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-master"} + ;; + + kubernetes-upgrade-gke-step3-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade"} + : ${E2E_NETWORK:="gke-upgrade"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run release/latest e2es + : ${JENKINS_PUBLISHED_VERSION:="release/latest"} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + )"} + ;; + + kubernetes-upgrade-gke-step4-upgrade-cluster) : ${DOGFOOD_GCLOUD:="true"} : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} : ${E2E_CLUSTER_NAME:="gke-upgrade"} @@ -486,8 +567,28 @@ case ${JOB_NAME} in : ${E2E_DOWN:="false"} : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-cluster"} ;; - - kubernetes-upgrade-gke-step3-e2e) + + kubernetes-upgrade-gke-step5-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade"} + : ${E2E_NETWORK:="gke-upgrade"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run release/latest e2es + : ${JENKINS_PUBLISHED_VERSION:="release/latest"} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + )"} + ;; + + kubernetes-upgrade-gke-step6-e2e-new) : ${DOGFOOD_GCLOUD:="true"} : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} : ${E2E_CLUSTER_NAME:="gke-upgrade"} @@ -498,12 +599,257 @@ case ${JOB_NAME} in : ${E2E_TEST:="true"} : ${E2E_DOWN:="true"} : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ - ${GKE_REQUIRED_SKIP_TESTS[@]:+${GKE_REQUIRED_SKIP_TESTS[@]}} \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ + )"} + ;; + + # kubernetes-upgrade-gke-stable-latest + # + # This suite: + # + # 1. launches a cluster at release/stable, + # 2. upgrades the master to release/latest, + # 3. runs release/stable e2es, + # 4. upgrades the rest of the cluster, + # 5. runs release/stable e2es again, then + # 6. runs release/latest e2es and tears down the cluster. + + kubernetes-upgrade-stable-latest-gke-step1-deploy) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${JENKINS_PUBLISHED_VERSION:="release/stable"} + : ${E2E_SET_CLUSTER_API_VERSION:=y} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="true"} + : ${E2E_TEST:="false"} + : ${E2E_DOWN:="false"} + ;; + + kubernetes-upgrade-stable-latest-gke-step2-upgrade-master) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${E2E_OPT:="--check_version_skew=false"} + # We have to get tars at ci/latest (JENKINS_PUBLISHED_VERSION default) to + # get the latest upgrade logic. + : ${JENKINS_FORCE_GET_TARS:=y} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-master --upgrade-target=release/latest"} + ;; + + kubernetes-upgrade-stable-latest-gke-step3-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run old e2es + : ${JENKINS_PUBLISHED_VERSION:="release/stable"} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ )"} ;; + kubernetes-upgrade-stable-latest-gke-step4-upgrade-cluster) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${E2E_OPT:="--check_version_skew=false"} + # We have to get tars at ci/latest (JENKINS_PUBLISHED_VERSION default) to + # get the latest upgrade logic. + : ${JENKINS_FORCE_GET_TARS:=y} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-cluster --upgrade-target=release/latest"} + ;; + + kubernetes-upgrade-stable-latest-gke-step5-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run old e2es + : ${JENKINS_PUBLISHED_VERSION:="release/stable"} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + )"} + ;; + + kubernetes-upgrade-stable-latest-gke-step6-e2e-new) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-stable-latest"} + : ${E2E_NETWORK:="gke-upgrade-stable-latest"} + : ${JENKINS_FORCE_GET_TARS:=y} + : ${JENKINS_PUBLISHED_VERSION:="release/latest"} + : ${PROJECT:="k8s-jkns-upgrade-fixed-1"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="true"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ + )"} + ;; + + # kubernetes-upgrade-gke-1.0-1.1 + # + # This suite: + # + # 1. launches a cluster at ci/latest-1.0, + # 2. upgrades the master to ci/latest-1.1 + # 3. runs ci/latest-1.0 e2es, + # 4. upgrades the rest of the cluster, + # 5. runs ci/latest-1.0 e2es again, then + # 6. runs ci/latest-1.1 e2es and tears down the cluster. + + kubernetes-upgrade-1.0-1.1-gke-step1-deploy) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + : ${JENKINS_PUBLISHED_VERSION:="ci/latest-1.0"} + : ${E2E_SET_CLUSTER_API_VERSION:=y} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="true"} + : ${E2E_TEST:="false"} + : ${E2E_DOWN:="false"} + ;; + + kubernetes-upgrade-1.0-1.1-gke-step2-upgrade-master) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + : ${E2E_OPT:="--check_version_skew=false"} + # We have to get tars at ci/latest (JENKINS_PUBLISHED_VERSION default) to + # get the latest upgrade logic. + : ${JENKINS_FORCE_GET_TARS:=y} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-master --upgrade-target=ci/latest-1.1"} + ;; + + kubernetes-upgrade-1.0-1.1-gke-step3-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run old e2es + : ${JENKINS_PUBLISHED_VERSION:="ci/latest-1.0"} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + )"} + ;; + + kubernetes-upgrade-1.0-1.1-gke-step4-upgrade-cluster) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + : ${E2E_OPT:="--check_version_skew=false"} + # We have to get tars at ci/latest (JENKINS_PUBLISHED_VERSION default) to + # get the latest upgrade logic. + : ${JENKINS_FORCE_GET_TARS:=y} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.focus=Skipped.*Cluster\supgrade.*upgrade-cluster --upgrade-target=ci/latest-1.1"} + ;; + + kubernetes-upgrade-1.0-1.1-gke-step5-e2e-old) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + # Run old e2es + : ${JENKINS_PUBLISHED_VERSION:="ci/latest-1.0"} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="false"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + )"} + ;; + + kubernetes-upgrade-1.0-1.1-gke-step6-e2e-new) + : ${DOGFOOD_GCLOUD:="true"} + : ${GKE_API_ENDPOINT:="https://test-container.sandbox.googleapis.com/"} + : ${E2E_CLUSTER_NAME:="gke-upgrade-1-0"} + : ${E2E_NETWORK:="gke-upgrade-1-0"} + # TODO(15011): these really shouldn't be (very) version skewed, but because + # we have to get ci/latest-1.1 again, it could get slightly out of whack. + : ${E2E_OPT:="--check_version_skew=false"} + : ${JENKINS_FORCE_GET_TARS:=y} + : ${JENKINS_PUBLISHED_VERSION:="ci/latest-1.1"} + : ${PROJECT:="kubernetes-jenkins-gke-upgrade"} + : ${E2E_UP:="false"} + : ${E2E_TEST:="true"} + : ${E2E_DOWN:="true"} + : ${GINKGO_TEST_ARGS:="--ginkgo.skip=$(join_regex_allow_empty \ + ${GKE_DEFAULT_SKIP_TESTS[@]:+${GKE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_DEFAULT_SKIP_TESTS[@]:+${GCE_DEFAULT_SKIP_TESTS[@]}} \ + ${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \ + ${GCE_SLOW_TESTS[@]:+${GCE_SLOW_TESTS[@]}} \ + )"} + ;; + + # kubernetes-upgrade-gce + # + # This suite: + # + # 1. launches a cluster at release/latest, + # 2. upgrades the master to ci/latest, + # 3. runs release/latest e2es, + # 4. upgrades the rest of the cluster, + # 5. runs release/latest e2es again, then + # 6. runs ci/latest e2es and tears down the cluster. + kubernetes-upgrade-gce-step1-deploy) : ${E2E_CLUSTER_NAME:="gce-upgrade"} : ${E2E_NETWORK:="gce-upgrade"} diff --git a/test/e2e/job.go b/test/e2e/job.go index 9554121436b2..41da508aee59 100644 --- a/test/e2e/job.go +++ b/test/e2e/job.go @@ -40,7 +40,6 @@ const ( jobSelectorKey = "job" ) -// TODO: Activate these tests for GKE when we support experimental APIs there. var _ = Describe("Job", func() { f := NewFramework("job") parallelism := 2 @@ -49,7 +48,6 @@ var _ = Describe("Job", func() { // Simplest case: all pods succeed promptly It("should run a job to completion when tasks succeed", func() { - SkipIfProviderIs("gke") By("Creating a job") job := newTestJob("succeed", "all-succeed", api.RestartPolicyNever, parallelism, completions) job, err := createJob(f.Client, f.Namespace.Name, job) @@ -62,7 +60,6 @@ var _ = Describe("Job", func() { // Pods sometimes fail, but eventually succeed. It("should run a job to completion when tasks sometimes fail and are locally restarted", func() { - SkipIfProviderIs("gke") By("Creating a job") // 50% chance of container success, local restarts. job := newTestJob("randomlySucceedOrFail", "rand-local", api.RestartPolicyOnFailure, parallelism, completions) @@ -76,7 +73,6 @@ var _ = Describe("Job", func() { // Pods sometimes fail, but eventually succeed, after pod restarts It("should run a job to completion when tasks sometimes fail and are not locally restarted", func() { - SkipIfProviderIs("gke") By("Creating a job") // 50% chance of container success, local restarts. job := newTestJob("randomlySucceedOrFail", "rand-non-local", api.RestartPolicyNever, parallelism, completions) @@ -89,7 +85,6 @@ var _ = Describe("Job", func() { }) It("should keep restarting failed pods", func() { - SkipIfProviderIs("gke") By("Creating a job") job := newTestJob("fail", "all-fail", api.RestartPolicyNever, parallelism, completions) job, err := createJob(f.Client, f.Namespace.Name, job) @@ -106,7 +101,6 @@ var _ = Describe("Job", func() { }) It("should scale a job up", func() { - SkipIfProviderIs("gke") startParallelism := 1 endParallelism := 2 By("Creating a job") @@ -132,7 +126,6 @@ var _ = Describe("Job", func() { }) It("should scale a job down", func() { - SkipIfProviderIs("gke") startParallelism := 2 endParallelism := 1 By("Creating a job") @@ -158,7 +151,6 @@ var _ = Describe("Job", func() { }) It("should stop a job", func() { - SkipIfProviderIs("gke") By("Creating a job") job := newTestJob("notTerminate", "foo", api.RestartPolicyNever, parallelism, completions) job, err := createJob(f.Client, f.Namespace.Name, job) diff --git a/test/e2e/kubelet_perf.go b/test/e2e/kubelet_perf.go index 1febb72083b0..ff4281e8d1d5 100644 --- a/test/e2e/kubelet_perf.go +++ b/test/e2e/kubelet_perf.go @@ -50,8 +50,55 @@ func logPodsOnNodes(c *client.Client, nodeNames []string) { } } +func runResourceTrackingTest(framework *Framework, podsPerNode int, nodeNames sets.String, resourceMonitor *resourceMonitor) { + numNodes := nodeNames.Len() + totalPods := podsPerNode * numNodes + By(fmt.Sprintf("Creating a RC of %d pods and wait until all pods of this RC are running", totalPods)) + rcName := fmt.Sprintf("resource%d-%s", totalPods, string(util.NewUUID())) + + // TODO: Use a more realistic workload + Expect(RunRC(RCConfig{ + Client: framework.Client, + Name: rcName, + Namespace: framework.Namespace.Name, + Image: "gcr.io/google_containers/pause:go", + Replicas: totalPods, + })).NotTo(HaveOccurred()) + + // Log once and flush the stats. + resourceMonitor.LogLatest() + resourceMonitor.Reset() + + By("Start monitoring resource usage") + // Periodically dump the cpu summary until the deadline is met. + // Note that without calling resourceMonitor.Reset(), the stats + // would occupy increasingly more memory. This should be fine + // for the current test duration, but we should reclaim the + // entries if we plan to monitor longer (e.g., 8 hours). + deadline := time.Now().Add(monitoringTime) + for time.Now().Before(deadline) { + Logf("Still running...%v left", deadline.Sub(time.Now())) + time.Sleep(reportingPeriod) + timeLeft := deadline.Sub(time.Now()) + Logf("Still running...%v left", timeLeft) + if timeLeft < reportingPeriod { + time.Sleep(timeLeft) + } else { + time.Sleep(reportingPeriod) + } + logPodsOnNodes(framework.Client, nodeNames.List()) + } + + By("Reporting overall resource usage") + logPodsOnNodes(framework.Client, nodeNames.List()) + resourceMonitor.LogCPUSummary() + resourceMonitor.LogLatest() + + By("Deleting the RC") + DeleteRC(framework.Client, framework.Namespace.Name, rcName) +} + var _ = Describe("Kubelet", func() { - var numNodes int var nodeNames sets.String framework := NewFramework("kubelet-perf") var resourceMonitor *resourceMonitor @@ -59,7 +106,6 @@ var _ = Describe("Kubelet", func() { BeforeEach(func() { nodes, err := framework.Client.Nodes().List(labels.Everything(), fields.Everything()) expectNoError(err) - numNodes = len(nodes.Items) nodeNames = sets.NewString() for _, node := range nodes.Items { nodeNames.Insert(node.Name) @@ -72,49 +118,25 @@ var _ = Describe("Kubelet", func() { resourceMonitor.Stop() }) - Describe("resource usage tracking", func() { - density := []int{0, 50} - for _, podsPerNode := range density { + Describe("regular resource usage tracking", func() { + density := []int{0, 35} + for i := range density { + podsPerNode := density[i] + name := fmt.Sprintf( + "over %v with %d pods per node.", monitoringTime, podsPerNode) + It(name, func() { + runResourceTrackingTest(framework, podsPerNode, nodeNames, resourceMonitor) + }) + } + }) + Describe("experimental resource usage tracking", func() { + density := []int{50} + for i := range density { + podsPerNode := density[i] name := fmt.Sprintf( "over %v with %d pods per node.", monitoringTime, podsPerNode) It(name, func() { - totalPods := podsPerNode * numNodes - By(fmt.Sprintf("Creating a RC of %d pods and wait until all pods of this RC are running", totalPods)) - rcName := fmt.Sprintf("resource%d-%s", totalPods, string(util.NewUUID())) - - // TODO: Use a more realistic workload - Expect(RunRC(RCConfig{ - Client: framework.Client, - Name: rcName, - Namespace: framework.Namespace.Name, - Image: "gcr.io/google_containers/pause:go", - Replicas: totalPods, - })).NotTo(HaveOccurred()) - - // Log once and flush the stats. - resourceMonitor.LogLatest() - resourceMonitor.Reset() - - By("Start monitoring resource usage") - // Periodically dump the cpu summary until the deadline is met. - // Note that without calling resourceMonitor.Reset(), the stats - // would occupy increasingly more memory. This should be fine - // for the current test duration, but we should reclaim the - // entries if we plan to monitor longer (e.g., 8 hours). - deadline := time.Now().Add(monitoringTime) - for time.Now().Before(deadline) { - time.Sleep(reportingPeriod) - Logf("Still running...") - logPodsOnNodes(framework.Client, nodeNames.List()) - } - - By("Reporting overall resource usage") - logPodsOnNodes(framework.Client, nodeNames.List()) - resourceMonitor.LogCPUSummary() - resourceMonitor.LogLatest() - - By("Deleting the RC") - DeleteRC(framework.Client, framework.Namespace.Name, rcName) + runResourceTrackingTest(framework, podsPerNode, nodeNames, resourceMonitor) }) } })