建立 S3 物件儲存與儲存貯體
建立 SeaweedFS 物件儲存,讓應用程式透過 S3 連線上傳檔案並管理儲存貯體。
在專案選 新增 → 物件儲存,填入容量與第一個儲存貯體,再 檢查變更。儲存服務就緒後,用 接到服務 加入 S3 端點與金鑰,讓應用程式上傳檔案。
- 已有專案,並有建立物件儲存的權限。替應用程式加入連線時,另需修改該服務的權限。顯示私密存取金鑰需要讀取機密的權限。
- 管理員已安裝 SeaweedFS Operator,見管理叢集元件。
- 叢集有可用的儲存類別與空間。
- 準備使用相容 S3 的應用程式或用戶端。建立表單配置的端點供叢集內使用。
建立儲存服務
Section titled “建立儲存服務”選擇名稱、容量與儲存貯體
Section titled “選擇名稱、容量與儲存貯體”開啟 新增 → 物件儲存,填寫:
| 欄位 | 填寫方式 |
|---|---|
| 名稱 | 例如 files。最多 30 個字元,以小寫字母開頭,使用小寫字母、數字與連字號。 |
| 儲存空間 | 檔案資料的磁碟區大小,預設 10Gi。 |
| 儲存貯體 | 例如 uploads。可留空,之後再新增。名稱使用 3 到 63 個小寫字母、數字或連字號,開頭與結尾須為字母或數字。 |
| 儲存類別 | 選擇檔案要放置的儲存空間,容量能否擴充依儲存類別而定。 |
容量欄位設定的是 volume server 的資料空間。master 與 filer 也各有 1 GiB 的持久儲存空間。
選擇應用程式並檢查變更
Section titled “選擇應用程式並檢查變更”可在建立表單的 接到服務 先勾選應用程式,或等物件儲存就緒後再連接。按 檢查變更,確認名稱、容量、儲存貯體與要修改的服務,再套用。
這份變更會建立 SeaweedFS 儲存服務、供應用程式使用的身分與金鑰,以及選定的儲存貯體。
等待儲存服務就緒
Section titled “等待儲存服務就緒”從專案打開物件儲存的 概覽,等待狀態 就緒,並確認 組成部分 與 儲存貯體。剛建立時連線金鑰可能尚未產生,可到 事件 和 日誌 查看 operator 的建立進度。
把 S3 連線加入應用程式
Section titled “把 S3 連線加入應用程式”- 在物件儲存的 概覽 → 連線 按 接到服務。
- 勾選同專案的應用程式,選擇 儲存貯體,確認 變數名稱 與 會加入的變數。
- 按 檢查變更,核對將更新的服務並套用。
- 讓應用程式的 S3 用戶端讀取這些變數,再上傳並讀回一個測試檔案。
沒有名稱衝突、也沒有自行改名時,預設加入:
| 變數 | 內容 |
|---|---|
S3_ENDPOINT | 私有 S3 HTTP 端點,例如 http://files-s3.shop.svc:8333。以頁面顯示的實際值為準。 |
S3_ACCESS_KEY_ID | 從機密讀取的存取金鑰 ID。 |
S3_SECRET_ACCESS_KEY | 從機密讀取的私密存取金鑰。 |
S3_REGION | us-east-1。 |
S3_BUCKET | 這次選擇的儲存貯體,未選擇時不加入。 |
應用程式原本已經有相同名稱的變數時,表單會提示衝突,或建議在變數名稱前面加上物件儲存的名稱。依 會加入的變數 對照應用程式實際使用的設定。加入變數會更新服務副本。
需要手動設定時,在 連線 複製 端點、區域 與 存取金鑰 ID。有權限時,按 私密存取金鑰 旁的 顯示。端點使用叢集 DNS,叢集外的電腦無法直接使用這個位址。
新增與刪除儲存貯體
Section titled “新增與刪除儲存貯體”要新增儲存貯體,在 概覽 的 儲存貯體 按 新增儲存貯體,填入名稱,檢查變更 後套用。等待該列顯示 Ready,再讓應用程式使用它。
貯體清單會列出容量與物件數,還沒有統計時顯示 還沒統計。上傳、下載與瀏覽檔案用 S3 用戶端,這個頁面只管理儲存貯體。
刪除時,按貯體該列的刪除按鈕,閱讀確認內容,再套用。Zeabur 建立的貯體使用 Delete 回收政策,刪除時會連同檔案移除。既有貯體若使用保留政策,確認內容會說明檔案保留在儲存服務。
保留檔案與修改設定
Section titled “保留檔案與修改設定”物件儲存頁面提供 概覽、日誌、事件 與 設定。要擴充檔案資料的空間,在 設定 → 儲存空間 填入更大的值,例如 20Gi,按 檢查變更,確認後按 擴充到 20Gi。Operator 會直接擴充磁碟,檔案都會保留。容量只能擴大,欄位下方會寫出目前的儲存類別能否擴充。
其他 operator 設定,在 設定 上方切換到 YAML 修改,再檢查變更後套用。
要把檔案留在另一個位置,從能連到私有端點的應用程式或 S3 用戶端,將貯體內容複製到另一個 S3 服務,並確認複本能讀取。檔案的複製排程與還原由該工具管理,這個頁面沒有資料庫那樣的 備份 分頁或還原按鈕。
概覽 顯示 就緒,組成部分 的 master、volume、filer、S3 都在執行,儲存貯體 每一列顯示 Ready,連線 有 存取金鑰 ID,就可以使用。用 kubectl 查看:
kubectl -n shop get seaweed fileskubectl -n shop get buckets.seaweed.seaweedfs.comkubectl -n shop get secret files-app -o jsonpath='{.data.accessKey}' | base64 -dfiles-app 機密由 SeaweedFS Operator 依 S3Credentials 建立,有 accessKey 和 secretKey。它出現之後,應用程式就能連線。從叢集內的 Pod 用 S3 用戶端列出儲存貯體,例如 aws --endpoint-url http://files-s3.shop.svc:8333 s3 ls,看得到 uploads 就表示金鑰和端點都對。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”物件儲存由 SeaweedFS Operator 管理,Zeabur 只寫 operator 讀的物件,移除 Zeabur 後照樣運作。下面的 YAML 等於表單用名稱 files、容量 10Gi、儲存貯體 uploads 建立,存成 files.yaml 後用 kubectl -n shop apply -f files.yaml 套用:
apiVersion: seaweed.seaweedfs.com/v1kind: Seaweedmetadata: name: filesspec: image: chrislusf/seaweedfs:4.48 volumeServerDiskCount: 1 master: replicas: 1 persistence: enabled: true resources: requests: storage: 1Gi podSecurityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault containerSecurityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] volume: replicas: 1 requests: storage: 10Gi podSecurityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault containerSecurityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] filer: replicas: 1 persistence: enabled: true resources: requests: storage: 1Gi podSecurityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault containerSecurityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] s3: replicas: 1 port: 8333 podSecurityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault containerSecurityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL]---apiVersion: seaweed.seaweedfs.com/v1kind: S3Identitymetadata: name: files-appspec: seaweedRef: name: files---apiVersion: seaweed.seaweedfs.com/v1kind: S3Credentialsmetadata: name: files-appspec: seaweedRef: name: files identityRef: name: files-app---apiVersion: seaweed.seaweedfs.com/v1kind: S3Policymetadata: name: files-appspec: seaweedRef: name: files statements: - effect: Allow actions: ["s3:*"] resources: ["*"]---apiVersion: seaweed.seaweedfs.com/v1kind: S3PolicyBindingmetadata: name: files-appspec: seaweedRef: name: files policyRef: name: files-app subjects: - kind: S3Identity name: files-app---apiVersion: seaweed.seaweedfs.com/v1kind: Bucketmetadata: name: files-uploadsspec: name: uploads clusterRef: name: files reclaimPolicy: Delete access: - user: files-app actions: [Read, Write, List, Tagging]- Seaweed 是儲存服務本身。S3 端點是
files-s3,連接埠 8333。 - S3Identity、S3Credentials、S3Policy、S3PolicyBinding 建立應用程式用的帳號
files-app,並允許它存取所有儲存貯體。 - 每個儲存貯體是一個 Bucket,名稱是
<物件儲存名稱>-<儲存貯體名稱>,spec.name才是 S3 看到的名稱。新增儲存貯體就是再建一個 Bucket。 - 要指定儲存類別,在
master.persistence、filer.persistence加storageClassName,在volume加storageClassName。 - 擴充容量:改
spec.volume.requests.storage,例如kubectl -n shop patch seaweed files --type=merge -p '{"spec":{"volume":{"requests":{"storage":"20Gi"}}}}'。
接到服務 只是替服務加環境變數。存成 connect.yaml,用 kubectl -n shop patch deployment web --patch-file connect.yaml 套用:
spec: template: spec: containers: - name: web env: - name: S3_ENDPOINT value: http://files-s3.shop.svc:8333 - name: S3_ACCESS_KEY_ID valueFrom: secretKeyRef: name: files-app key: accessKey - name: S3_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: files-app key: secretKey - name: S3_REGION value: us-east-1 - name: S3_BUCKET value: uploads刪除儲存貯體或整個物件儲存,就是刪除這些物件:
kubectl -n shop delete buckets.seaweed.seaweedfs.com files-uploadskubectl -n shop delete s3policybinding/files-app s3policy/files-app s3credentials/files-app s3identity/files-appkubectl -n shop delete seaweed files先刪儲存貯體,再刪帳號,最後刪 Seaweed,和介面的 刪除物件儲存 順序相同。Delete 回收政策的儲存貯體會連同檔案刪除。
無法連線或沒有金鑰時
Section titled “無法連線或沒有金鑰時”| 情況 | 接著做 |
|---|---|
| 新增 選單要求先安裝元件 | 請管理員安裝 SeaweedFS Operator。 |
| 狀態一直 未知 或組成部分未就緒 | 查看 事件、日誌 與 operator 回報,確認磁碟區和相關 Pod 能啟動。 |
| 存取金鑰 ID 空白 | 等待 operator 建立認證資訊,再重新整理。檢查認證物件與 Pod 的事件。 |
| 私密存取金鑰無法顯示 | 確認自己有讀取該專案機密的權限。 |
| 接到服務 找不到可選服務 | 先建立同專案的應用程式,確認它可以修改,且不是其他工具管理的服務。 |
| 既有物件儲存無法 接到服務 | 此動作需要能辨識的應用程式金鑰。先依實際端點和金鑰手動設定應用程式。 |
| S3 用戶端連不到端點 | 確認用戶端位於叢集內、使用頁面列出的端點與區域,並核對金鑰和貯體名稱。 |
刪除物件儲存
Section titled “刪除物件儲存”先中斷應用程式對它的連線,或把服務改接到要保留的目的地。接著在物件儲存右上角的 更多 選 刪除物件儲存。
刪除清單包含儲存貯體、身分與金鑰相關物件、Seaweed,以及 Zeabur 找到的資料磁碟區。逐一確認後再套用。底層磁碟是否留下,取決於它的回收政策。