Skip to content

Commit 112c910

Browse files
committed
Kuttl test to create a cluster and resize the PVC
This test creates two simple clusters with a single primary and a repo host. In the first cluster we create data then increase the size of the pvc. Then we check that the pvc size has changed, the size matches the new expected side and the data is still present. In the second cluster we attempt decrease the size of the volume and expect the PersistentVolumeError.
1 parent 4f15cd2 commit 112c910

13 files changed

+390
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Ensure that the default StorageClass supports VolumeExpansion
2+
apiVersion: storage.k8s.io/v1
3+
kind: StorageClass
4+
metadata:
5+
annotations:
6+
storageclass.kubernetes.io/is-default-class: "true"
7+
allowVolumeExpansion: true
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-up
5+
spec:
6+
postgresVersion: ${KUTTL_PG_VERSION}
7+
instances:
8+
- name: instance1
9+
dataVolumeClaimSpec:
10+
accessModes:
11+
- "ReadWriteOnce"
12+
resources:
13+
requests:
14+
storage: 1Gi
15+
backups:
16+
pgbackrest:
17+
repos:
18+
- name: repo1
19+
volume:
20+
volumeClaimSpec:
21+
accessModes:
22+
- "ReadWriteOnce"
23+
resources:
24+
requests:
25+
storage: 1Gi
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-up
5+
status:
6+
instances:
7+
- name: instance1
8+
readyReplicas: 1
9+
replicas: 1
10+
updatedReplicas: 1
11+
---
12+
apiVersion: batch/v1
13+
kind: Job
14+
metadata:
15+
labels:
16+
postgres-operator.crunchydata.com/cluster: resize-volume-up
17+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
18+
status:
19+
succeeded: 1
20+
---
21+
apiVersion: v1
22+
kind: Service
23+
metadata:
24+
name: resize-volume-up-primary
25+
---
26+
apiVersion: v1
27+
kind: PersistentVolumeClaim
28+
metadata:
29+
labels:
30+
postgres-operator.crunchydata.com/cluster: resize-volume-up
31+
postgres-operator.crunchydata.com/instance-set: instance1
32+
spec:
33+
resources:
34+
requests:
35+
storage: 1Gi
36+
status:
37+
accessModes:
38+
- ReadWriteOnce
39+
capacity:
40+
storage: 1Gi
41+
phase: Bound
42+
---
43+
apiVersion: v1
44+
kind: PersistentVolumeClaim
45+
metadata:
46+
labels:
47+
postgres-operator.crunchydata.com/cluster: resize-volume-up
48+
postgres-operator.crunchydata.com/data: pgbackrest
49+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
50+
spec:
51+
resources:
52+
requests:
53+
storage: 1Gi
54+
status:
55+
accessModes:
56+
- ReadWriteOnce
57+
capacity:
58+
storage: 1Gi
59+
phase: Bound
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
# Create some data that should be present after resizing.
3+
apiVersion: batch/v1
4+
kind: Job
5+
metadata:
6+
name: create-data
7+
labels: { postgres-operator-test: kuttl }
8+
spec:
9+
backoffLimit: 3
10+
template:
11+
metadata:
12+
labels: { postgres-operator-test: kuttl }
13+
spec:
14+
restartPolicy: Never
15+
containers:
16+
- name: psql
17+
image: ${KUTTL_PSQL_IMAGE}
18+
env:
19+
- name: PGURI
20+
valueFrom: { secretKeyRef: { name: resize-volume-up-pguser-resize-volume-up, key: uri } }
21+
22+
# Do not wait indefinitely.
23+
- { name: PGCONNECT_TIMEOUT, value: '5' }
24+
25+
command:
26+
- psql
27+
- $(PGURI)
28+
- --set=ON_ERROR_STOP=1
29+
- --command
30+
- |
31+
CREATE TABLE important (data) AS VALUES ('treasure');
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: create-data
6+
status:
7+
succeeded: 1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-up
5+
spec:
6+
postgresVersion: ${KUTTL_PG_VERSION}
7+
instances:
8+
- name: instance1
9+
dataVolumeClaimSpec:
10+
accessModes:
11+
- "ReadWriteOnce"
12+
resources:
13+
requests:
14+
storage: 2Gi
15+
backups:
16+
pgbackrest:
17+
repos:
18+
- name: repo1
19+
volume:
20+
volumeClaimSpec:
21+
accessModes:
22+
- "ReadWriteOnce"
23+
resources:
24+
requests:
25+
storage: 2Gi
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# We know that the PVC sizes have change so now we can check that they have been
2+
# updated to have the expected size
3+
---
4+
apiVersion: v1
5+
kind: PersistentVolumeClaim
6+
metadata:
7+
labels:
8+
postgres-operator.crunchydata.com/cluster: resize-volume-up
9+
postgres-operator.crunchydata.com/instance-set: instance1
10+
spec:
11+
resources:
12+
requests:
13+
storage: 2Gi
14+
status:
15+
accessModes:
16+
- ReadWriteOnce
17+
capacity:
18+
storage: 2Gi
19+
phase: Bound
20+
---
21+
apiVersion: v1
22+
kind: PersistentVolumeClaim
23+
metadata:
24+
labels:
25+
postgres-operator.crunchydata.com/cluster: resize-volume-up
26+
postgres-operator.crunchydata.com/data: pgbackrest
27+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
28+
spec:
29+
resources:
30+
requests:
31+
storage: 2Gi
32+
status:
33+
accessModes:
34+
- ReadWriteOnce
35+
capacity:
36+
storage: 2Gi
37+
phase: Bound
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
# Confirm that all the data still exists.
3+
apiVersion: batch/v1
4+
kind: Job
5+
metadata:
6+
name: check-data
7+
labels: { postgres-operator-test: kuttl }
8+
spec:
9+
backoffLimit: 3
10+
template:
11+
metadata:
12+
labels: { postgres-operator-test: kuttl }
13+
spec:
14+
restartPolicy: Never
15+
containers:
16+
- name: psql
17+
image: ${KUTTL_PSQL_IMAGE}
18+
env:
19+
- name: PGURI
20+
valueFrom: { secretKeyRef: { name: resize-volume-up-pguser-resize-volume-up, key: uri } }
21+
22+
# Do not wait indefinitely.
23+
- { name: PGCONNECT_TIMEOUT, value: '5' }
24+
25+
# Confirm that all the data still exists.
26+
# Note: the `$$$$` is reduced to `$$` by Kubernetes.
27+
# - https://kubernetes.io/docs/tasks/inject-data-application/
28+
command:
29+
- psql
30+
- $(PGURI)
31+
- --set=ON_ERROR_STOP=1
32+
- --command
33+
- |
34+
DO $$$$
35+
DECLARE
36+
keep_data jsonb;
37+
BEGIN
38+
SELECT jsonb_agg(important) INTO keep_data FROM important;
39+
ASSERT keep_data = '[{"data":"treasure"}]', format('got %L', keep_data);
40+
END $$$$;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: check-data
6+
status:
7+
succeeded: 1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-down
5+
spec:
6+
postgresVersion: ${KUTTL_PG_VERSION}
7+
instances:
8+
- name: instance1
9+
dataVolumeClaimSpec:
10+
accessModes:
11+
- "ReadWriteOnce"
12+
resources:
13+
requests:
14+
storage: 2Gi
15+
backups:
16+
pgbackrest:
17+
repos:
18+
- name: repo1
19+
volume:
20+
volumeClaimSpec:
21+
accessModes:
22+
- "ReadWriteOnce"
23+
resources:
24+
requests:
25+
storage: 2Gi
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-down
5+
status:
6+
instances:
7+
- name: instance1
8+
readyReplicas: 1
9+
replicas: 1
10+
updatedReplicas: 1
11+
---
12+
apiVersion: batch/v1
13+
kind: Job
14+
metadata:
15+
labels:
16+
postgres-operator.crunchydata.com/cluster: resize-volume-down
17+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
18+
status:
19+
succeeded: 1
20+
---
21+
apiVersion: v1
22+
kind: Service
23+
metadata:
24+
name: resize-volume-down-primary
25+
---
26+
apiVersion: v1
27+
kind: PersistentVolumeClaim
28+
metadata:
29+
labels:
30+
postgres-operator.crunchydata.com/cluster: resize-volume-down
31+
postgres-operator.crunchydata.com/instance-set: instance1
32+
spec:
33+
resources:
34+
requests:
35+
storage: 2Gi
36+
status:
37+
accessModes:
38+
- ReadWriteOnce
39+
capacity:
40+
storage: 2Gi
41+
phase: Bound
42+
---
43+
apiVersion: v1
44+
kind: PersistentVolumeClaim
45+
metadata:
46+
labels:
47+
postgres-operator.crunchydata.com/cluster: resize-volume-down
48+
postgres-operator.crunchydata.com/data: pgbackrest
49+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
50+
spec:
51+
resources:
52+
requests:
53+
storage: 2Gi
54+
status:
55+
accessModes:
56+
- ReadWriteOnce
57+
capacity:
58+
storage: 2Gi
59+
phase: Bound
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: postgres-operator.crunchydata.com/v1beta1
2+
kind: PostgresCluster
3+
metadata:
4+
name: resize-volume-down
5+
spec:
6+
postgresVersion: ${KUTTL_PG_VERSION}
7+
instances:
8+
- name: instance1
9+
dataVolumeClaimSpec:
10+
accessModes:
11+
- "ReadWriteOnce"
12+
resources:
13+
requests:
14+
storage: 1Gi
15+
backups:
16+
pgbackrest:
17+
repos:
18+
- name: repo1
19+
volume:
20+
volumeClaimSpec:
21+
accessModes:
22+
- "ReadWriteOnce"
23+
resources:
24+
requests:
25+
storage: 1Gi

0 commit comments

Comments
 (0)