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