From 02d7af28e02a896ce7b140dc704c3879a96cec94 Mon Sep 17 00:00:00 2001 From: Yu-Ju Hong Date: Fri, 3 Jun 2016 11:03:35 -0700 Subject: [PATCH] kubelet e2e: enforce that image prepulling must finish before the test The image prepulling pod calls docker directly to pull images. If the pod hasn't finished before running the resource usage tracking test, there'd be a cpu spike in docker. We'd rather wait and fail if this is the case, before running the test. --- test/e2e/kubelet_perf.go | 9 +++++++++ test/e2e/resize_nodes.go | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/test/e2e/kubelet_perf.go b/test/e2e/kubelet_perf.go index 77d86deb455..fb728631b00 100644 --- a/test/e2e/kubelet_perf.go +++ b/test/e2e/kubelet_perf.go @@ -21,6 +21,7 @@ import ( "strings" "time" + "k8s.io/kubernetes/pkg/api" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/stats" "k8s.io/kubernetes/pkg/util" @@ -38,6 +39,8 @@ const ( monitoringTime = 20 * time.Minute // The periodic reporting period. reportingPeriod = 5 * time.Minute + // Timeout for waiting for the image prepulling to complete. + imagePrePullingLongTimeout = time.Minute * 8 ) type resourceTest struct { @@ -193,6 +196,12 @@ var _ = framework.KubeDescribe("Kubelet [Serial] [Slow]", func() { var rm *framework.ResourceMonitor BeforeEach(func() { + // Wait until image prepull pod has completed so that they wouldn't + // affect the runtime cpu usage. Fail the test if prepulling cannot + // finish in time. + if err := framework.WaitForPodsSuccess(f.Client, api.NamespaceSystem, framework.ImagePullerLabels, imagePrePullingLongTimeout); err != nil { + framework.Failf("Image puller didn't complete in %v, not running resource usage test since the metrics might be adultrated", imagePrePullingLongTimeout) + } nodes := framework.GetReadySchedulableNodesOrDie(f.Client) nodeNames = sets.NewString() for _, node := range nodes.Items { diff --git a/test/e2e/resize_nodes.go b/test/e2e/resize_nodes.go index 30b1599044b..db183c938a4 100644 --- a/test/e2e/resize_nodes.go +++ b/test/e2e/resize_nodes.go @@ -424,9 +424,10 @@ var _ = framework.KubeDescribe("Nodes [Disruptive]", func() { // Many e2e tests assume that the cluster is fully healthy before they start. Wait until // the cluster is restored to health. By("waiting for system pods to successfully restart") - err := framework.WaitForPodsRunningReady(c, api.NamespaceSystem, systemPodsNo, framework.PodReadyBeforeTimeout, ignoreLabels) Expect(err).NotTo(HaveOccurred()) + By("waiting for image prepulling pods to complete") + framework.WaitForPodsSuccess(c, api.NamespaceSystem, framework.ImagePullerLabels, imagePrePullingTimeout) }) It("should be able to delete nodes", func() {