Halaman ini menjelaskan berbagai strategi aplikasi yang dilindungi yang tersedia di Google Distributed Cloud (GDC) air-gapped.
Strategi aplikasi yang dilindungi memungkinkan Anda menjalankan hook pra-eksekusi dan pasca-eksekusi tertentu serta menentukan perilaku kustom untuk menghentikan, mencadangkan, atau memulihkan beban kerja stateful.
Ada tiga strategi pencadangan dan pemulihan yang dapat Anda gunakan saat
menentukan resource ProtectedApplication
:
Definisi strategi dapat mencakup nilai berikut:
Jenis | Atribut | Deskripsi |
---|---|---|
BackupAllRestoreAll |
Mencadangkan dan memulihkan semua yang ada di komponen. | |
backupPreHooks |
Daftar hook yang akan dieksekusi sebelum pencadangan. | |
backupPostHooks |
Daftar hook yang akan dieksekusi setelah pencadangan. | |
volumeSelector |
Pemilih label yang menentukan volume persisten yang akan dicadangkan. Jika kosong, semua PV akan dipilih. | |
backupOneRestoreAll |
Mencadangkan satu salinan pod yang dipilih dan menggunakannya untuk memulihkan semua pod. | |
backupTargetName |
Nama Deployment atau
StatefulSet pilihan yang akan digunakan untuk cadangan. |
|
backupPreHooks |
Daftar hook yang akan dieksekusi sebelum pencadangan. | |
backupPostHooks |
Daftar hook yang akan dieksekusi setelah pencadangan. | |
volumeSelector |
Pemilih label yang menentukan volume persisten yang akan dicadangkan. Jika kosong, semua PV akan dipilih. | |
dumpAndLoad |
Menggunakan volume khusus untuk pencadangan dan pemulihan. | |
dumpTarget |
Menentukan nama Deployment atau
StatefulSet pilihan yang
digunakan untuk mengekspor data komponen. Pod target
dipilih berdasarkan cara komponen ini disusun:
|
|
loadTarget
|
Menentukan nama Deployment atau
StatefulSet pilihan yang
digunakan untuk memuat data komponen. Pod target
dipilih berdasarkan cara komponen ini disusun:
|
|
dumpHooks |
Daftar hook yang digunakan untuk mengekspor data. | |
backupPostHooks |
Daftar hook yang akan dieksekusi setelah pencadangan. | |
loadHooks |
Daftar hook yang digunakan untuk memuat data komponen ini dari
volume khusus. Langkah ini juga dapat mencakup langkah-langkah pembersihan setelah pemuatan selesai. Pod target eksekusi adalah salah satu pod yang dipilih
dari LoadTarget . |
|
volumeSelector |
Pemilih label yang menentukan volume persisten yang akan dicadangkan. Jika kosong, semua PV akan dipilih. |
Mencadangkan semua dan memulihkan semua
Strategi ini mencadangkan semua resource aplikasi selama pencadangan, dan memulihkan semua resource tersebut selama pemulihan. Strategi ini paling cocok untuk aplikasi mandiri, di mana aplikasi tidak memiliki replikasi antar-pod.
Untuk strategi cadangkan semua dan pulihkan semua, sertakan informasi berikut dalam definisi resource:
Hook: menentukan perintah yang dieksekusi sebelum dan sesudah pencadangan volume, seperti langkah-langkah penghentian dan pengaktifan aplikasi. Perintah ini dieksekusi di semua pod dalam komponen.
Pemilihan volume: memberikan perincian yang lebih baik tentang volume mana yang dicadangkan dan dipulihkan dalam komponen. Volume yang tidak dipilih tidak dicadangkan. Selama pemulihan, volume apa pun yang dilewati selama pencadangan akan dipulihkan sebagai volume kosong.
Contoh ini membuat resource ProtectedApplication
yang menjeda sistem file sebelum mencadangkan volume log dan membatalkan jeda setelah pencadangan:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: nginx
namespace: sales
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: nginx
components:
- name: nginx-app
resourceKind: Deployment
resourceNames: ["nginx"]
strategy:
type: BackupAllRestoreAll
backupAllRestoreAll:
backupPreHooks:
- name: fsfreeze
container: nginx
Commands: [ /sbin/fsfreeze, -f, /var/log/nginx ]
backupPostHooks:
- name: fsunfreeze
container: nginx
commands: [ /sbin/fsfreeze, -u, /var/log/nginx ]
Mencadangkan satu dan memulihkan semua
Strategi ini mencadangkan satu salinan pod yang dipilih. Satu salinan ini adalah
sumber untuk memulihkan semua pod selama pemulihan. Metode ini dapat membantu mengurangi biaya penyimpanan dan waktu pencadangan. Strategi ini berfungsi dalam konfigurasi ketersediaan tinggi saat komponen di-deploy dengan satu PersistentVolumeClaim
utama dan beberapa PersistentVolumeClaims
sekunder.
Untuk strategi mencadangkan satu dan memulihkan semua, Anda harus menyertakan informasi berikut dalam definisi resource:
- Target pencadangan: menentukan
Deployment
atauStatefulSet
yang akan digunakan untuk mencadangkan data. Pod terbaik untuk dicadangkan akan otomatis dipilih. Dalam konfigurasi ketersediaan tinggi, Google merekomendasikan untuk mencadangkan dariPersistentVolumeClaim
sekunder. - Hook: menentukan perintah yang dieksekusi sebelum dan setelah pencadangan volume, seperti langkah-langkah penghentian dan pengaktifan aplikasi. Perintah ini hanya dieksekusi di pod cadangan yang dipilih.
- Pemilihan volume: memberikan perincian yang lebih baik tentang volume mana yang dicadangkan dan dipulihkan dalam komponen.
Jika komponen dikonfigurasi dengan beberapa resource Deployment
atau StatefulSet
, semua resource harus memiliki struktur PersistentVolume
yang sama, dan mengikuti aturan berikut:
- Jumlah resource
PersistentVolumeClaim
yang digunakan oleh semua resourceDeployment
atauStatefulSet
harus sama. - Tujuan resource
PersistentVolumeClaim
dalam indeks yang sama harus sama. Untuk resourceStatefulSet
, indeks ditentukan dalamvolumeClaimTemplate
. Untuk resourceDeployment
, indeks ditentukan dalam resourceVolume
dan volume yang tidak persisten akan dilewati.
Dengan pertimbangan ini, beberapa kumpulan volume dapat dipilih untuk pencadangan, tetapi hanya satu volume dari setiap kumpulan volume yang dipilih.
Contoh ini, dengan asumsi arsitektur satu StatefulSet
utama dan
StatefulSet
sekunder, menunjukkan pencadangan volume dalam satu pod di StatefulSet
sekunder, lalu pemulihan ke semua volume lainnya:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: mariadb
namespace: mariadb
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: mariadb
components:
- name: mariadb
resourceKind: StatefulSet
resourceNames: ["mariadb-primary", "mariadb-secondary"]
strategy:
type: BackupOneRestoreAll
backupOneRestoreAll:
backupTargetName: mariadb-secondary
backupPreHooks:
- name: quiesce
container: mariadb
command: [...]
backupPostHooks:
- name: unquiesce
container: mariadb
command: [...]
Ekspor dan muat
Strategi ini menggunakan volume khusus untuk proses pencadangan dan pemulihan serta mewajibkan PersistentVolumeClaim
khusus yang terpasang ke komponen yang menyimpan data dump. Untuk strategi dump dan pemuatan, sertakan informasi berikut dalam definisi resource:
- Target dump: menentukan
Deployment
atauStatefulSet
yang harus digunakan untuk mengekspor data. Pod terbaik untuk dicadangkan akan dipilih secara otomatis. Dalam konfigurasi ketersediaan tinggi, sebaiknya buat cadangan dariPersistentVolumeClaim
sekunder. - Target pemuatan: menentukan
Deployment
atauStatefulSet
yang harus digunakan untuk memuat data. Pod terbaik untuk dicadangkan akan dipilih secara otomatis. Target pemuatan tidak harus sama dengan target dump. - Hook: menentukan perintah yang dieksekusi sebelum dan setelah pencadangan volume. Ada hook tertentu yang harus Anda tentukan untuk strategi dump dan pemuatan:
- Hook dump: menentukan hook yang mendump data ke volume khusus sebelum pencadangan. Hook ini hanya dieksekusi di pod dump yang dipilih.
- Load hooks: menentukan hook yang memuat data setelah aplikasi dimulai. Hook ini hanya dieksekusi pada pod pemuatan yang dipilih.
- Opsional - Hook pasca-pencadangan: menentukan hook yang dieksekusi setelah volume khusus dicadangkan, seperti langkah-langkah pembersihan. Hook ini hanya dieksekusi di pod dump yang dipilih.
- Pemilihan volume: menentukan semua volume khusus yang menyimpan data dump. Anda hanya boleh memilih satu volume untuk setiap pod dump dan load.
Jika aplikasi terdiri dari Deployments
, setiap Deployment
harus memiliki
tepat satu replika.
Contoh ini, dengan asumsi arsitektur satu StatefulSet
utama dan
StatefulSet
sekunder dengan PersistentVolumeClaims
khusus untuk StatefulSets
utama
dan sekunder, menunjukkan strategi dump dan pemuatan:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: mariadb
namespace: mariadb
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: mariadb
components:
- name: mariadb-dump
resourceKind: StatefulSet
resourceNames: ["mariadb-primary", "mariadb-secondary"]
backupStrategy:
type: DumpAndLoad
DumpAndLoad:
loadTarget: mariadb-primary
dumpTarget: mariadb-secondary
dumpHooks:
- name: db_dump
container: mariadb
commands:
- bash
- "-c"
- |
mysqldump -u root --all-databases > /backup/mysql_backup.dump
loadHooks:
- name: db_load
container: mariadb
commands:
- bash
- "-c"
- |
mysql -u root < /backup/mysql_backup.sql
volumeSelector:
matchLabels:
gkebackup.gke.io/backup: dedicated-volume