forked from Deuxfleurs/infrastructure
Script to backup Consul KV store
This commit is contained in:
parent
2051a21662
commit
e2a0c40e6b
3 changed files with 107 additions and 0 deletions
21
app/build/backup-consul/Dockerfile
Normal file
21
app/build/backup-consul/Dockerfile
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
FROM amd64/debian:buster
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get -qq -y full-upgrade && \
|
||||||
|
apt-get install -y rsync wget openssh-client unzip && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -f /var/lib/apt/lists/*_*
|
||||||
|
|
||||||
|
RUN mkdir -p /root/.ssh
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
RUN wget https://releases.hashicorp.com/consul/1.8.5/consul_1.8.5_linux_amd64.zip && \
|
||||||
|
unzip consul_1.8.5_linux_amd64.zip && \
|
||||||
|
chmod +x consul && \
|
||||||
|
mv consul /usr/local/bin && \
|
||||||
|
rm consul_1.8.5_linux_amd64.zip
|
||||||
|
|
||||||
|
COPY do_backup.sh /root/do_backup.sh
|
||||||
|
|
||||||
|
CMD "/root/do_backup.sh"
|
||||||
|
|
19
app/build/backup-consul/do_backup.sh
Executable file
19
app/build/backup-consul/do_backup.sh
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -x -e
|
||||||
|
|
||||||
|
cd /root
|
||||||
|
|
||||||
|
chmod 0600 .ssh/id_ed25519
|
||||||
|
|
||||||
|
cat > .ssh/config <<EOF
|
||||||
|
Host backuphost
|
||||||
|
HostName $TARGET_SSH_HOST
|
||||||
|
Port $TARGET_SSH_PORT
|
||||||
|
User $TARGET_SSH_USER
|
||||||
|
EOF
|
||||||
|
|
||||||
|
consul kv export > consul_kv_dump.json
|
||||||
|
gzip consul_kv_dump.json
|
||||||
|
|
||||||
|
rsync -vvvz --progress consul_kv_dump.json.gz "backuphost:$TARGET_SSH_DIR/consul/"
|
67
app/deployment/backup.hcl
Normal file
67
app/deployment/backup.hcl
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
job "backup_periodic" {
|
||||||
|
datacenters = ["dc1"]
|
||||||
|
|
||||||
|
type = "batch"
|
||||||
|
|
||||||
|
periodic {
|
||||||
|
// Launch every hour
|
||||||
|
cron = "0 * * * * *"
|
||||||
|
|
||||||
|
// Do not allow overlapping runs.
|
||||||
|
prohibit_overlap = true
|
||||||
|
}
|
||||||
|
|
||||||
|
task "backup-consul" {
|
||||||
|
driver = "docker"
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = "lxpz/backup_consul:9"
|
||||||
|
volumes = [
|
||||||
|
"secrets/id_ed25519:/root/.ssh/id_ed25519",
|
||||||
|
"secrets/id_ed25519.pub:/root/.ssh/id_ed25519.pub",
|
||||||
|
"secrets/known_hosts:/root/.ssh/known_hosts"
|
||||||
|
]
|
||||||
|
network_mode = "host"
|
||||||
|
}
|
||||||
|
|
||||||
|
env {
|
||||||
|
CONSUL_HTTP_ADDR = "http://consul.service.2.cluster.deuxfleurs.fr:8500"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = <<EOH
|
||||||
|
TARGET_SSH_USER={{ key "secrets/backup/target_ssh_user" }}
|
||||||
|
TARGET_SSH_PORT={{ key "secrets/backup/target_ssh_port" }}
|
||||||
|
TARGET_SSH_HOST={{ key "secrets/backup/target_ssh_host" }}
|
||||||
|
TARGET_SSH_DIR={{ key "secrets/backup/target_ssh_dir" }}
|
||||||
|
EOH
|
||||||
|
|
||||||
|
destination = "secrets/env_vars"
|
||||||
|
env = true
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/backup/id_ed25519\" }}"
|
||||||
|
destination = "secrets/id_ed25519"
|
||||||
|
}
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/backup/id_ed25519.pub\" }}"
|
||||||
|
destination = "secrets/id_ed25519.pub"
|
||||||
|
}
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/backup/target_ssh_fingerprint\" }}"
|
||||||
|
destination = "secrets/known_hosts"
|
||||||
|
}
|
||||||
|
|
||||||
|
resources {
|
||||||
|
memory = 200
|
||||||
|
}
|
||||||
|
|
||||||
|
restart {
|
||||||
|
attempts = 2
|
||||||
|
interval = "30m"
|
||||||
|
delay = "15s"
|
||||||
|
mode = "fail"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue