本頁說明 Google Distributed Cloud (GDC) Air-gapped 中可用的不同受保護應用程式策略。
受保護的應用程式策略可讓您執行特定的前置和後置執行掛鉤,並定義自訂行為,以暫止、備份或還原有狀態的工作負載。
定義 ProtectedApplication
資源時,您可以使用三種備份和還原策略:
策略定義可包含下列值:
類型 | 屬性 | 說明 |
---|---|---|
BackupAllRestoreAll |
備份及還原元件中的所有內容。 | |
backupPreHooks |
備份前要執行的掛鉤清單。 | |
backupPostHooks |
備份後要執行的 Hook 清單。 | |
volumeSelector |
標籤選擇器,用於指定要備份的永久磁碟區。如果為空白,系統會選取所有 PV。 | |
backupOneRestoreAll |
備份所選 Pod 的副本,並用來還原所有 Pod。 | |
backupTargetName |
備份時要使用的偏好 Deployment 或
StatefulSet 名稱。 |
|
backupPreHooks |
備份前要執行的掛鉤清單。 | |
backupPostHooks |
備份後要執行的 Hook 清單。 | |
volumeSelector |
標籤選擇器,用於指定要備份的永久磁碟區。如果為空白,系統會選取所有 PV。 | |
dumpAndLoad |
使用專屬磁碟區進行備份和還原。 | |
dumpTarget |
指定用於傾印元件資料的偏好 Deployment 或 StatefulSet 名稱。系統會根據這個元件的組成方式選取目標 Pod:
|
|
loadTarget
|
指定用於載入元件資料的偏好 Deployment 或 StatefulSet 名稱。系統會根據這個元件的組成方式選取目標 Pod:
|
|
dumpHooks |
用於傾印資料的掛鉤清單。 | |
backupPostHooks |
備份後要執行的 Hook 清單。 | |
loadHooks |
用於從專用磁碟區載入這個元件資料的 Hook 清單。也可能包含載入完成後的清除步驟。執行目標 Pod 是從 LoadTarget 選取的 Pod 之一。 |
|
volumeSelector |
標籤選擇器,用於指定要備份的永久磁碟區。如果為空白,系統會選取所有 PV。 |
備份所有資料並還原所有資料
這項策略會在備份期間備份所有應用程式資源,並在還原期間還原所有這些資源。這項策略最適合獨立應用程式,也就是 Pod 之間沒有應用程式複寫的情況。
如要採用「全部備份並全部還原」策略,請在資源定義中加入下列資訊:
掛鉤:定義要在備份磁碟區前後執行的指令,例如應用程式暫停和取消暫停步驟。這些指令會在元件內的所有 Pod 上執行。
磁碟區選取:可更精細地控制要備份及還原元件中的哪些磁碟區。未選取的磁碟區不會備份。 還原期間,系統會將備份時略過的磁碟區還原為空白磁碟區。
這個範例會建立 ProtectedApplication
資源,在備份記錄檔磁碟區前先停止檔案系統,備份完成後再解除停止狀態:
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 ]
備份一項資料,還原所有資料
這項策略會備份所選 Pod 的副本。這個單一副本是還原期間所有 Pod 的還原來源。這個方法有助於降低儲存成本和備份時間。當元件部署一個主要 PersistentVolumeClaim
和多個次要 PersistentVolumeClaims
時,這項策略適用於高可用性設定。
如要採用備份一項資源並還原所有資源的策略,您必須在資源定義中加入下列資訊:
- 備份目標:指定要使用哪個
Deployment
或StatefulSet
備份資料。系統會自動選取最適合備份的 Pod。在高可用性設定中,Google 建議從次要PersistentVolumeClaim
備份。 - 掛鉤:定義在備份磁碟區前後執行的指令,例如應用程式靜止和取消靜止步驟。這些指令只會在選取的備份 Pod 上執行。
- 磁碟區選取:可更精細地控制要備份及還原元件中的哪些磁碟區。
如果元件設定了多個 Deployment
或 StatefulSet
資源,所有資源都必須具有相同的 PersistentVolume
結構,並遵守下列規則:
- 所有
Deployment
或StatefulSet
資源使用的PersistentVolumeClaim
資源數量必須相同。 - 同一索引中的
PersistentVolumeClaim
資源用途必須相同。如果是StatefulSet
資源,索引是在volumeClaimTemplate
中定義。如果是Deployment
資源,索引會在Volume
資源中定義,且系統會略過所有非持續性磁碟區。
考量上述因素,備份時可以選取多個磁碟區集,但每個磁碟區集只能選取一個磁碟區。
這個範例假設架構為一個主要 StatefulSet
和一個次要 StatefulSet
,顯示次要 StatefulSet
中單一 Pod 內磁碟區的備份,然後還原至所有其他磁碟區:
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: [...]
傾印及載入
這項策略會使用專屬磁碟區進行備份和還原程序,且需要專屬 PersistentVolumeClaim
連接至儲存傾印資料的元件。如要採用傾印和載入策略,請在資源定義中加入下列資訊:
- 傾印目標:指定要使用哪個
Deployment
或StatefulSet
傾印資料。系統會自動選取最適合備份的 Pod。在高可用性設定中,建議從次要PersistentVolumeClaim
備份。 - 載入目標:指定要使用哪個
Deployment
或StatefulSet
載入資料。系統會自動選取最適合備份的 Pod。 載入目標不必與傾印目標相同。 - 掛鉤:定義在建立磁碟區備份前後執行的指令。您必須為傾印和載入策略定義特定掛鉤:
- 傾印掛鉤:定義將資料傾印至專屬磁碟區的掛鉤,然後再備份。這個掛鉤只會在所選傾印 Pod 上執行。
- 載入 Hook:定義應用程式啟動後載入資料的 Hook。這個 Hook 只會在所選的載入 Pod 上執行。
- 選用 - 備份後勾點:定義在備份專用磁碟區後執行的勾點,例如清理步驟。這個 Hook 只會在所選傾印 Pod 上執行。
- 磁碟區選取:指定儲存傾印資料的所有專屬磁碟區。每個傾印和載入 Pod 只能選取一個磁碟區。
如果應用程式包含 Deployments
,則每個 Deployment
都必須只有一個副本。
假設架構為一個主要 StatefulSet
和一個次要 StatefulSet
,且主要和次要 StatefulSets
都有專屬的 PersistentVolumeClaims
,以下範例說明傾印和載入策略:
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