first commit
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
SHELL=/bin/bash
|
||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||||
HOME=/root
|
||||
MAILTO=root
|
||||
|
||||
*/15 * * * * root /opt/wamblee/etcd/bin/etcd-cron > /var/log/wamblee-etcd-backup 2>&1
|
||||
30 0 * * * root /opt/wamblee/etcd/bin/etcdctl defrag --cluster > /var/log/wamblee-etcd-defrag 2>&1
|
||||
|
||||
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec nerdctl -n k8s.io "$@"
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH=/opt/wamblee/etcd/bin:$PATH
|
||||
|
||||
if [[ $# -ne 1 ]]
|
||||
then
|
||||
echo "Usage: $0 <backupname>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKUP="$1"
|
||||
|
||||
|
||||
IMAGE="$( /opt/wamblee/etcd/bin/docker ps | awk '/\/etcd$/ { print $2}' )"
|
||||
if [[ -z "$IMAGE" ]]
|
||||
then
|
||||
echo "$0: could not create backup" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker run --network host \
|
||||
-v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd \
|
||||
-v /var/lib/wamblee/etcd:/var/lib/wamblee/etcd \
|
||||
--rm "$IMAGE" sh -c "etcdctl \
|
||||
--endpoints=https://127.0.0.1:2379 \
|
||||
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
|
||||
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
|
||||
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
|
||||
snapshot save /var/lib/wamblee/etcd/$BACKUP"
|
||||
|
||||
echo "IMAGE=$IMAGE" > /var/lib/wamblee/etcd/etcdimage
|
||||
|
||||
echo "Backup done at /var/lib/wamblee/etcd/$BACKUP"
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH=/opt/wamblee/etcd/bin:$PATH
|
||||
|
||||
DATE="$( date +%Y-%m-%d_%H:%M:%S )"
|
||||
DIR="$( date +%Y-%m-%d )"
|
||||
|
||||
etcd-backup etcd-snapshot-latest.db.tmp
|
||||
mv /var/lib/wamblee/etcd/etcd-snapshot-latest.db.tmp /var/lib/wamblee/etcd/etcd-snapshot-latest.db
|
||||
|
||||
ln /var/lib/wamblee/etcd/etcd-snapshot-latest.db /var/lib/wamblee/etcd/etcd-backup-$DATE.db
|
||||
mkdir -p /var/lib/wamblee/etcd/"$DIR"
|
||||
if [[ ! -r /var/lib/wamblee/etcd/$DIR/etcd-backup.db ]]
|
||||
then
|
||||
ln /var/lib/wamblee/etcd/etcd-snapshot-latest.db /var/lib/wamblee/etcd/$DIR/etcd-backup.db
|
||||
fi
|
||||
ls -t /var/lib/wamblee/etcd/etcd-backup* | awk 'NR > 10' | xargs rm -f
|
||||
find /var/lib/wamblee/etcd -mtime +31 | xargs rm -rf
|
||||
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH=/opt/wamblee/etcd/bin:$PATH
|
||||
|
||||
if [[ $# -ne 1 ]]
|
||||
then
|
||||
(
|
||||
echo "Usage: $0 <backuppname>"
|
||||
echo " <backupname> must be a relative path to a backup below the /var/lib/wamblee/etcd directory"
|
||||
) 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
backup="$1"
|
||||
|
||||
. /var/lib/wamblee/etcd/etcdimage
|
||||
if [[ -z "$IMAGE" ]]
|
||||
then
|
||||
IMAGE="registry.k8s.io/etcd:3.5.6-0"
|
||||
echo "ETCD image cannot be determined, using fall back $IMAGE" 1>&2
|
||||
fi
|
||||
|
||||
echo "ETCD image: $IMAGE"
|
||||
|
||||
set -e
|
||||
rm -rf /var/lib/etcd.restored
|
||||
mkdir -p /var/lib/etcd.restored
|
||||
# using --network host to work around incompatibility of CNI versions
|
||||
docker run --rm \
|
||||
--network host \
|
||||
-v '/var/lib/wamblee/etcd:/var/lib/wamblee/etcd' \
|
||||
-v '/var/lib/etcd.restored:/var/lib/etcd.restored' \
|
||||
--env ETCDCTL_API=3 \
|
||||
"$IMAGE" \
|
||||
/bin/sh -c "etcdctl snapshot restore /var/lib/wamblee/etcd/$backup --data-dir /var/lib/etcd.restored/data"
|
||||
|
||||
mv /var/lib/etcd.restored/data/* /var/lib/etcd.restored
|
||||
rmdir /var/lib/etcd.restored/data
|
||||
|
||||
echo ""
|
||||
echo "Restore is available at /var/lib/etcd.restored"
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH=/opt/wamblee/etcd/bin:$PATH
|
||||
|
||||
echo "$0: verifying that etcd is not running"
|
||||
if nc -z 127.0.0.1 2379
|
||||
then
|
||||
echo "$0: etcd port 2379 is already open, skipping restore of data" 1>&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$0: verifying that containerd is running"
|
||||
if ! systemctl status containerd > /dev/null 2>&1
|
||||
then
|
||||
echo "$0: containerd is not running, cannot perform restore" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$0: verifying that /var/lib/etcd is empty"
|
||||
size="$( du -s /var/lib/etcd | awk '{ print $1}' )"
|
||||
if [[ "$size" -ne 0 ]]
|
||||
then
|
||||
echo "$0: /var/lib/etcd is not empty, assuming data left from previous etcd" 1>&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
backupfile="$( cd /var/lib/wamblee/etcd; ls -rt *.db | tail -1 )"
|
||||
echo "$0: Using backup file '$backupfile' for restore"
|
||||
|
||||
etcd-restore "$backupfile"
|
||||
if [[ $? -ne 0 ]]
|
||||
then
|
||||
echo "$0: restore of etcd failed" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
echo "$0: restore of etcd data finished"
|
||||
|
||||
rsync -avz /var/lib/etcd.restored/ /var/lib/etcd/
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH=/opt/wamblee/etcd/bin:$PATH
|
||||
|
||||
. /var/lib/wamblee/etcd/etcdimage
|
||||
if [[ -z "$IMAGE" ]]
|
||||
then
|
||||
echo "ETCD image cannot be determined" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "ETCD image: $IMAGE"
|
||||
|
||||
docker run --rm \
|
||||
--network host \
|
||||
-v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd \
|
||||
-v /var/lib/wamblee/etcd:/var/lib/wamblee/etcd \
|
||||
$IMAGE \
|
||||
etcdctl \
|
||||
--endpoints=https://127.0.0.1:2379 \
|
||||
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
|
||||
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
|
||||
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key "$@"
|
||||
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
|
||||
[Service]
|
||||
ExecStop=/opt/wamblee/etcd/bin/etcd-cron
|
||||
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
|
||||
[Unit]
|
||||
After=containerd.service
|
||||
|
||||
[Service]
|
||||
ExecStartPre=-/opt/wamblee/etcd/bin/etcd-restore-to-tmpfs
|
||||
|
||||
Reference in New Issue
Block a user