first commit

This commit is contained in:
2023-02-26 13:36:15 +01:00
commit 6a75c512c4
12 changed files with 388 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
exec nerdctl -n k8s.io "$@"
+33
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 "$@"