Aller au contenu

Concourse - Backup / Restore#

Backup#

Concourse web#

Postgres Operator#

export ZONE="ocb-example"
export NAMESPACE="concourse-infra" # or "concourse"

export DUMP_FILE="$(date +%F)_${ZONE}_${NAMESPACE}.sql"

kswitch "${ZONE}"
export PGPASSWORD="$(kubectl get secret -n "${NAMESPACE}" "postgres.concourse-postgresql.credentials" --template={{.data.password}} | base64 -d)"
export POSTGRES_MASTER="$(kubectl get pods -n "${NAMESPACE}" -l spilo-role=master -o custom-columns=NAME:.metadata.name --no-headers)"
kubectl exec -it -n "${NAMESPACE}" "${POSTGRES_MASTER}" -- bash -c "PGPASSWORD='${PGPASSWORD}' pg_dump -c -O --if-exists -U concourse concourse" > "${DUMP_FILE}"

# Check
head -n 2 "${DUMP_FILE}"; tail -n 3 "${DUMP_FILE}"
# --
# -- PostgreSQL database dump
# -- PostgreSQL database dump complete

Concourse workers#

Les workers concourse ne possèdent pas de données persistentes, il n'y a donc pas de backup.

Restore#

Concourse web#

La chart helm peut être redéployé via trackbone pour rétablir l'état de concourse. La restoration de la base de données est décrite ci-dessous. Les pipelines, teams, jobs et autres sont normalement conservés.

Postgres Operator#

Warning

Deux types de sauvegardes sont disponibles possible sur postgresql : - Le format de la procédure ci-dessus, en SQL, doit être restoré via la commande psql - Le format binaire postgresql tel que généré par les pipelines postgres-backup (malgré l'extension erronée .sql) doit être restoré via la commande pg_restore

export ZONE="ocb-example"
export NAMESPACE="concourse-infra" # or "concourse"

export DUMP_FILE="YYYY-MM-DD_${ZONE}_${NAMESPACE}.sql" # set to the correct file name you want to restore

export POSTGRES_MASTER="$(kubectl get pods -n "${NAMESPACE}" -l spilo-role=master -o custom-columns=NAME:.metadata.name --no-headers)"

kswitch "${ZONE}"

kubectl scale --replicas=0 deployment -n "${NAMESPACE}" concourse-web

kubectl cp "${DUMP_FILE}" -n "${NAMESPACE}" "${POSTGRES_MASTER}":/home/postgres/pgdata/ # can take some time, no output

Via psql

kubectl exec -it -n "${NAMESPACE}" "${POSTGRES_MASTER}" -- bash -c "psql -U concourse -f /home/postgres/pgdata/${DUMP_FILE}"

Via pg_restore

kubectl exec -it -n "${NAMESPACE}" "${POSTGRES_MASTER}" -- bash -c "pg_restore -v -U concourse -d concourse /home/postgres/pgdata/${DUMP_FILE}"
kubectl scale --replicas=1 deployment -n "${NAMESPACE}" concourse-web

Concourse workers#

Les workers concourse ne possèdent pas de données persistentes. Il n'y a donc pas de procédure de restoration dédiée. Il faut reprovisioner les machines en suivant la documentation de déploiement habituelle, et eventuellement relancer le pod concourse web :

export ZONE="ocb-example"
export NAMESPACE="concourse-infra" # or "concourse"

kswitch "${ZONE}"
kubectl delete pod -n "${NAMESPACE}" concourse-web-xxxxxxxxxx-xxxx

puis vérifier que les workers sont running et que les pipelines fonctionnent :

fly switch -z "${ZONE}" -n main # add -c for client instance
fly workers

# name                                  containers  platform  tags  team  state    version  age
# caascad-ci-workers-infra-infra-prd-0  62          linux     none  none  running  2.3      1d 
# caascad-ci-workers-infra-infra-prd-1  52          linux     none  none  running  2.3      1d 
# caascad-ci-workers-infra-infra-prd-2  55          linux     none  none  running  2.3      1d 
# caascad-ci-workers-infra-infra-prd-3  56          linux     none  none  running  2.3      1d 
# caascad-ci-workers-infra-infra-prd-4  66          linux     none  none  running  2.3      1d