From 55d137132f0edeffe4ec88d0b53533c7d566b5c5 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Thu, 22 Jan 2026 19:05:31 +0100 Subject: [PATCH] backup k3s volumes --- .../factory/playbooks/backup/backup.yml | 22 +++-- .../factory/playbooks/backup/cron_report.yml | 2 +- .../factory/playbooks/backup/gitea.yml | 2 +- .../factory/playbooks/backup/k3s_pvc.yml | 83 +++++++++++++++++++ 4 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 ansible/arcodange/factory/playbooks/backup/k3s_pvc.yml diff --git a/ansible/arcodange/factory/playbooks/backup/backup.yml b/ansible/arcodange/factory/playbooks/backup/backup.yml index c94d7d0..7246762 100644 --- a/ansible/arcodange/factory/playbooks/backup/backup.yml +++ b/ansible/arcodange/factory/playbooks/backup/backup.yml @@ -1,15 +1,21 @@ --- -- name: setup cron report - ansible.builtin.import_playbook: cron_report.yml +# - name: setup cron report +# ansible.builtin.import_playbook: cron_report.yml -- name: postgres - ansible.builtin.import_playbook: postgres.yml - vars: - backup_root_dir: "/mnt/backups" - backup_dirname: "postgres" +# - name: postgres +# ansible.builtin.import_playbook: postgres.yml +# vars: +# backup_root_dir: "/mnt/backups" +# backup_dirname: "postgres" - name: gitea ansible.builtin.import_playbook: gitea.yml vars: backup_root_dir: "/mnt/backups" - backup_dirname: "gitea" \ No newline at end of file + backup_dirname: "gitea" + +- name: k3s_pvc + ansible.builtin.import_playbook: k3s_pvc.yml + vars: + backup_root_dir: "/mnt/backups" + backup_dirname: "k3s_pvc" \ No newline at end of file diff --git a/ansible/arcodange/factory/playbooks/backup/cron_report.yml b/ansible/arcodange/factory/playbooks/backup/cron_report.yml index 10335fa..114ae32 100644 --- a/ansible/arcodange/factory/playbooks/backup/cron_report.yml +++ b/ansible/arcodange/factory/playbooks/backup/cron_report.yml @@ -24,7 +24,7 @@ name: - postfix - msmtp - - msmtp-mta + # - msmtp-mta # conflicts with recent pi setup - may be required by pi2 with old setup - mailutils state: present update_cache: yes diff --git a/ansible/arcodange/factory/playbooks/backup/gitea.yml b/ansible/arcodange/factory/playbooks/backup/gitea.yml index ab5be62..df92eca 100644 --- a/ansible/arcodange/factory/playbooks/backup/gitea.yml +++ b/ansible/arcodange/factory/playbooks/backup/gitea.yml @@ -22,7 +22,7 @@ set_fact: backup_cmd: >- docker exec -u {{ gitea_user }} {{ gitea_container_name }} - gitea dump --skip-log --skip-db --type tar.gz -c /data/gitea/conf/app.ini -C /data/gitea/ -f - + gitea dump --skip-log --skip-db --skip-package-data --type tar.gz -c /data/gitea/conf/app.ini -C /data/gitea/ -f - - name: test backup_cmd ansible.builtin.shell: | diff --git a/ansible/arcodange/factory/playbooks/backup/k3s_pvc.yml b/ansible/arcodange/factory/playbooks/backup/k3s_pvc.yml new file mode 100644 index 0000000..1954765 --- /dev/null +++ b/ansible/arcodange/factory/playbooks/backup/k3s_pvc.yml @@ -0,0 +1,83 @@ +--- +- name: Backup K3S Persistent Volumes + hosts: pi1 + gather_facts: yes + become: yes + + vars: + backup_dir: "{{ backup_root_dir }}/{{ backup_dirname }}" + scripts_dir: "/opt/k3s_volumes" + keep_days: 15 + + tasks: + - name: S'assurer que le répertoire de backup existe + file: + path: "{{ backup_dir }}" + state: directory + mode: '0755' + + - name: S'assurer que le répertoire de scripts existe + file: + path: "{{ scripts_dir }}" + state: directory + mode: '0755' + + - name: define backup command + set_fact: + backup_cmd: |- + echo " + $(kubectl get -A pv -o yaml) + --- + $(kubectl get -A pvc -o yaml) + " + + - name: test backup_cmd + ansible.builtin.shell: | + {{ backup_cmd }} > /dev/null + + - name: Créer le script de backup + copy: + dest: "{{ scripts_dir }}/backup.sh" + mode: '0755' + content: | + #!/bin/bash + set -e + mkdir -p {{ backup_dir }} + {{ backup_cmd }} > {{ backup_dir }}/backup_$(date +\%Y\%m\%d).volumes + find {{ backup_dir }} -type f -name 'backup_*.volumes' -mtime +{{ keep_days }} -delete + + SCRIPTS_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")" + {{ backup_cmd }} > $SCRIPTS_DIR/backup.volumes + + - name: Ajouter une tâche cron pour backup k3s volumes tous les jours à 4h + cron: + name: "Backup K3S Volumes" + minute: "0" + hour: "4" + user: root + job: "{{ scripts_dir }}/backup.sh" + + - name: Créer le script de restauration + copy: + dest: "{{ scripts_dir }}/restore.sh" + mode: '0755' + content: | + #!/bin/bash + set -e + + BACKUP_DIR="{{ backup_dir }}" + + if [ -z "$1" ]; then + FILE=$(ls -1t "$BACKUP_DIR"/backup_*.volumes | head -n 1) + echo "Aucune date fournie, restauration du dernier dump : $FILE" + else + FILE="$BACKUP_DIR/backup_$1.volumes" + if [ ! -f "$FILE" ]; then + echo "Fichier $FILE introuvable" + exit 1 + fi + fi + + kubectl apply -f "$FILE" + + echo "Restauration des volumes k3s terminée."