登錄共用的 S3 備份目的地
登錄 S3 儲存位置供資料庫、K8up 與 Velero 備份選用,並了解金鑰複製與輪替的影響。
打開 叢集 → 備份,在上方的 S3 目的地 按 新增目的地。登錄一次後,資料庫、磁碟區和叢集的備份表單都能直接選它,不用每次重填端點和金鑰。
還沒裝 Velero 也能登錄目的地。目的地只是讓表單選用的清單,排程和保留天數仍在各自的備份表單設定。
- 已有 S3 相容的儲存貯體,以及它的端點、區域、存取金鑰 ID 和私密存取金鑰。
- 登錄和編輯需要在
zeabur-s3-destinationsNamespace 寫入 ConfigMap 和 Secret 的權限,管理員帳號就有。 - 在備份表單選用目的地,需要能讀取
zeabur-s3-destinations的 Secret,並在備份所在的 Namespace 建立 Secret。
每個登入的人都看得到目的地的名稱和位置,但 Zeabur Chart 沒有讓任何人讀取裡面的 Secret。沒有這項權限的成員在備份表單只能選 手動輸入,自己填金鑰。
填入位置與金鑰
Section titled “填入位置與金鑰”在 叢集 → 備份 的 S3 目的地 按 新增目的地,填入:
| 欄位 | 填寫方式 |
|---|---|
| 名稱 | 最多 63 個字元,只能用小寫字母、數字和連字號,開頭和結尾是字母或數字,例如 r2-backups。 |
| 端點 | 必填,https:// 或 http:// 開頭的 S3 位址。用 AWS S3 也要填。 |
| 儲存貯體 | 已建立的儲存貯體,3 到 63 個小寫字母、數字、點或連字號。 |
| 資料夾 | 選填,備份會放在這個路徑底下,不能有空白或 ..。 |
| 區域 | 儲存服務需要時填。 |
| 存取金鑰 ID、私密存取金鑰 | 新增時兩個都要填。 |
按 檢查變更,確認要寫入的 ConfigMap 和 Secret(金鑰不會顯示),再套用。
套用後,S3 目的地 會列出名稱、儲存貯體、資料夾和端點。清單不會檢查連線,要到備份表單選用它、跑一次備份,才知道端點和金鑰對不對。
在三種備份裡使用
Section titled “在三種備份裡使用”| 要備份的資料 | 去哪裡設定 |
|---|---|
| 資料庫 | 專案內的資料庫 → 備份,見 資料庫備份。 |
| 服務的磁碟區檔案 | 服務 設定 → 儲存空間 下方的 備份,使用 K8up,見 磁碟區。 |
| 叢集的物件與磁碟區檔案 | 叢集 → 備份 → 備份存放位置,使用 Velero,見叢集備份。 |
新的備份表單會在 S3 目的地 選單預設選第一個登錄的目的地,也可以換成其他名稱或 手動輸入。選了目的地時,表單會帶入端點、儲存貯體、區域和資料夾,金鑰欄位則會隱藏。套用前看一下最後的資料夾,有些備份會在目的地的資料夾底下再加一層。
套用時,Zeabur 會把目的地的金鑰複製到備份自己的 Secret。資料庫和 K8up 放在專案的 Namespace,Velero 放在 Velero 的 Namespace。之後備份只讀這份複本,所以就算移除目的地或移除 Zeabur,備份也照常執行。
在目的地列按 編輯。名稱不能改。兩個金鑰都留白就沿用原本的,要換就兩個一起填,再按 檢查變更。
檢查畫面會列出每份要一起更新的金鑰複本,例如 更新 shop 裡複製的金鑰 …。資料庫、K8up 和 Velero 的複本都在同一次套用中換成新金鑰。
更新不到的複本也會列出原因,它們會繼續用舊金鑰:
- 你無權修改那份複本。等有權限的成員再儲存一次目的地,就會換成新金鑰。
- 複本沒有標明金鑰欄位。
- 你無權列出所有 Namespace 的 Secret,所以找不到其他地方的複本。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”一個目的地是 zeabur-s3-destinations Namespace 裡兩個同名的物件:ConfigMap 放端點、儲存貯體、區域和資料夾,Secret 放金鑰。兩個都要有 label zeabur.com/s3-destination: <名稱>,Zeabur 才會把它列進清單。region 和 prefix 沒有值時不用寫。
apiVersion: v1kind: ConfigMapmetadata: name: r2-backups namespace: zeabur-s3-destinations labels: zeabur.com/s3-destination: r2-backupsdata: endpoint: https://s3.example.com bucket: team-backups region: auto prefix: zeabur---apiVersion: v1kind: Secretmetadata: name: r2-backups namespace: zeabur-s3-destinations labels: zeabur.com/s3-destination: r2-backupstype: OpaquestringData: AWS_ACCESS_KEY_ID: AKIAEXAMPLE AWS_SECRET_ACCESS_KEY: example-secret-key備份表單選了目的地後,寫進專案的金鑰複本長這樣。label 記住來源,annotation zeabur.com/s3-destination-keys 寫出哪兩個鍵存放存取金鑰 ID 和私密存取金鑰,鍵名依備份種類而不同。這個例子是 PostgreSQL 備份用的 Secret:
apiVersion: v1kind: Secretmetadata: 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_KEYtype: OpaquestringData: 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 後確認。目的地會從清單和備份表單的選單消失。
已經複製出去的金鑰、備份排程和儲存貯體裡的檔案都會留著。要清掉一整組備份:先到每個用到它的地方停止排程、刪掉金鑰複本,再到儲存服務刪除這些備份檔案。確定沒有備份還在用這組金鑰後,才到儲存服務撤銷它。