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
DeploymentatauStatefulSetyang akan digunakan untuk mencadangkan data. Pod terbaik untuk dicadangkan akan otomatis dipilih. Dalam konfigurasi ketersediaan tinggi, Google merekomendasikan untuk mencadangkan dariPersistentVolumeClaimsekunder. - 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
PersistentVolumeClaimyang digunakan oleh semua resourceDeploymentatauStatefulSetharus sama. - Tujuan resource
PersistentVolumeClaimdalam indeks yang sama harus sama. Untuk resourceStatefulSet, indeks ditentukan dalamvolumeClaimTemplate. Untuk resourceDeployment, indeks ditentukan dalam resourceVolumedan 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
DeploymentatauStatefulSetyang harus digunakan untuk mengekspor data. Pod terbaik untuk dicadangkan akan dipilih secara otomatis. Dalam konfigurasi ketersediaan tinggi, sebaiknya buat cadangan dariPersistentVolumeClaimsekunder. - Target pemuatan: menentukan
DeploymentatauStatefulSetyang 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