Nisam bio u potpunosti zadovoljan sa prethodnim rješenjem za backup OpenShift okruženja iz dva razloga:
- cluster resursi nisu uključeni u backup
- backup se izvršava za cijeli projekt u jedan yaml
Zbog navedenog nije moguće napraviti restore cluster-wide resursa. Također, nije moguće (barem ne brzo i efikasno) napraviti restore samo jednog resursa jednog objekta.
v1.1 rješava ove nedostatke. Dodana su dva segmenta koji će sve dostupne resurse (api-reousrces) backupirati u dedicirane yaml datoteke. U root folder će se backupirati cluster-wide resursi (npr. nodes u nodes.yaml) a u podfolder projekta će se backupirati resursi vezani za taj projekt (npr. za projekt openshift i resurs endpoints kreirati će datoteku openshift_endpoints.yaml).
Skripta je koncipirana tako da radi po popisu svih K8s/OpenShift resursa (oc api-resources) umjesto fiksnog popisa resursa tako da nije potrebno voditi brigu ukoliko se promjenom verzije K8s ili OpenShifta pojavi novi resurs.
#!/bin/bash # Log start of backup echo -e "[$(date +%x-%X)] Backup starting" # Set folders BACKUP_DIR="/opt/backup" SYS_BACKUP_DIR="$BACKUP_DIR/system/$(date +%Y_%m_%d)" APP_BACKUP_DIR="$BACKUP_DIR/applications/$(date +%Y_%m_%d)" # Create folders mkdir -p "${SYS_BACKUP_DIR}/etc/origin/" mkdir -p "${SYS_BACKUP_DIR}/etc/sysconfig/" mkdir -p "${SYS_BACKUP_DIR}/etc/pki/ca-trust/" mkdir -p "${SYS_BACKUP_DIR}/etc/docker/certs.d/" mkdir -p "${SYS_BACKUP_DIR}/etc/etcd/" echo -e "[$(date +%x-%X)] Starting filesystem backup" # Backup OpenShift cp -aR /etc/origin/* ${SYS_BACKUP_DIR}/etc/origin/ # Backup Container Network Interface cp -aR /etc/cni/* ${SYS_BACKUP_DIR}/etc/cni/ # Backup othe relevant system files cp -aR /etc/dnsmasq* ${SYS_BACKUP_DIR}/etc/ cp -aR /etc/sysconfig/* ${SYS_BACKUP_DIR}/etc/sysconfig/ # Backup PKI trusts cp -aR /etc/pki/ca-trust/* ${SYS_BACKUP_DIR}/etc/pki/ca-trust/ # Backup Docker trusted registries cp -aR /etc/docker/certs.d/* ${SYS_BACKUP_DIR}/etc/docker/certs.d/ # Backup etcd cp -aR /etc/etcd/* ${SYS_BACKUP_DIR}/etc/etcd/ # Backup list of installed packages rpm -qa | sort | tee ${SYS_BACKUP_DIR}/packages.log > /dev/null 2>&1 echo -e "[$(date +%x-%X)] Starting OpenShift backup" # Login to OpenShift oc login -u system:admin > /dev/null 2>&1 # Backup all cluster-wide resources mkdir -p "${APP_BACKUP_DIR}" RESOURCES=$(oc api-resources -o name --namespaced=false --verbs=get list | cut -d'.' -f1) for R in $RESOURCES do echo -e "[$(date +%x-%X)] OpenShift cluster ${R} resource backup" oc get -o yaml --export $R > ${APP_BACKUP_DIR}/${R}.yaml done # Get all projects echo -e "[$(date +%x-%X)] Starting OpenShift projects backup" PROJECTS=$(oc get projects -o name | cut -d'/' -f2) # Get all namespaced K8s/OpenShift resource types RESOURCES=$(oc api-resources -o name --namespaced=true --verbs=get list | cut -d'.' -f1) # Backup all projects into designated folder for P in $PROJECTS do echo -e "[$(date +%x-%X)] Starting backup of ${P} project" mkdir -p "${APP_BACKUP_DIR}/${P}/" oc project $p > /dev/null 2>&1 oc get -o yaml --export all > ${APP_BACKUP_DIR}/${P}/${P}.yaml for R in $RESOURCES do echo -e "[$(date +%x-%X)] OpenShift project ${P} resource ${R} backup" oc get -o yaml --export $R > ${APP_BACKUP_DIR}/${P}/${P}_${R}.yaml done done echo -e "[$(date +%x-%X)] Delete old backups" # Delete backups older than 7 days find /opt/backup/applications/* -ctime +6 -exec rm -rf {} \; find /opt/backup/system/* -ctime +6 -exec rm -rf {} \; # Log end of backup echo -e "[$(date +%x-%X)] Backup finished"
Skripta je dostupna i na GitHub-u.
Za slijedeću verziju skripte planiram umjesto lokalnog backupa da se yaml datoteke gurnu na GIT :)