跳到內容
開源

登錄共用的 S3 備份目的地

登錄 S3 儲存位置供資料庫、K8up 與 Velero 備份選用,並了解金鑰複製與輪替的影響。

打開 叢集 → 備份,在上方的 S3 目的地 按 新增目的地。登錄一次後,資料庫、磁碟區和叢集的備份表單都能直接選它,不用每次重填端點和金鑰。

還沒裝 Velero 也能登錄目的地。目的地只是讓表單選用的清單,排程和保留天數仍在各自的備份表單設定。

  • 已有 S3 相容的儲存貯體,以及它的端點、區域、存取金鑰 ID 和私密存取金鑰。
  • 登錄和編輯需要在 zeabur-s3-destinations Namespace 寫入 ConfigMap 和 Secret 的權限,管理員帳號就有。
  • 在備份表單選用目的地,需要能讀取 zeabur-s3-destinations 的 Secret,並在備份所在的 Namespace 建立 Secret。

每個登入的人都看得到目的地的名稱和位置,但 Zeabur Chart 沒有讓任何人讀取裡面的 Secret。沒有這項權限的成員在備份表單只能選 手動輸入,自己填金鑰。

在 叢集 → 備份 的 S3 目的地 按 新增目的地,填入:

欄位填寫方式
名稱最多 63 個字元,只能用小寫字母、數字和連字號,開頭和結尾是字母或數字,例如 r2-backups。
端點必填,https:// 或 http:// 開頭的 S3 位址。用 AWS S3 也要填。
儲存貯體已建立的儲存貯體,3 到 63 個小寫字母、數字、點或連字號。
資料夾選填,備份會放在這個路徑底下,不能有空白或 ..。
區域儲存服務需要時填。
存取金鑰 ID、私密存取金鑰新增時兩個都要填。

按 檢查變更,確認要寫入的 ConfigMap 和 Secret(金鑰不會顯示),再套用。

套用後,S3 目的地 會列出名稱、儲存貯體、資料夾和端點。清單不會檢查連線,要到備份表單選用它、跑一次備份,才知道端點和金鑰對不對。

要備份的資料去哪裡設定
資料庫專案內的資料庫 → 備份,見 資料庫備份。
服務的磁碟區檔案服務 設定 → 儲存空間 下方的 備份,使用 K8up,見 磁碟區。
叢集的物件與磁碟區檔案叢集 → 備份 → 備份存放位置,使用 Velero,見叢集備份。

新的備份表單會在 S3 目的地 選單預設選第一個登錄的目的地,也可以換成其他名稱或 手動輸入。選了目的地時,表單會帶入端點、儲存貯體、區域和資料夾,金鑰欄位則會隱藏。套用前看一下最後的資料夾,有些備份會在目的地的資料夾底下再加一層。

套用時,Zeabur 會把目的地的金鑰複製到備份自己的 Secret。資料庫和 K8up 放在專案的 Namespace,Velero 放在 Velero 的 Namespace。之後備份只讀這份複本,所以就算移除目的地或移除 Zeabur,備份也照常執行。

在目的地列按 編輯。名稱不能改。兩個金鑰都留白就沿用原本的,要換就兩個一起填,再按 檢查變更。

檢查畫面會列出每份要一起更新的金鑰複本,例如 更新 shop 裡複製的金鑰 …。資料庫、K8up 和 Velero 的複本都在同一次套用中換成新金鑰。

更新不到的複本也會列出原因,它們會繼續用舊金鑰:

  • 你無權修改那份複本。等有權限的成員再儲存一次目的地,就會換成新金鑰。
  • 複本沒有標明金鑰欄位。
  • 你無權列出所有 Namespace 的 Secret,所以找不到其他地方的複本。

一個目的地是 zeabur-s3-destinations Namespace 裡兩個同名的物件:ConfigMap 放端點、儲存貯體、區域和資料夾,Secret 放金鑰。兩個都要有 label zeabur.com/s3-destination: <名稱>,Zeabur 才會把它列進清單。region 和 prefix 沒有值時不用寫。

apiVersion: v1
kind: ConfigMap
metadata:
name: r2-backups
namespace: zeabur-s3-destinations
labels:
zeabur.com/s3-destination: r2-backups
data:
endpoint: https://s3.example.com
bucket: team-backups
region: auto
prefix: zeabur
---
apiVersion: v1
kind: Secret
metadata:
name: r2-backups
namespace: zeabur-s3-destinations
labels:
zeabur.com/s3-destination: r2-backups
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: AKIAEXAMPLE
AWS_SECRET_ACCESS_KEY: example-secret-key

備份表單選了目的地後,寫進專案的金鑰複本長這樣。label 記住來源,annotation zeabur.com/s3-destination-keys 寫出哪兩個鍵存放存取金鑰 ID 和私密存取金鑰,鍵名依備份種類而不同。這個例子是 PostgreSQL 備份用的 Secret:

apiVersion: v1
kind: Secret
metadata:
name: shop-db-backups-s3
namespace: shop
labels:
zeabur.com/s3-destination: r2-backups
annotations:
zeabur.com/s3-destination-keys: ACCESS_KEY_ID,ACCESS_SECRET_KEY
type: Opaque
stringData:
ACCESS_KEY_ID: AKIAEXAMPLE
ACCESS_SECRET_KEY: example-secret-key

自己更換金鑰時,先改目的地的 Secret,再找出每份複本,依 annotation 寫的鍵名逐一更新:

kubectl get secret -A -l zeabur.com/s3-destination=r2-backups \
-o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,KEYS:.metadata.annotations.zeabur\.com/s3-destination-keys

移除目的地就是刪掉這兩個物件。複本不受影響:

kubectl -n zeabur-s3-destinations delete configmap,secret r2-backups
  • 叢集 → 備份 的 S3 目的地 列出名稱、儲存貯體、資料夾和端點。
  • kubectl -n zeabur-s3-destinations get configmap,secret -l zeabur.com/s3-destination 列出每個目的地的 ConfigMap 和 Secret 各一個。
  • 備份套用後,上面那行 kubectl get secret -A -l zeabur.com/s3-destination=<名稱> 會多出備份所在 Namespace 的複本。
  • 選單停在 手動輸入、不能切換:你沒有讀取 zeabur-s3-destinations 裡 Secret 的權限。請管理員授權,或自己填金鑰。
  • 備份表單沒有 S3 目的地 選單:還沒有登錄任何目的地。有權新增目的地的人會看到提示,連到這個區塊。
  • 端點欄位不能留白:登錄目的地時一定要填完整的 S3 位址,AWS S3 也一樣。
  • 目的地存好了,備份卻失敗:到用它的備份頁,看那次備份或存放位置的錯誤訊息。
  • 換了目的地的金鑰,備份還在用舊的:那份複本當時沒有更新到。請有權限的成員再儲存一次目的地。

在目的地列按 移除,檢查要刪除的 ConfigMap 和 Secret 後確認。目的地會從清單和備份表單的選單消失。

已經複製出去的金鑰、備份排程和儲存貯體裡的檔案都會留著。要清掉一整組備份:先到每個用到它的地方停止排程、刪掉金鑰複本,再到儲存服務刪除這些備份檔案。確定沒有備份還在用這組金鑰後,才到儲存服務撤銷它。