first commit

This commit is contained in:
Sergey Dudoladov 2020-03-24 09:55:41 +01:00
parent 07c5da35e3
commit d0b462a6cd
2 changed files with 42 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import (
"fmt"
"reflect"
"regexp"
"strconv"
"sync"
"time"
@ -633,6 +634,28 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error {
}
}()
// delete persistent volume claim after scale down
if oldSpec.Spec.NumberOfInstances > newSpec.Spec.NumberOfInstances {
c.logger.Debug("deleting pvc of shut down pods")
for i := oldSpec.Spec.NumberOfInstances - 1; i >= newSpec.Spec.NumberOfInstances; i-- {
// Scaling down to 0 replicas is not cluster deletion so keep the last pvc.
// Operator will remove it only when explicit "kubectl pg delete" is issued
if i == 0 {
c.logger.Info("cluster scaled down to 0 pods; skipping deletion of the last pvc")
break
}
podIndex := strconv.Itoa(int(i))
pvcName := "pgdata-" + c.Name + "-" + podIndex
if err := c.KubeClient.PersistentVolumeClaims(c.Namespace).Delete(pvcName, c.deleteOptions); err != nil {
c.logger.Warningf("could not delete PersistentVolumeClaim: %v", err)
// failing to delete pvc does not fail the update; Sync() may also delete unused PVCs later
}
}
}
// pod disruption budget
if oldSpec.Spec.NumberOfInstances != newSpec.Spec.NumberOfInstances {
c.logger.Debug("syncing pod disruption budgets")

View File

@ -2,6 +2,7 @@ package cluster
import (
"fmt"
"strconv"
batchv1beta1 "k8s.io/api/batch/v1beta1"
v1 "k8s.io/api/core/v1"
@ -108,6 +109,24 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error {
}
}
// remove unused PVCs in case deleting them during scale down failed; see Update()
// the last pvc stays until the cluster is explicitly deleted as opposed to being scaled down to 0 pods
if c.getNumberOfInstances(&c.Spec) > 0 {
for i := c.getNumberOfInstances(&c.Spec); ; i++ {
podIndex := strconv.Itoa(int(i))
pvcName := "pgdata-" + c.Name + "-" + podIndex
if err := c.KubeClient.PersistentVolumeClaims(c.Namespace).Delete(pvcName, c.deleteOptions); err != nil {
if k8sutil.ResourceNotFound(err) {
// no more pvcs to delete
break
}
c.logger.Warningf("could not delete PersistentVolumeClaim: %v", err)
// next Sync() or Update() will retry
}
}
}
return err
}