Backup OpenShift okruženja sastoji se od nekoliko komponenata koje je potrebno backupirati:
- sistemske datoteke
- konfiguracija OpenShifta (u sklopu sistemskih datoteka)
- konfiguracija projekata (deployment config, service, tj. OpenShift/Kubernetes objekti)
- podaci sadržani u Persistent Volume
- podaci u pod-ovima (iako nikada ne bi trebalo biti podataka u pod-ovima za backup jer se direktno kosi sa konceptom kontejnerizacije)
Ovaj članak se ne fokusira na podatke u PV-ovima i podatke u pod-ovima već na backup OpenShift sistemskih datoteka i OpenShift objekata u projektima. U primjerima je prikazan backup master nodea ali vrlo lako se, uz manje prilagodbe, može primijeniti i na infra node i compute node. Detaljnije o backupu OpenShifta može se pročitati u službenoj dokumentaciji a na kojoj se temelji i ovaj članak.
Preduvjeti
Za pohranu datoteka potrebno je kreirati odgovarajuće foldere. Za ovaj primjer kreirana su dva foldera u koji će se pohranjivati backup:
- /opt/backup/system/
- /etc/backup/applications/
Folderima je potrebno dodijeliti odgovarajuća prava (ovisi o korisničkom računu koji će pokretati skriptu za backup). Prema nazivu nije problematično zaključiti gdje će se pohranjivati što :)
Sistemske datoteke
Sistemske datoteke koje je potrebno pohraniti su:
- /etc/origin/*
- /etc/cni/*
- /etc/dnsmasq*
- /etc/sysconfig/*
- /etc/pki/ca-trust/*
- /etc/docker/certs.d/* (opcionalno, ako se koriste Docker registry sa self-signed ili internal PKI certifikatima)
- /etc/etcd/* (ovo ovisi o načinu na koji je deployan etcd)
Dodatno, i opcionalno, je napraviti popis instaliranih paketa te taj popis backupirati. U svakom slučaju može dobro doći kod oporavka nodea tako da paketi budu usklađeni sa ostatkom klastera te je i ova aktivnost uključena u skriptu.
OpenShift projekti
Nadam se da OpenShift deploymente čuvate već na izdvojenoj lokaciji u backupu (poželjno u nekom version control sustavu), bilo da su to heml chartovi ili OpenShift template. To bi trebalo biti dovoljno za oporavak projekata ali za svaku slučaj nije loše napraviti dodatan backup koji će obuhvaćati zadnje promjene (svim smo svjesni da se ponekad rade direktne interventne izmjene pa se zaboravi te izmjene odraditi u helmovima ili templateima). Moguće je backupirati svaki resurs za sebe ali OpenShift omogućava da se kreira jedna yaml datoteka koja će sadržavati podatke svih resursa projekta. Naredba niže će kreirati yaml datoteku sa svim resursima projekta ali će ukloniti podatke specifične za klaster na kojemu je napravljen backup što teoretski omogućava da se na sasvim drugom klasteru napravi import tj. restore cijelog projekta :)
oc get -o yaml --export all
Skripta
Za potrebe backupa navedenog izrađena je skripta koja će napraviti backup svih sistemskih datoteka, instaliranih paketa te će kreirati yaml datoteke za sve projekte OpenShifta. Sve se pohranjuje na lokaciji /opt/backup/ u odgovarajućim folderima (applications za OpenShift objekte, system za datoteke operativnog sustava) u podfolder sa nazivom prema aktualnom datumu (YYYY_mm_dd). Da se podaci ne gomilaju, na kraju izvršavanja backupa brišu se podaci stariji od 7 dana.
OpenShift login (oc login -u system:admin) nije sretno rješenje (zahtijeva da se skripta izvršava pod root) i postoji bolji način ali to je tema za neki drugi članak.
Skriptu je moguće preuzeti sa GitHub-a.
#!/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)] 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)] OpenShift projects backup" # Login to OpenShift oc login -u system:admin > /dev/null 2>&1 # Get all projects PROJECTS=$(oc get projects -o name | cut -d'/' -f2) # 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 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"
Ako imate prijedloge poboljšanja slobodno stavite u komentare :)
One thought on “Backup OpenShift okruženja”