Strategi aplikasi yang dilindungi

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:
  • Deployment: pilih satu-satunya pod yang dibuat oleh target Deployment.
  • Single-StatefulSet: pilih pod kedua yang dibuat oleh StatefulSet target jika jumlah replika lebih dari dua. Jika tidak, pilih satu-satunya pod.
  • Multi-StatefulSet: pilih pod pertama yang dibuat oleh target StatefulSet
loadTarget Menentukan nama Deployment atau StatefulSet pilihan yang digunakan untuk memuat data komponen. Pod target dipilih berdasarkan cara komponen ini disusun:
  • Deployment: pilih satu-satunya pod yang dibuat oleh target Deployment.
  • StatefulSet: selalu memilih pod pertama yang dibuat oleh target StatefulSet.
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 atau StatefulSet yang akan digunakan untuk mencadangkan data. Pod terbaik untuk dicadangkan akan otomatis dipilih. Dalam konfigurasi ketersediaan tinggi, Google merekomendasikan untuk mencadangkan dari PersistentVolumeClaim 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 resource Deployment atau StatefulSet harus sama.
  • Tujuan resource PersistentVolumeClaim dalam indeks yang sama harus sama. Untuk resource StatefulSet, indeks ditentukan dalam volumeClaimTemplate. Untuk resource Deployment, indeks ditentukan dalam resource Volume 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 atau StatefulSet yang harus digunakan untuk mengekspor data. Pod terbaik untuk dicadangkan akan dipilih secara otomatis. Dalam konfigurasi ketersediaan tinggi, sebaiknya buat cadangan dari PersistentVolumeClaim sekunder.
  • Target pemuatan: menentukan Deployment atau StatefulSet 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

Langkah berikutnya