mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-12 23:35:58 +00:00
Document Volume Snapshots
This commit is contained in:
parent
222b153242
commit
1b3ee63565
@ -27,9 +27,10 @@
|
|||||||
* [HTTPS](deployment/digital-ocean/https/README.md)
|
* [HTTPS](deployment/digital-ocean/https/README.md)
|
||||||
* [Human Connection](deployment/human-connection/README.md)
|
* [Human Connection](deployment/human-connection/README.md)
|
||||||
* [Volumes](deployment/volumes/README.md)
|
* [Volumes](deployment/volumes/README.md)
|
||||||
* [Disaster Recovery](deployment/disaster-recovery/README.md)
|
* [Neo4J Offline-Backups](deployment/volumes/neo4j-offline-backup/README.md)
|
||||||
* [Neo4J Offline-Backups](deployment/disaster-recovery/neo4j-offline-backup/README.md)
|
* [Volume Snapshots](deployment/volumes/volume-snapshots/README.md)
|
||||||
* [On-Premise Backups](deployment/disaster-recovery/velero/README.md)
|
* [Reclaim Policy](deployment/volumes/reclaim-policy/README.md)
|
||||||
|
* [Velero](deployment/volumes/velero/README.md)
|
||||||
* [Neo4J DB Backup](deployment/backup.md)
|
* [Neo4J DB Backup](deployment/backup.md)
|
||||||
* [Legacy Migration](deployment/legacy-migration/README.md)
|
* [Legacy Migration](deployment/legacy-migration/README.md)
|
||||||
* [Feature Specification](cypress/features.md)
|
* [Feature Specification](cypress/features.md)
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
# Disaster Recovery
|
|
||||||
|
|
||||||
We tested a couple of options how to do disaster recovery in kubernetes. First,
|
|
||||||
there is the [offline backup strategy](./neo4j-offline-backup/README.md) of the
|
|
||||||
community edition of Neo4J, which you can also run on a local installation.
|
|
||||||
Next up is a kubernetes specific disaster recovery tool called
|
|
||||||
[Velero](./velero/README.md).
|
|
||||||
|
|
||||||
@ -7,7 +7,13 @@ At the moment, the application needs two persistent volumes:
|
|||||||
|
|
||||||
As a matter of precaution, the persistent volume claims that setup these volumes
|
As a matter of precaution, the persistent volume claims that setup these volumes
|
||||||
live in a separate folder. You don't want to accidently loose all your data in
|
live in a separate folder. You don't want to accidently loose all your data in
|
||||||
your database by running `kubectl delete -f human-connection/`, do you?
|
your database by running
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl delete -f human-connection/
|
||||||
|
```
|
||||||
|
|
||||||
|
or do you?
|
||||||
|
|
||||||
## Create Persistent Volume Claims
|
## Create Persistent Volume Claims
|
||||||
|
|
||||||
@ -19,24 +25,12 @@ persistentvolumeclaim/neo4j-data-claim created
|
|||||||
persistentvolumeclaim/uploads-claim created
|
persistentvolumeclaim/uploads-claim created
|
||||||
```
|
```
|
||||||
|
|
||||||
## Change Reclaim Policy
|
## Backup and Restore
|
||||||
|
|
||||||
We recommend to change the `ReclaimPolicy`, so if you delete the persistent
|
We tested a couple of options how to do disaster recovery in kubernetes. First,
|
||||||
volume claims, the associated volumes will be released, not deleted:
|
there is the [offline backup strategy](./neo4j-offline-backup/README.md) of the
|
||||||
|
community edition of Neo4J, which you can also run on a local installation.
|
||||||
```sh
|
Kubernetes also offers so-called [volume snapshots](./volume-snapshots/README.md).
|
||||||
$ kubectl --namespace=human-connection get pv
|
Changing the [reclaim policy](./reclaim-policy/README.md) of your persistent
|
||||||
|
volumes might be an additional safety measure. Finally, there is also a
|
||||||
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
|
kubernetes specific disaster recovery tool called [Velero](./velero/README.md).
|
||||||
pvc-bd02a715-66d0-11e9-be52-ba9c337f4551 1Gi RWO Delete Bound human-connection/neo4j-data-claim do-block-storage 4m24s
|
|
||||||
pvc-bd208086-66d0-11e9-be52-ba9c337f4551 2Gi RWO Delete Bound human-connection/uploads-claim do-block-storage 4m12s
|
|
||||||
```
|
|
||||||
|
|
||||||
Get the volume id from above, then change `ReclaimPolicy` with:
|
|
||||||
```sh
|
|
||||||
kubectl patch pv <VOLUME-ID> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
|
||||||
|
|
||||||
# in the above example
|
|
||||||
kubectl patch pv pvc-bd02a715-66d0-11e9-be52-ba9c337f4551 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
|
||||||
kubectl patch pv pvc-bd208086-66d0-11e9-be52-ba9c337f4551 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
|
||||||
```
|
|
||||||
|
|||||||
30
deployment/volumes/reclaim-policy/README.md
Normal file
30
deployment/volumes/reclaim-policy/README.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Change Reclaim Policy
|
||||||
|
|
||||||
|
We recommend to change the `ReclaimPolicy`, so if you delete the persistent
|
||||||
|
volume claims, the associated volumes will be released, not deleted.
|
||||||
|
|
||||||
|
This procedure is optional and an additional security measure. It might prevent
|
||||||
|
you from loosing data if you accidently delete the namespace and the persistent
|
||||||
|
volumes along with it.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ kubectl --namespace=human-connection get pv
|
||||||
|
|
||||||
|
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
|
||||||
|
pvc-bd02a715-66d0-11e9-be52-ba9c337f4551 1Gi RWO Delete Bound human-connection/neo4j-data-claim do-block-storage 4m24s
|
||||||
|
pvc-bd208086-66d0-11e9-be52-ba9c337f4551 2Gi RWO Delete Bound human-connection/uploads-claim do-block-storage 4m12s
|
||||||
|
```
|
||||||
|
|
||||||
|
Get the volume id from above, then change `ReclaimPolicy` with:
|
||||||
|
```sh
|
||||||
|
kubectl patch pv <VOLUME-ID> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
||||||
|
|
||||||
|
# in the above example
|
||||||
|
kubectl patch pv pvc-bd02a715-66d0-11e9-be52-ba9c337f4551 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
||||||
|
kubectl patch pv pvc-bd208086-66d0-11e9-be52-ba9c337f4551 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Given that you changed the reclaim policy as described above, you should be able
|
||||||
|
to create a persistent volume claim based on a volume snapshot content. See
|
||||||
|
the general kubernetes documentation [here](https://kubernetes.io/blog/2018/10/09/introducing-volume-snapshot-alpha-for-kubernetes/)
|
||||||
|
and our specific documentation for snapshots [here](../snapshot/README.md).
|
||||||
48
deployment/volumes/volume-snapshots/README.md
Normal file
48
deployment/volumes/volume-snapshots/README.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# Kubernetes Volume Snapshots
|
||||||
|
|
||||||
|
It is possible to backup persistent volumes through volume snapshots. This is
|
||||||
|
especially handy if you don't want to stop the database to create an [offline
|
||||||
|
backup](../neo4j-offline-backup/README.md) thus having a downtime.
|
||||||
|
|
||||||
|
## Create a Volume Snapshot
|
||||||
|
|
||||||
|
There is an example in this folder how you can e.g. create a volume snapshot for
|
||||||
|
the persistent volume claim `neo4j-data-claim`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# in folder deployment/volumes/volume-snapshots/
|
||||||
|
kubectl apply -f snapshot.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are on Digital Ocean the volume snapshot should show up in the Web UI:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Provision a Volume based on a Snapshot
|
||||||
|
|
||||||
|
Edit your persistent volume claim configuration and add a `dataSource` pointing
|
||||||
|
to your volume snapshot. [This blog post](https://kubernetes.io/blog/2018/10/09/introducing-volume-snapshot-alpha-for-kubernetes/) has an example in section "Provision a new volume from a snapshot with
|
||||||
|
Kubernetes".
|
||||||
|
|
||||||
|
There is also an example in this folder how the configuration could look like.
|
||||||
|
If you apply the configuration new persistent volume claim will be provisioned
|
||||||
|
with the data from the volume snapshot:
|
||||||
|
|
||||||
|
```
|
||||||
|
# in folder deployment/volumes/volume-snapshots/
|
||||||
|
kubectl apply -f neo4j-data.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data Consistency Warning
|
||||||
|
|
||||||
|
Note that volume snapshots do not guarantee data consistency. Quote from the
|
||||||
|
blog post above:
|
||||||
|
|
||||||
|
> Please note that the alpha release of Kubernetes Snapshot does not provide
|
||||||
|
> any consistency guarantees. You have to prepare your application (pause
|
||||||
|
> application, freeze filesystem etc.) before taking the snapshot for data
|
||||||
|
> consistency.
|
||||||
|
|
||||||
|
In case of Neo4J this probably means that enterprise edition is required which
|
||||||
|
supports [online backups](https://neo4j.com/docs/operations-manual/current/backup/).
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
18
deployment/volumes/volume-snapshots/neo4j-data.yaml
Normal file
18
deployment/volumes/volume-snapshots/neo4j-data.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: neo4j-data-claim
|
||||||
|
namespace: human-connection
|
||||||
|
labels:
|
||||||
|
app: human-connection
|
||||||
|
spec:
|
||||||
|
dataSource:
|
||||||
|
name: neo4j-data-snapshot
|
||||||
|
kind: VolumeSnapshot
|
||||||
|
apiGroup: snapshot.storage.k8s.io
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
@ -2,7 +2,7 @@
|
|||||||
apiVersion: snapshot.storage.k8s.io/v1alpha1
|
apiVersion: snapshot.storage.k8s.io/v1alpha1
|
||||||
kind: VolumeSnapshot
|
kind: VolumeSnapshot
|
||||||
metadata:
|
metadata:
|
||||||
name: neo4j-data-snapshot-2
|
name: neo4j-data-snapshot
|
||||||
namespace: human-connection
|
namespace: human-connection
|
||||||
spec:
|
spec:
|
||||||
source:
|
source:
|
||||||
Loading…
x
Reference in New Issue
Block a user