Skip to content

Commit

Permalink
Add volsync self test
Browse files Browse the repository at this point in the history
Testing volsync without ramen is the best way to understand how it works
and how we need to use it when using minikube (or vanilla k8s?).

For this test we have 2 directories:

- source: resources for source cluster. Applying creates the namespace,
  pvc and busybox deployment.

- destination: resources for destination cluster. Applying creates a
  namespace and volsync replication destination on destination cluster.

We use security context to run the busybox app as unprivileged user and
set the ownership of the pvc. Without this the busybox app runs as root
on minikube. It is possible to allow volsync privileged movers using an
annotation on the namespace but this is great pain to use and conflicts
with ocm, and there is no reason to run the busybox app as root.

To test replication I did this manually:
- apply source kustomization to cluster dr1
- apply destination kustomization to cluster dr2
- copy the volsync secret from cluster dr2 to cluster dr1
- export the volsync service using subctl on cluster dr2
- apply the replication source on cluster dr1

These steps should be done by the test scripts in the next version.

We also need to change the way the app writes data, logging every 10
seconds is not helpful for this test, it is better that the test will
write data to the pod write before creating the replication source.

Signed-off-by: Nir Soffer <nsoffer@redhat.com>
  • Loading branch information
nirs committed Jun 19, 2023
1 parent 4d8a9b1 commit 34bb80a
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 0 deletions.
7 changes: 7 additions & 0 deletions test/addons/volsync/destination/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
resources:
- namespace.yaml
- replication-dst.yaml
8 changes: 8 additions & 0 deletions test/addons/volsync/destination/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: v1
kind: Namespace
metadata:
name: busybox
20 changes: 20 additions & 0 deletions test/addons/volsync/destination/replication-dst.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: volsync.backube/v1alpha1
kind: ReplicationDestination
metadata:
name: busybox-dst
namespace: busybox
spec:
rsyncTLS:
copyMethod: Snapshot
capacity: 1Gi
accessModes: [ReadWriteOnce]
storageClassName: csi-hostpath-sc
volumeSnapshotClassName: csi-hostpath-snapclass
moverSecurityContext:
runAsUser: 10000
runAsGroup: 10000
fsGroup: 10000
47 changes: 47 additions & 0 deletions test/addons/volsync/source/deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
appname: busybox
name: busybox
namespace: busybox
spec:
replicas: 1
selector:
matchLabels:
appname: busybox
template:
metadata:
labels:
appname: busybox
spec:
containers:
- image: docker.io/library/busybox:latest
imagePullPolicy: IfNotPresent
name: busybox
command:
- sh
- -c
- |
trap exit TERM
while true; do
echo $(date) | tee -a /mnt/test/outfile
sync
sleep 10 &
wait
done
volumeMounts:
- name: volume
mountPath: /mnt/test
volumes:
- name: volume
persistentVolumeClaim:
claimName: busybox-pvc
securityContext:
runAsUser: 10000
runAsGroup: 10000
fsGroup: 10000
8 changes: 8 additions & 0 deletions test/addons/volsync/source/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
resources:
- namespace.yaml
- pvc.yaml
- deploy.yaml
8 changes: 8 additions & 0 deletions test/addons/volsync/source/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: v1
kind: Namespace
metadata:
name: busybox
17 changes: 17 additions & 0 deletions test/addons/volsync/source/pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: busybox-pvc
namespace: busybox
labels:
appname: busybox
spec:
accessModes: [ReadWriteOnce]
storageClassName: csi-hostpath-sc
resources:
requests:
storage: 1Gi
22 changes: 22 additions & 0 deletions test/addons/volsync/source/replication-src.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# SPDX-FileCopyrightText: The RamenDR authors
# SPDX-License-Identifier: Apache-2.0

---
apiVersion: volsync.backube/v1alpha1
kind: ReplicationSource
metadata:
name: busybox-src
namespace: busybox
spec:
sourcePVC: busybox-pvc
trigger:
manual: replication-1
rsyncTLS:
keySecret: volsync-rsync-tls-busybox-dst
address: volsync-rsync-tls-dst-busybox-dst.busybox.svc.clusterset.local
copyMethod: Snapshot
volumeSnapshotClassName: csi-hostpath-snapclass
moverSecurityContext:
runAsUser: 10000
runAsGroup: 10000
fsGroup: 10000

0 comments on commit 34bb80a

Please sign in to comment.