func createIdlePod(podName string, podClient *framework.PodClient) { podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: podName, }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: ImageRegistry[pauseImage], Name: podName, }, }, }, }) }
func createIdlePod(podName string, podClient *framework.PodClient) { podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: podName, }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: framework.GetPauseImageNameForHostArch(), Name: podName, }, }, }, }) }
BeforeEach(func() { podClient = f.PodClient() }) Context("when it is exec hook", func() { var file string testPodWithExecHook := func(podWithHook *v1.Pod) { podCheckHook := getExecHookTestPod("pod-check-hook", // Wait until the file is created. []string{"sh", "-c", fmt.Sprintf("while [ ! -e %s ]; do sleep 1; done", file)}, ) By("create the pod with lifecycle hook") podClient.CreateSync(podWithHook) if podWithHook.Spec.Containers[0].Lifecycle.PostStart != nil { By("create the hook check pod") podClient.Create(podCheckHook) By("wait for the hook check pod to success") podClient.WaitForSuccess(podCheckHook.Name, postStartWaitTimeout) } By("delete the pod with lifecycle hook") podClient.DeleteSync(podWithHook.Name, v1.NewDeleteOptions(15), podWaitTimeout) if podWithHook.Spec.Containers[0].Lifecycle.PreStop != nil { By("create the hook check pod") podClient.Create(podCheckHook) By("wait for the prestop check pod to success") podClient.WaitForSuccess(podCheckHook.Name, preStopWaitTimeout) } } BeforeEach(func() { file = "/tmp/test-" + string(uuid.NewUUID())
BeforeEach(func() { podClient = f.PodClient() }) It("should support sysctls", func() { pod := testPod() pod.Annotations[v1.SysctlsPodAnnotationKey] = v1.PodAnnotationsFromSysctls([]v1.Sysctl{ { Name: "kernel.shm_rmid_forced", Value: "1", }, }) pod.Spec.Containers[0].Command = []string{"/bin/sysctl", "kernel.shm_rmid_forced"} By("Creating a pod with the kernel.shm_rmid_forced sysctl") pod = podClient.Create(pod) By("Watching for error events or started pod") // watch for events instead of termination of pod because the kubelet deletes // failed pods without running containers. This would create a race as the pod // might have already been deleted here. ev, err := waitForPodErrorEventOrStarted(pod) Expect(err).NotTo(HaveOccurred()) if ev != nil && ev.Reason == sysctl.UnsupportedReason { framework.Skipf("No sysctl support in Docker <1.12") } Expect(ev).To(BeNil()) By("Waiting for pod completion") err = f.WaitForPodNoLongerRunning(pod.Name) Expect(err).NotTo(HaveOccurred())
probTestInitialDelaySeconds = 15 defaultObservationTimeout = time.Minute * 2 ) var _ = framework.KubeDescribe("Probing container", func() { f := framework.NewDefaultFramework("container-probe") var podClient *framework.PodClient probe := webserverProbeBuilder{} BeforeEach(func() { podClient = f.PodClient() }) It("with readiness probe should not be ready before initial delay and never restart [Conformance]", func() { p := podClient.Create(makePodSpec(probe.withInitialDelay().build(), nil)) f.WaitForPodReady(p.Name) p, err := podClient.Get(p.Name, metav1.GetOptions{}) framework.ExpectNoError(err) isReady, err := testutils.PodRunningReady(p) framework.ExpectNoError(err) Expect(isReady).To(BeTrue(), "pod should be ready") // We assume the pod became ready when the container became ready. This // is true for a single container pod. readyTime, err := getTransitionTimeForReadyCondition(p) framework.ExpectNoError(err) startedTime, err := getContainerStartedTime(p, probTestContainerName) framework.ExpectNoError(err)
framework.Skipf("test skipped because eviction option is not set") } busyPodName = "to-evict" + string(uuid.NewUUID()) idlePodName = "idle" + string(uuid.NewUUID()) verifyPodName = "verify" + string(uuid.NewUUID()) createIdlePod(idlePodName, podClient) podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: busyPodName, }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: "gcr.io/google_containers/busybox:1.24", Name: busyPodName, // Filling the disk Command: []string{"sh", "-c", fmt.Sprintf("for NUM in `seq 1 1 100000`; do dd if=/dev/urandom of=%s.$NUM bs=50000000 count=10; sleep 0.5; done", dummyFile)}, }, }, }, }) }) AfterEach(func() { if !isImageSupported() || !evictionOptionIsSet() { // Skip the after each return } podClient.DeleteSync(busyPodName, &api.DeleteOptions{}, podDisappearTimeout)
}, time.Minute, time.Second*4).Should(Equal("Hello World\n")) }) }) Context("when scheduling a busybox command that always fails in a pod", func() { var podName string BeforeEach(func() { podName = "bin-false" + string(uuid.NewUUID()) podClient.Create(&v1.Pod{ ObjectMeta: v1.ObjectMeta{ Name: podName, }, Spec: v1.PodSpec{ // Don't restart the Pod since it is expected to exit RestartPolicy: v1.RestartPolicyNever, Containers: []v1.Container{ { Image: "gcr.io/google_containers/busybox:1.24", Name: podName, Command: []string{"/bin/false"}, }, }, }, }) }) It("should have an error terminated reason", func() { Eventually(func() error { podData, err := podClient.Get(podName) if err != nil { return err }
}) Describe("oom score adjusting", func() { Context("when scheduling a busybox command that always fails in a pod", func() { var podName string BeforeEach(func() { podName = "bin-false" + string(util.NewUUID()) podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: podName, }, Spec: api.PodSpec{ // Don't restart the Pod since it is expected to exit RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: ImageRegistry[busyBoxImage], Name: podName, Command: []string{"/bin/false"}, }, }, }, }) }) It("should have an error terminated reason", func() { Eventually(func() error { podData, err := podClient.Get(podName) if err != nil { return err }
BeforeEach(func() { if !evictionOptionIsSet() { return } busyPodName = "to-evict" + string(uuid.NewUUID()) idlePodName = "idle" + string(uuid.NewUUID()) containersToCleanUp = make(map[string]bool) podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: idlePodName, }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: ImageRegistry[pauseImage], Name: idlePodName, }, }, }, }) podClient.Create(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: busyPodName, }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: ImageRegistry[busyBoxImage],
Command: []string{"/bin/true"}, }, }, Containers: []v1.Container{ { Name: "run1", Image: "gcr.io/google_containers/busybox:1.24", Command: []string{"/bin/true"}, }, }, }, } if err := podutil.SetInitContainersAnnotations(pod); err != nil { Expect(err).To(BeNil()) } startedPod := podClient.Create(pod) w, err := podClient.Watch(v1.SingleObject(startedPod.ObjectMeta)) Expect(err).NotTo(HaveOccurred(), "error watching a pod") wr := watch.NewRecorder(w) event, err := watch.Until(framework.PodStartTimeout, wr, conditions.PodCompleted) Expect(err).To(BeNil()) framework.CheckInvariants(wr.Events(), framework.ContainerInitInvariant) endPod := event.Object.(*v1.Pod) if err := podutil.SetInitContainersAndStatuses(endPod); err != nil { Expect(err).To(BeNil()) } Expect(endPod.Status.Phase).To(Equal(v1.PodSucceeded)) _, init := v1.GetPodCondition(&endPod.Status, v1.PodInitialized) Expect(init).NotTo(BeNil()) Expect(init.Status).To(Equal(v1.ConditionTrue))