mirror of
https://github.com/vmware-tanzu/velero.git
synced 2025-12-23 14:25:22 +00:00
Merge pull request #795 from wwitzel3/hooks-with-pv
Update Pre/Post hooks example.
This commit is contained in:
22
Dockerfile-fsfreeze-pause.alpine
Normal file
22
Dockerfile-fsfreeze-pause.alpine
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright 2018 the Heptio Ark contributors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
FROM alpine:3.7
|
||||||
|
|
||||||
|
MAINTAINER Wayne Witzel III <wayne@heptio.com>
|
||||||
|
|
||||||
|
RUN apk add --no-cache ca-certificates
|
||||||
|
RUN apk add --update --no-cache busybox util-linux
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/sh", "-c", "sleep infinity"]
|
||||||
14
Makefile
14
Makefile
@@ -129,9 +129,22 @@ shell: build-dirs build-image
|
|||||||
|
|
||||||
DOTFILE_IMAGE = $(subst :,_,$(subst /,_,$(IMAGE))-$(VERSION))
|
DOTFILE_IMAGE = $(subst :,_,$(subst /,_,$(IMAGE))-$(VERSION))
|
||||||
|
|
||||||
|
build-fsfreeze:
|
||||||
|
@docker build -t $(REGISTRY)/fsfreeze-pause:$(VERSION) -f Dockerfile-fsfreeze-pause.alpine _output
|
||||||
|
@docker images -q $(REGISTRY)/fsfreeze-pause:$(VERSION) > $@
|
||||||
|
|
||||||
|
push-fsfreeze:
|
||||||
|
@docker push $(REGISTRY)/fsfreeze-pause:$(VERSION)
|
||||||
|
ifeq ($(TAG_LATEST), true)
|
||||||
|
docker tag $(REGISTRY)/fsfreeze-pause:$(VERSION) $(IMAGE):latest
|
||||||
|
docker push $(REGISTRY)/fsfreeze-pause:latest
|
||||||
|
endif
|
||||||
|
@docker images -q $(REGISTRY)/fsfreeze-pause:$(VERSION) > $@
|
||||||
|
|
||||||
all-containers:
|
all-containers:
|
||||||
$(MAKE) container
|
$(MAKE) container
|
||||||
$(MAKE) container BIN=ark-restic-restore-helper
|
$(MAKE) container BIN=ark-restic-restore-helper
|
||||||
|
$(MAKE) build-fsfreeze
|
||||||
|
|
||||||
container: verify test .container-$(DOTFILE_IMAGE) container-name
|
container: verify test .container-$(DOTFILE_IMAGE) container-name
|
||||||
.container-$(DOTFILE_IMAGE): _output/bin/$(GOOS)/$(GOARCH)/$(BIN) $(DOCKERFILE)
|
.container-$(DOTFILE_IMAGE): _output/bin/$(GOOS)/$(GOARCH)/$(BIN) $(DOCKERFILE)
|
||||||
@@ -145,6 +158,7 @@ container-name:
|
|||||||
all-push:
|
all-push:
|
||||||
$(MAKE) push
|
$(MAKE) push
|
||||||
$(MAKE) push BIN=ark-restic-restore-helper
|
$(MAKE) push BIN=ark-restic-restore-helper
|
||||||
|
$(MAKE) push-fsfreeze
|
||||||
|
|
||||||
|
|
||||||
push: .push-$(DOTFILE_IMAGE) push-name
|
push: .push-$(DOTFILE_IMAGE) push-name
|
||||||
|
|||||||
@@ -14,11 +14,6 @@ As of version v0.7.0, Ark also supports "post" hooks - these execute after all c
|
|||||||
completed, as well as after all the additional items specified by custom actions have been backed
|
completed, as well as after all the additional items specified by custom actions have been backed
|
||||||
up.
|
up.
|
||||||
|
|
||||||
An example of when you might use both pre and post hooks is freezing a file system. If you want to
|
|
||||||
ensure that all pending disk I/O operations have completed prior to taking a snapshot, you could use
|
|
||||||
a pre hook to run `fsfreeze --freeze`. Next, Ark would take a snapshot of the disk. Finally, you
|
|
||||||
could use a post hook to run `fsfreeze --unfreeze`.
|
|
||||||
|
|
||||||
There are two ways to specify hooks: annotations on the pod itself, and in the Backup spec.
|
There are two ways to specify hooks: annotations on the pod itself, and in the Backup spec.
|
||||||
|
|
||||||
### Specifying Hooks As Pod Annotations
|
### Specifying Hooks As Pod Annotations
|
||||||
@@ -51,4 +46,38 @@ Ark v0.7.0+ continues to support the original (deprecated) way to specify pre ho
|
|||||||
Please see the documentation on the [Backup API Type][1] for how to specify hooks in the Backup
|
Please see the documentation on the [Backup API Type][1] for how to specify hooks in the Backup
|
||||||
spec.
|
spec.
|
||||||
|
|
||||||
|
## Hook Example with fsfreeze
|
||||||
|
|
||||||
|
We are going to walk through using both pre and post hooks for freezing a file system. Freezing the
|
||||||
|
file system is useful to ensure that all pending disk I/O operations have completed prior to taking a snapshot.
|
||||||
|
|
||||||
|
We will be using [example/nginx-app/with-pv.yaml][2] for this example. Follow the [steps for your provider][3] to
|
||||||
|
setup this example.
|
||||||
|
|
||||||
|
### Annotations
|
||||||
|
|
||||||
|
The Ark [example/nginx-app/with-pv.yaml][2] serves as an example of adding the pre and post hook annotations directly
|
||||||
|
to your declarative deployment. Below is an example of what updating an object in place might look like.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl annotate pod -n nginx-example -l app=nginx \
|
||||||
|
pre.hook.backup.ark.heptio.com/command='["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]' \
|
||||||
|
pre.hook.backup.ark.heptio.com/container=fsfreeze \
|
||||||
|
post.hook.backup.ark.heptio.com/command='["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]' \
|
||||||
|
post.hook.backup.ark.heptio.com/container=fsfreeze
|
||||||
|
```
|
||||||
|
|
||||||
|
Now test the pre and post hooks by creating a backup. You can use the Ark logs to verify that the pre and post
|
||||||
|
hooks are running and exiting without error.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
ark backup create nginx-hook-test
|
||||||
|
|
||||||
|
ark backup get nginx-hook-test
|
||||||
|
ark backup logs nginx-hook-test | grep hookCommand
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
[1]: api-types/backup.md
|
[1]: api-types/backup.md
|
||||||
|
[2]: examples/nginx-app/with-pv.yaml
|
||||||
|
[3]: cloud-common.md
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ spec:
|
|||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: nginx
|
app: nginx
|
||||||
|
annotations:
|
||||||
|
pre.hook.backup.ark.heptio.com/container: fsfreeze
|
||||||
|
pre.hook.backup.ark.heptio.com/command: '["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]'
|
||||||
|
post.hook.backup.ark.heptio.com/container: fsfreeze
|
||||||
|
post.hook.backup.ark.heptio.com/command: '["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]'
|
||||||
spec:
|
spec:
|
||||||
volumes:
|
volumes:
|
||||||
- name: nginx-logs
|
- name: nginx-logs
|
||||||
@@ -62,6 +67,14 @@ spec:
|
|||||||
- mountPath: "/var/log/nginx"
|
- mountPath: "/var/log/nginx"
|
||||||
name: nginx-logs
|
name: nginx-logs
|
||||||
readOnly: false
|
readOnly: false
|
||||||
|
- image: gcr.io/heptio-images/fsfreeze-pause:latest
|
||||||
|
name: fsfreeze
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: "/var/log/nginx"
|
||||||
|
name: nginx-logs
|
||||||
|
readOnly: false
|
||||||
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
|
|||||||
Reference in New Issue
Block a user