mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Merge pull request #14594 from nikhiljindal/deploymentE2e
Auto commit by PR queue bot
This commit is contained in:
commit
4645ad3cb0
@ -178,6 +178,8 @@ func Up() bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable deployments for e2e tests.
|
||||||
|
os.Setenv("KUBE_ENABLE_DEPLOYMENTS", "true")
|
||||||
return finishRunning("up", exec.Command(path.Join(*root, "hack/e2e-internal/e2e-up.sh")))
|
return finishRunning("up", exec.Command(path.Join(*root, "hack/e2e-internal/e2e-up.sh")))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,6 +198,7 @@ case ${JOB_NAME} in
|
|||||||
)"}
|
)"}
|
||||||
: ${KUBE_GCE_INSTANCE_PREFIX="e2e-gce"}
|
: ${KUBE_GCE_INSTANCE_PREFIX="e2e-gce"}
|
||||||
: ${PROJECT:="k8s-jkns-e2e-gce"}
|
: ${PROJECT:="k8s-jkns-e2e-gce"}
|
||||||
|
: ${ENABLE_DEPLOYMENTS:=true}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
# Runs only the examples tests on GCE.
|
# Runs only the examples tests on GCE.
|
||||||
@ -265,6 +266,7 @@ case ${JOB_NAME} in
|
|||||||
: ${KUBE_GCE_INSTANCE_PREFIX:="pull-e2e-${EXECUTOR_NUMBER}"}
|
: ${KUBE_GCE_INSTANCE_PREFIX:="pull-e2e-${EXECUTOR_NUMBER}"}
|
||||||
: ${KUBE_GCS_STAGING_PATH_SUFFIX:="-${EXECUTOR_NUMBER}"}
|
: ${KUBE_GCS_STAGING_PATH_SUFFIX:="-${EXECUTOR_NUMBER}"}
|
||||||
: ${PROJECT:="kubernetes-jenkins-pull"}
|
: ${PROJECT:="kubernetes-jenkins-pull"}
|
||||||
|
: ${ENABLE_DEPLOYMENTS:=true}
|
||||||
# Override GCE defaults
|
# Override GCE defaults
|
||||||
NUM_MINIONS=${NUM_MINIONS_PARALLEL}
|
NUM_MINIONS=${NUM_MINIONS_PARALLEL}
|
||||||
;;
|
;;
|
||||||
@ -283,6 +285,7 @@ case ${JOB_NAME} in
|
|||||||
)"}
|
)"}
|
||||||
: ${KUBE_GCE_INSTANCE_PREFIX:="e2e-test-parallel"}
|
: ${KUBE_GCE_INSTANCE_PREFIX:="e2e-test-parallel"}
|
||||||
: ${PROJECT:="kubernetes-jenkins"}
|
: ${PROJECT:="kubernetes-jenkins"}
|
||||||
|
: ${ENABLE_DEPLOYMENTS:=true}
|
||||||
# Override GCE defaults
|
# Override GCE defaults
|
||||||
NUM_MINIONS=${NUM_MINIONS_PARALLEL}
|
NUM_MINIONS=${NUM_MINIONS_PARALLEL}
|
||||||
;;
|
;;
|
||||||
@ -298,6 +301,7 @@ case ${JOB_NAME} in
|
|||||||
${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \
|
${GCE_FLAKY_TESTS[@]:+${GCE_FLAKY_TESTS[@]}} \
|
||||||
${GCE_PARALLEL_FLAKY_TESTS[@]:+${GCE_PARALLEL_FLAKY_TESTS[@]}} \
|
${GCE_PARALLEL_FLAKY_TESTS[@]:+${GCE_PARALLEL_FLAKY_TESTS[@]}} \
|
||||||
)"}
|
)"}
|
||||||
|
: ${ENABLE_DEPLOYMENTS:=true}
|
||||||
# Override AWS defaults.
|
# Override AWS defaults.
|
||||||
NUM_MINIONS="6"
|
NUM_MINIONS="6"
|
||||||
;;
|
;;
|
||||||
@ -565,6 +569,7 @@ fi
|
|||||||
export E2E_MIN_STARTUP_PODS=${E2E_MIN_STARTUP_PODS:-}
|
export E2E_MIN_STARTUP_PODS=${E2E_MIN_STARTUP_PODS:-}
|
||||||
export KUBE_ENABLE_CLUSTER_MONITORING=${ENABLE_CLUSTER_MONITORING:-}
|
export KUBE_ENABLE_CLUSTER_MONITORING=${ENABLE_CLUSTER_MONITORING:-}
|
||||||
export KUBE_ENABLE_HORIZONTAL_POD_AUTOSCALER=${ENABLE_HORIZONTAL_POD_AUTOSCALER:-}
|
export KUBE_ENABLE_HORIZONTAL_POD_AUTOSCALER=${ENABLE_HORIZONTAL_POD_AUTOSCALER:-}
|
||||||
|
export KUBE_ENABLE_DEPLOYMENTS=${ENABLE_DEPLOYMENTS:-}
|
||||||
export MASTER_SIZE=${MASTER_SIZE:-}
|
export MASTER_SIZE=${MASTER_SIZE:-}
|
||||||
export MINION_SIZE=${MINION_SIZE:-}
|
export MINION_SIZE=${MINION_SIZE:-}
|
||||||
export NUM_MINIONS=${NUM_MINIONS:-}
|
export NUM_MINIONS=${NUM_MINIONS:-}
|
||||||
|
169
test/e2e/deployment.go
Normal file
169
test/e2e/deployment.go
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package e2e
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/experimental"
|
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("Deployment", func() {
|
||||||
|
f := NewFramework("deployment")
|
||||||
|
|
||||||
|
It("deployment should create new pods", func() {
|
||||||
|
testNewDeployment(f)
|
||||||
|
})
|
||||||
|
It("deployment should delete old pods and create new ones", func() {
|
||||||
|
testDeploymentDeletesOldPods(f)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
func testNewDeployment(f *Framework) {
|
||||||
|
ns := f.Namespace.Name
|
||||||
|
c := f.Client
|
||||||
|
deploymentName := "nginx-deployment"
|
||||||
|
podLabels := map[string]string{"name": "nginx"}
|
||||||
|
Logf("Creating simple deployment %s", deploymentName)
|
||||||
|
_, err := c.Deployments(ns).Create(&experimental.Deployment{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: deploymentName,
|
||||||
|
},
|
||||||
|
Spec: experimental.DeploymentSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: podLabels,
|
||||||
|
UniqueLabelKey: "deployment.kubernetes.io/podTemplateHash",
|
||||||
|
Template: &api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Labels: podLabels,
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: "nginx",
|
||||||
|
Image: "nginx",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
defer func() {
|
||||||
|
Logf("deleting deployment %s", deploymentName)
|
||||||
|
Expect(c.Deployments(ns).Delete(deploymentName, nil)).NotTo(HaveOccurred())
|
||||||
|
}()
|
||||||
|
// Check that deployment is created fine.
|
||||||
|
deployment, err := c.Deployments(ns).Get(deploymentName)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Logf("Deployment: %s", deployment)
|
||||||
|
|
||||||
|
// Verify that the required pods have come up.
|
||||||
|
err = verifyPods(c, ns, "nginx", false, 1)
|
||||||
|
if err != nil {
|
||||||
|
Logf("error in waiting for pods to come up: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// DeploymentStatus should be appropriately updated.
|
||||||
|
deployment, err = c.Deployments(ns).Get(deploymentName)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(deployment.Status.Replicas).Should(Equal(1))
|
||||||
|
Expect(deployment.Status.UpdatedReplicas).Should(Equal(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
func testDeploymentDeletesOldPods(f *Framework) {
|
||||||
|
ns := f.Namespace.Name
|
||||||
|
c := f.Client
|
||||||
|
// Create redis pods.
|
||||||
|
podLabels := map[string]string{"name": "sample-pod"}
|
||||||
|
rcName := "redis-controller"
|
||||||
|
_, err := c.ReplicationControllers(ns).Create(&api.ReplicationController{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: rcName,
|
||||||
|
},
|
||||||
|
Spec: api.ReplicationControllerSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: podLabels,
|
||||||
|
Template: &api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Labels: podLabels,
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: "redis",
|
||||||
|
Image: "redis",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
defer func() {
|
||||||
|
Logf("deleting replication controller %s", rcName)
|
||||||
|
Expect(c.ReplicationControllers(ns).Delete(rcName)).NotTo(HaveOccurred())
|
||||||
|
}()
|
||||||
|
// Verify that the required pods have come up.
|
||||||
|
err = verifyPods(c, ns, "sample-pod", false, 1)
|
||||||
|
if err != nil {
|
||||||
|
Logf("error in waiting for pods to come up: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a deployment to delete redis pods and instead bring up nginx pods.
|
||||||
|
deploymentName := "nginx-deployment"
|
||||||
|
Logf("Creating deployment %s", deploymentName)
|
||||||
|
_, err = c.Deployments(ns).Create(&experimental.Deployment{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: deploymentName,
|
||||||
|
},
|
||||||
|
Spec: experimental.DeploymentSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: podLabels,
|
||||||
|
UniqueLabelKey: "deployment.kubernetes.io/podTemplateHash",
|
||||||
|
Template: &api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Labels: podLabels,
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: "nginx",
|
||||||
|
Image: "nginx",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
defer func() {
|
||||||
|
Logf("deleting deployment %s", deploymentName)
|
||||||
|
Expect(c.Deployments(ns).Delete(deploymentName, nil)).NotTo(HaveOccurred())
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Verify that the required pods have come up.
|
||||||
|
verifyPods(c, ns, "nginx", false, 1)
|
||||||
|
// DeploymentStatus should be appropriately updated.
|
||||||
|
deployment, err := c.Deployments(ns).Get(deploymentName)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(deployment.Status.Replicas).Should(Equal(1))
|
||||||
|
Expect(deployment.Status.UpdatedReplicas).Should(Equal(1))
|
||||||
|
}
|
@ -226,7 +226,7 @@ func resizeRC(c *client.Client, ns, name string, replicas int) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func podsCreated(c *client.Client, ns, name string, replicas int) (*api.PodList, error) {
|
func podsCreated(c *client.Client, ns, name string, replicas int) (*api.PodList, error) {
|
||||||
timeout := time.Minute
|
timeout := 2 * time.Minute
|
||||||
// List the pods, making sure we observe all the replicas.
|
// List the pods, making sure we observe all the replicas.
|
||||||
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": name}))
|
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": name}))
|
||||||
for start := time.Now(); time.Since(start) < timeout; time.Sleep(5 * time.Second) {
|
for start := time.Now(); time.Since(start) < timeout; time.Sleep(5 * time.Second) {
|
||||||
|
Loading…
Reference in New Issue
Block a user