first commit
This commit is contained in:
parent
07c5da35e3
commit
d0b462a6cd
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"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
|
// pod disruption budget
|
||||||
if oldSpec.Spec.NumberOfInstances != newSpec.Spec.NumberOfInstances {
|
if oldSpec.Spec.NumberOfInstances != newSpec.Spec.NumberOfInstances {
|
||||||
c.logger.Debug("syncing pod disruption budgets")
|
c.logger.Debug("syncing pod disruption budgets")
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package cluster
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
||||||
v1 "k8s.io/api/core/v1"
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue