Merge pull request #20273 from kargakis/allow-scaling-paused-deployments
Automatic merge from submit-queue Proportionally scale paused and rolling deployments Enable paused and rolling deployments to be proportionally scaled. Also have cleanup policy work for paused deployments. Fixes #20853 Fixes #20966 Fixes #20754 @bgrant0607 @janetkuo @ironcladlou @nikhiljindal <!-- Reviewable:start --> --- This change is [<img src="http://reviewable.k8s.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/20273) <!-- Reviewable:end -->
This commit is contained in:
@@ -80,6 +80,9 @@ var _ = framework.KubeDescribe("Deployment", func() {
|
||||
It("deployment should label adopted RSs and pods", func() {
|
||||
testDeploymentLabelAdopted(f)
|
||||
})
|
||||
It("paused deployment should be able to scale", func() {
|
||||
testScalePausedDeployment(f)
|
||||
})
|
||||
})
|
||||
|
||||
func newRS(rsName string, replicas int32, rsPodLabels map[string]string, imageName string, image string) *extensions.ReplicaSet {
|
||||
@@ -569,6 +572,8 @@ func testPausedDeployment(f *framework.Framework) {
|
||||
podLabels := map[string]string{"name": nginxImageName}
|
||||
d := newDeployment(deploymentName, 1, podLabels, nginxImageName, nginxImage, extensions.RollingUpdateDeploymentStrategyType, nil)
|
||||
d.Spec.Paused = true
|
||||
tgps := int64(20)
|
||||
d.Spec.Template.Spec.TerminationGracePeriodSeconds = &tgps
|
||||
framework.Logf("Creating paused deployment %s", deploymentName)
|
||||
_, err := c.Extensions().Deployments(ns).Create(d)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
@@ -622,21 +627,34 @@ func testPausedDeployment(f *framework.Framework) {
|
||||
err = framework.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
// Update the deployment template - the new replicaset should stay the same
|
||||
framework.Logf("Updating paused deployment %q", deploymentName)
|
||||
newTGPS := int64(40)
|
||||
deployment, err = framework.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *extensions.Deployment) {
|
||||
update.Spec.Template.Spec.TerminationGracePeriodSeconds = &newTGPS
|
||||
})
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
err = framework.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
framework.Logf("Looking for new replicaset for paused deployment %q (there should be none)", deploymentName)
|
||||
newRS, err := deploymentutil.GetNewReplicaSet(deployment, c)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(framework.DeleteReplicaSet(unversionedClient, ns, newRS.Name)).NotTo(HaveOccurred())
|
||||
|
||||
deployment, err = c.Extensions().Deployments(ns).Get(deploymentName)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
if !deployment.Spec.Paused {
|
||||
err = fmt.Errorf("deployment %q should be paused", deployment.Name)
|
||||
if newRS != nil {
|
||||
err = fmt.Errorf("No replica set should match the deployment template but there is %q", newRS.Name)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
shouldBeNil, err := deploymentutil.GetNewReplicaSet(deployment, c)
|
||||
|
||||
_, allOldRs, err := deploymentutil.GetOldReplicaSets(deployment, c)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
if shouldBeNil != nil {
|
||||
err = fmt.Errorf("deployment %q shouldn't have a replica set but there is %q", deployment.Name, shouldBeNil.Name)
|
||||
if len(allOldRs) != 1 {
|
||||
err = fmt.Errorf("expected an old replica set")
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
framework.Logf("Comparing deployment diff with old replica set %q", allOldRs[0].Name)
|
||||
if *allOldRs[0].Spec.Template.Spec.TerminationGracePeriodSeconds == newTGPS {
|
||||
err = fmt.Errorf("TerminationGracePeriodSeconds on the replica set should be %d but is %d", tgps, newTGPS)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
}
|
||||
@@ -944,3 +962,54 @@ func testDeploymentLabelAdopted(f *framework.Framework) {
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(int32(len(pods.Items))).Should(Equal(replicas))
|
||||
}
|
||||
|
||||
func testScalePausedDeployment(f *framework.Framework) {
|
||||
ns := f.Namespace.Name
|
||||
c := adapter.FromUnversionedClient(f.Client)
|
||||
|
||||
podLabels := map[string]string{"name": nginxImageName}
|
||||
replicas := int32(3)
|
||||
|
||||
// Create a nginx deployment.
|
||||
deploymentName := "nginx-deployment"
|
||||
d := newDeployment(deploymentName, replicas, podLabels, nginxImageName, nginxImage, extensions.RollingUpdateDeploymentStrategyType, nil)
|
||||
framework.Logf("Creating deployment %q", deploymentName)
|
||||
_, err := c.Extensions().Deployments(ns).Create(d)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
defer stopDeployment(c, f.Client, ns, deploymentName)
|
||||
|
||||
// Check that deployment is created fine.
|
||||
deployment, err := c.Extensions().Deployments(ns).Get(deploymentName)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
err = framework.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
rs, err := deploymentutil.GetNewReplicaSet(deployment, c)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
// Pause the deployment and try to scale it.
|
||||
deployment, err = framework.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *extensions.Deployment) {
|
||||
update.Spec.Paused = true
|
||||
})
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
// Scale the paused deployment.
|
||||
framework.Logf("Scaling up the paused deployment %q", deploymentName)
|
||||
newReplicas := int32(5)
|
||||
deployment, err = framework.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *extensions.Deployment) {
|
||||
update.Spec.Replicas = newReplicas
|
||||
})
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
err = framework.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
rs, err = deploymentutil.GetNewReplicaSet(deployment, c)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
if rs.Spec.Replicas != newReplicas {
|
||||
err = fmt.Errorf("Expected %d replicas for the new replica set, got %d", newReplicas, rs.Spec.Replicas)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user