IBM Cloud 儲存空間公用程式
本主題涵蓋在 IBM Cloud Kubernetes Service 集群中管理原始、未格式化區塊儲存的公用程式。 公用程式和程序依您的群集基礎架構類型而有所不同。
- 經典集群
- 使用 IBM Cloud Block Storage Attacher 外掛程式,將原始區塊儲存附加到經典工作節點。
- VPC 集群
- 使用 IBM Cloud API 或 CLI 將原始 Block Storage for VPC 附加到 VPC 工作節點。 請參閱 新增原始 Block Storage for VPC 至 VPC 工作節點。
經典教學:安裝 IBM Cloud Block Storage Attacher 外掛程式(測試版)
請使用 IBM Cloud Block Storage Attacher 外掛程式,將原始、未格式化且未掛載的區塊儲存裝置掛載至叢集中的傳統工作節點。
舉例來說,若要透過軟體定義儲存(SDS)解決方案來儲存您的資料,例如 Portworx,而不使用那些針對 SDS 使用情境進行優化、並配備額外本地磁碟的傳統裸機工作節點。 若要將本地磁碟新增至您的傳統非 SDS 工作節點,您必須在 IBM Cloud 基礎架構帳戶中手動建立區塊儲存裝置,並使用 IBM Cloud 區塊卷宗掛載工具,將儲存裝置掛載至您的非 SDS 工作節點。
IBM Cloud Block Volume Attacher 外掛程式會在叢集裡的每個工作者節點上建立 Pod,作為常駐程式集的一部分,並設定 Kubernetes 儲存空間類別,您稍後會使用該類別將區塊儲存裝置連接至非 SDS 工作者節點。
如需更新或移除 IBM Cloud Block Volume Attacher 外掛程式的指示,請參閱 更新外掛程式 和 移除外掛程式。
-
遵循指示,在本端機器上安裝 Helm 用戶端第 3 版。
-
更新 Helm 儲存庫,以擷取此儲存庫中所有 Helm Chart 的最新版本。
helm repo update -
安裝 IBM Cloud Block Volume Attacher 外掛程式。 安裝外掛程式時,會將預先定義的區塊儲存空間類別新增至叢集。
helm install block-attacher iks-charts/ibm-block-storage-attacher --namespace kube-system輸出範例
NAME: block-volume-attacher LAST DEPLOYED: Thu Sep 13 22:48:18 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1beta1/ClusterRoleBinding NAME AGE ibmcloud-block-storage-attacher 1s ==> v1beta1/DaemonSet NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ibmcloud-block-storage-attacher 0 0 0 0 0 <none> 1s ==> v1/StorageClass NAME PROVISIONER AGE ibmc-block-attacher ibm.io/ibmc-blockattacher 1s ==> v1/ServiceAccount NAME SECRETS AGE ibmcloud-block-storage-attacher 1 1s ==> v1beta1/ClusterRole NAME AGE ibmcloud-block-storage-attacher 1s NOTES: Thank you for installing: ibmcloud-block-storage-attacher. Your release is named: block-volume-attacher Please refer Chart README.md file for attaching a block storage Please refer Chart RELEASE.md to see the release details/fixes -
驗證是否已順利安裝 IBM Cloud Block Volume Attacher 常駐程式集。
oc get pod -n kube-system -o wide | grep attacher輸出範例
ibmcloud-block-storage-attacher-z7cv6 1/1 Running 0 19m當您看到一個以上的 ibmcloud-block-storage-attacher Pod 時,安裝即已成功。 Pod 的數目會等於叢集裡的工作者節點數目。 所有 Pod 都必須處於 Running 狀況。
-
驗證是否已順利建立 IBM Cloud Block Volume Attacher 的儲存空間類別。
oc get sc | grep attacher輸出範例
ibmc-block-attacher ibm.io/ibmc-blockattacher 11m
更新 IBM Cloud Block Storage Attacher 外掛程式
您可以將現有的 IBM Cloud Block Storage Attacher 外掛程式升級至最新版本。
-
更新 Helm 儲存庫,以擷取此儲存庫中所有 Helm Chart 的最新版本。
helm repo update -
選用項目:將最新的 Helm Chart 下載至您的本端機器。 然後,將套件解壓縮,並檢閱
release.md檔案,以找到最新版本資訊。helm pull iks-charts/ibmcloud-block-storage-plugin -
尋找 IBM Cloud Block Storage Attacher 外掛程式的 Helm Chart 名稱。
helm ls -A輸出範例
<helm_chart_name> 1 Wed Aug 1 14:55:15 2022 DEPLOYED ibm-block-storage-attacher-1.0.0 default -
將 IBM Cloud Block Storage Attacher 升級至最新版本。
helm upgrade --force --recreate-pods <helm_chart_name> ibm-block-storage-attacher
移除 IBM Cloud Block Volume Attacher 外掛程式
若您不希望在叢集中配置並使用 IBM Cloud Block Storage Attacher 外掛程式,您可以解除安裝 Helm 圖表。
-
尋找 IBM Cloud Block Storage Attacher 外掛程式的 Helm Chart 名稱。
helm list | grep ibm-block-storage-attacher輸出範例
<helm_chart_name> 1 Wed Aug 1 14:55:15 2022 DEPLOYED ibm-block-storage-attacher-1.0.0 default -
移除 Helm Chart,以刪除 IBM Cloud Block Storage Attacher 外掛程式。
helm uninstall <helm_chart_name> -n <namespace> -
驗證是否已移除 IBM Cloud Block Storage Attacher 外掛程式 Pod。
oc get pod -n kube-system -o wide | grep attacher如果 CLI 輸出中沒有顯示任何 Pod,則表示已成功移除 Pod。
-
驗證是否已移除 IBM Cloud Block Storage Attacher 儲存空間類別。
oc get sc | grep attacher
如果 CLI 輸出中沒有顯示任何儲存空間類別,則表示已順利移除儲存空間類別。
經典方式:手動將區塊儲存新增至特定工作節點
使用此選項可新增不同的區塊儲存配置、僅將區塊儲存新增至部分工作節點,或對資源配置流程進行更細緻的控制。
-
列出叢集中的工作節點,並記錄您要為其新增區塊儲存裝置的非 SDS 工作節點的私有 IP 位址及區域。
ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID -
請參閱 「決定您的區塊儲存配置」 中的步驟 3 和 4,以選擇要新增至非 SDS 工作節點的區塊儲存裝置的類型、容量及 IOPS 數量。
-
在非 SDS 工作者節點所在的相同區域中建立區塊儲存裝置。
以下為配置 20 GB 耐用型區塊儲存(每 GB 2 IOPS)的範例。
ibmcloud sl block volume-order --storage-type endurance --size 20 --tier 2 --os-type LINUX --datacenter dal10以下為配置 20 GB 效能型區塊儲存(100 IOPS)的範例。
ibmcloud sl block volume-order --storage-type performance --size 20 --iops 100 --os-type LINUX --datacenter dal10 -
請確認區塊儲存裝置已建立,並記錄該卷的
id。 注意: 若您無法立即看到您的區塊儲存裝置,請等待幾分鐘。 然後,重新執行這個指令。ibmcloud sl block volume-list輸出範例
id username datacenter storage_type capacity_gb bytes_used ip_addr lunId active_transactions 123456789 IBM02SL1234567-8 dal10 performance_block_storage 20 - 161.12.34.123 0 0 -
請檢視您的卷相關詳細資訊,並記下
Target IP及LUN Id。ibmcloud sl block volume-detail <volume_ID>輸出範例
NAME Value ID 1234567890 User name IBM123A4567890-1 Type performance_block_storage Capacity (GB) 20 LUN Id 0 IOPS 100 Datacenter dal10 Target IP 161.12.34.123 # of Active Transactions 0 Replicant Count 0 -
授權非 SDS 工作者節點,以存取區塊儲存裝置。 請將
<volume_ID>替換為您先前取得之區塊儲存裝置的卷宗 ID,並將<private_worker_IP>替換為您用以掛載該裝置的非 SDS 工作節點的私有 IP 位址。ibmcloud sl block access-authorize <volume_ID> -p <private_worker_IP>輸出範例
The IP address 123456789 was authorized to access <volume_ID>. -
請確認您的非 SDS 工作節點已成功獲得授權,並記錄以下網址:
host_iqn、username以及password。ibmcloud sl block access-list <volume_ID>輸出範例
ID name type private_ip_address source_subnet host_iqn username password allowed_host_id 123456789 <private_worker_IP> IP <private_worker_IP> - iqn.2018-09.com.ibm:ibm02su1543159-i106288771 IBM02SU1543159-I106288771 R6lqLBj9al6e2lbp 1146581當指派
host_iqn、username及password時,表示授權已成功。
經典:將原始區塊儲存裝置掛載至非 SDS 工作節點
若要將區塊儲存裝置連接到非 SDS 工作者節點,必須使用 IBM Cloud Block Volume Attacher 儲存空間類別和區塊儲存裝置詳細資料來建立持續性磁區 (PV)。
- 確保您已 手動 新增原始、未格式化且未掛載的區塊儲存到您的非 SDS 工作者節點。
- 存取您的 Red Hat OpenShift 叢集。
- 安裝 區塊儲存體連接程式外掛程式。
-
準備建立 PV。
-
如果您使用
mkpvyaml儲存器,請執行下列指令。-
開啟
pv-<cluster_name>.yaml檔案。nano pv-<cluster_name>.yaml -
檢閱 PV 的配置。
-
-
如果您是手動新增區塊儲存:
-
建立
pv.yaml檔案。 下列指令會使用nano編輯器來建立檔案。nano pv.yaml -
將區塊儲存裝置的詳細資料新增至 PV。
apiVersion: v1 kind: PersistentVolume metadata: name: <pv_name> annotations: ibm.io/iqn: "<IQN_hostname>" ibm.io/username: "<username>" ibm.io/password: "<password>" ibm.io/targetip: "<targetIP>" ibm.io/lunid: "<lunID>" ibm.io/nodeip: "<private_worker_IP>" ibm.io/volID: "<volume_ID>" spec: capacity: storage: <size> accessModes: - ReadWriteOnce hostPath: path: / storageClassName: ibmc-block-attacher
-
metadata.name- 輸入 PV 的名稱。
ibm.io/iqn- 輸入您先前擷取的 IQN 主機名稱。
ibm.io/username- 請輸入您先前取得的那個 IBM Cloud 基礎架構使用者名稱。
ibm.io/password- 輸入先前擷取到的 IBM Cloud 基礎架構密碼。
ibm.io/targetip- 輸入您先前擷取的目標 IP。
ibm.io/lunid- 輸入先前擷取到的區塊儲存裝置的 LUN ID。
ibm.io/nodeip- 請輸入您已將區塊儲存裝置連接至該節點,且先前已授權其存取該區塊儲存裝置的工作節點之私有 IP 位址。
ibm.io/volID- 輸入您先前擷取的區塊儲存空間磁區 ID。
storage- 輸入您先前所建立區塊儲存裝置的大小。 例如,若您的區塊儲存裝置容量為 20 吉字節,請輸入
20Gi。
-
-
建立 PV,以將區塊儲存裝置連接至您的非 SDS 工作者節點。
- 如果您使用
mkpvyaml儲存器,請執行下列指令。
oc apply -f pv-<cluster_name>.yaml ``` - 如果您手動新增區塊儲存體,請執行下列指令。 ```sh {: pre} oc apply -f pv.yaml ``` - 如果您使用
-
驗證區塊儲存空間是否已順利連接至您的工作者節點。
oc describe pv <pv_name>輸出範例
NAME: kube-wdc07-cr398f790bc285496dbeb8e9137bc6409a-w1-pv1 Labels: <none> Annotations: ibm.io/attachstatus=attached ibm.io/dm=/dev/dm-1 ibm.io/iqn=iqn.2018-09.com.ibm:ibm02su1543159-i106288771 ibm.io/lunid=0 ibm.io/mpath=3600a09803830445455244c4a38754c66 ibm.io/nodeip=10.176.48.67 ibm.io/password=R6lqLBj9al6e2lbp ibm.io/targetip=161.26.98.114 ibm.io/username=IBM02SU1543159-I106288771 kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{"ibm.io/iqn":"iqn.2018-09.com.ibm:ibm02su1543159-i106288771","ibm.io/lunid":"0"... Finalizers: [] StorageClass: ibmc-block-attacher Status: Available Claim: Reclaim Policy: Retain Access Modes: RWO Capacity: 20Gi Node Affinity: <none> Message: Source: Type: HostPath (bare host directory volume) Path: / HostPathType: Events: <none>當 ibm.io/dm 設為裝置 ID(例如
/dev/dm/1),且您可以在 CLI 輸出的註釋區段中,看到 ibm.io/attachstatus=attached,表示已順利連接區塊儲存裝置。
如果您要分離磁區,請刪除 PV。 已分離的磁區仍有授權可供特定工作者節點存取,並且在您使用 IBM Cloud BlockVolume Attacher 儲存空間類別來建立新的 PV,將不同的磁區連接至相同的工作者節點時,會重新連接。 若要避免再次連接舊的分離磁區,請使用 ibmcloud sl block access-revoke 指令,解除工作者節點存取已分離磁區的授權。 分離磁區並不會從 IBM Cloud 基礎架構帳戶移除該磁區。 若要取消該磁區的計費,必須手動
從 IBM Cloud 基礎架構帳戶移除儲存空間。
VPC: 使用 API 將原始 Block Storage for VPC 新增至 VPC 工作者節點
您可以使用 Kubernetes Service API 來附加和分離原始、未格式化的 Block Storage for Classic 到 VPC 集群中的 Worker 節點。
您只能將磁區連接至一個工作者節點。 確保卷與 Worker 節點位於相同區域,才能成功附加。
您也可以使用 CLI 來連接、分離及列出工作者節點的磁區連接。 如需相關資訊,請參閱 儲存空間 CLI 參考資料。
開始之前:
-
檢查 VPC 工作者節點所在的地區及區域。
ibmcloud oc worker ls -c CLUSTER_NAME -
請選擇最符合您容量與效能需求的 Block Storage for Classic 配置。
-
佈建 Block Storage for Classic 磁區。 您佈建的磁區必須與工作者節點位於相同的資源群組、地區及區域中。
-
擷取 IAM 記號。
ibmcloud iam oauth-tokens -
讀取 Worker 節點的 ID,以附加到 Block Storage for Classic 範例。 確保您選擇的 Worker 節點與 Block Storage for Classic 磁碟區位於同一區域。
ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID -
使用
POST要求,將 Block Storage for Classic 磁區連接至工作者節點。要求範例
curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/createAttachment" -H "accept: application/json" -H "Authorization: <IAM_token>" -H "X-Auth-Resource-Group-ID: <resource_group>" -H "Content-Type: application/json" -d "{ \"cluster\": \"<cluster_name_or_ID>\", \"volumeID\": \"<volume_ID>\", \"worker\": \"<worker_ID>\"}"IAM_token- 您目前會話的 IAM OAuth 令牌。 您可以執行
ibmcloud iam oauth-tokens來擷取此值。 cluster_name_or_ID- 指派給叢集的唯一 ID 或名稱。 您可以執行
ibmcloud oc cluster ls來擷取此 ID。 worker_ID- 指定給附加磁碟區的工作站的唯一 ID。 您可以執行
ibmcloud oc worker ls -c CLUSTER_NAME來擷取此值。 volume_ID- 指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行
ibmcloud is volumes來擷取 Block Storage for Classic 磁區的清單。
範例回應。
{ "id": "0111-1aaa11a1-aa1a-111a-111b-1111a1dad1bc", "volume": { "name": "my-vol", "id": "r001-11aa0d59-a1aa-1a11-11ca-ba2bc11e01aa" }, "device": { "id": "" }, "name": "volume-attachment", "status": "attaching", "type": "data" } -
透過 檢閱 VPC 工作者節點的現有磁區連接 來驗證連接。
使用 API 從 VPC 叢集裡的工作者節點分離原始及未格式化的 Block Storage for Classic
您可以使用 DELETE 要求,從 VPC 工作者節點分離儲存空間。
從您的 VPC 群集分離儲存空間不會移除您的 Block Storage for Classic 磁碟區或儲存在磁碟區中的資料。 您會繼續收到帳單,直到 您手動刪除磁區 為止。
-
識別要移除的儲存磁碟區並記下磁碟區 ID。
ibmcloud is volumes -
查看該卷的詳細資訊。 此指令會傳回工作者節點 ID 及附件 ID。 記下工作者節點 ID。 在下列指令中,此 ID 會以「實例名稱」傳回。
ibmcloud is volume <volume_ID> -
擷取 PV 清單。 此指令會傳回您的 PV 清單,您可以使用此清單來決定哪個 PVC 使用要移除的磁碟區。
oc get pv -
說明使用磁區的 PV。 如果您不知道要移除的磁碟區用於哪個 PV,您可以在群集中的每個 PV 上執行
describe pv指令。 請記下使用 PV 的 PVC。oc describe pv <pv_name> -
請查看 Pod 是否正在使用您的儲存空間磁區。 下列指令顯示裝載磁區及相關聯 PVC 的 Pod。 如果未傳回任何 Pod,則儲存體不在使用中。
oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>" -
如果磁區正在使用的 Pod 是部署的一部分,請刪除部署。 如果您的 Pod 不屬於部署,請刪除 Pod。
oc delete deployment <deployment_name>oc delete pod <pod_name> -
刪除 PVC 及 PV。
oc delete pvc <pvc_name>oc delete pv <pv_name> -
擷取 IAM 記號。
ibmcloud iam oauth-tokens -
使用
POST要求來分離儲存體。要求範例
curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/deleteAttachment" -H "accept: application/json" -H "Authorization: <IAM_token>" -H "X-Auth-Resource-Group-ID: <resource_group>" -H "Content-Type: application/json" -d "{ \"cluster\": \"<cluster_name_or_ID\", \"volumeAttachmentID\": \"<volume_attachment_ID>\", \"volumeID\": \"<volume_ID>\", \"worker\": \"<worker_ID>\"}"IAM_token- 您目前會話的 IAM OAuth 令牌。 您可以執行
ibmcloud iam oauth-tokens來擷取此值。 cluster_name_or_ID- 指派給叢集的唯一 ID 或名稱。 您可以執行
ibmcloud oc cluster ls來擷取此 ID。 worker_ID- 指派給您要在其中連接磁區的工作者節點的唯一 ID。 您可以執行
ibmcloud oc worker ls -c CLUSTER_NAME來擷取此值。 volume_ID- 指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行
ibmcloud is volumes來擷取 Block Storage for Classic 磁區的清單。 volume_attachment_ID- 指派給磁區連接的唯一 ID。 您可以執行
ibmcloud is volume <volume_ID>來擷取此 ID。
使用 API 檢閱 VPC 工作者節點的磁區連接詳細資料
您可以使用 GET 要求來擷取 VPC 工作者節點的磁區連接詳細資料。
-
擷取 IAM 記號。
ibmcloud iam oauth-tokens -
取得您叢集所部署之資源群組的 ID。
ibmcloud oc cluster get CLUSTER_NAME_OR_ID | grep "Resource Group ID" -
擷取您要查看其磁區連接詳細資料之工作者節點的 ID。 確保您選擇的 Worker 節點與您的 Block Storage for Classic 實例位於同一區域。
ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID -
檢閱工作者節點上現有磁區連接的清單。
curl -X GET "https://containers.cloud.ibm.com/v2/storage/getAttachments?cluster=<cluster_ID>&worker=<worker_ID>" --header "X-Auth-Resource-Group-ID: <resource_group_ID>" --header "Authorization: <IAM_token>" -
擷取特定附件的詳細資料。
curl -X GET "https://containers.cloud.ibm.com/v2/storage/getAttachment?cluster=<cluster_ID>&worker=<worker_ID>&volumeAttachmentID=<volume_attachment_ID>" --header "X-Auth-Resource-Group-ID: <resource_group_ID>" --header "Authorization: <IAM_token>"IAM_token- 您目前會話的 IAM OAuth 令牌。 您可以執行
ibmcloud iam oauth-tokens來擷取此值。 cluster_ID- 分配給您叢集的唯一識別碼。 您可以執行
ibmcloud oc cluster ls來擷取此 ID。 worker_ID- 指派給您要在其中連接磁區的工作者節點的唯一 ID。 您可以執行
ibmcloud oc worker ls -c CLUSTER_NAME來擷取此值。 volume_ID- 指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行
ibmcloud is volumes來擷取 Block Storage for Classic 磁區的清單。 volume_attachment_ID- 指派給磁區連接的唯一 ID。 您可以執行
ibmcloud is volume <volume_ID>來擷取此 ID。
VPC: 使用 CLI 將原始 Block Storage for VPC 連接至 VPC 工作者節點
您可以使用 Kubernetes Service CLI 將原始、未格式化的 Block Storage for Classic 附加和分離到 VPC 群集中的工作站節點。
您只能將磁區連接至一個工作者節點。 確保卷與 Worker 節點位於相同區域,才能成功附加。
開始之前:
-
列出您的儲存磁碟區,並註記要附加的磁碟區 ID。
ibmcloud is vols -
列出群集中的工作站,並註記您附加磁碟區的工作站 ID。
ibmcloud oc worker ls -c CLUSTER_NAME_OR_ID -
將 Block Storage for Classic 連接至 VPC 工作者節點。
ibmcloud oc storage attachment create --cluster CLUSTER_NAME_OR_ID --volume VOLUME --worker WORKER_ID
使用 CLI 從 VPC 工作者節點移除原始 Block Storage for VPC
您可以使用 ibmcloud oc storage attachment rm 指令,從工作者節點移除儲存空間。
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
-
列出您的儲存磁碟區,並註記要移除的磁碟區 ID。
ibmcloud is vols -
取得磁區的詳細資料,例如磁區所連接的
worker-id。worker-id在指令輸出的 Volume Attachment Instance Reference 區段中列為 實例名稱。ibmcloud is vol <volume-ID>輸出範例
Volume Attachment Instance Reference Attachment type Instance ID Instance name Auto delete Attachment ID Attachment name data 0727_e18c10d7-7f18-48aa-b5ef-5ed163e54198 kube-bsaucubd07dhl66e4tgg-cluster-default-00000a19 false 0727-3bfe90b0-dc2d-498a-946b-8837a5dad7bc volume-attachment -
列出叢集裡工作者節點上的儲存空間連接,並記下您要移除的連接 ID。
ibmcloud oc storage attachment ls -c CLUSTER --worker WORKER_ID輸出範例:
Listing volume attachments... OK ID Name Status Type Volume ID Volume Name Worker ID 0111-1a111aaa-1111-1111-111a-aaa1a1a11a11 volume-attachment attached boot a001-f11ed1e1-1aa1-11dc-b11d-a0dc111b1111 dissuade-anointer-errand-handbrake kube-aa1111aa11aaaaa11aa1-cluster-name-default-00000110 -
移除儲存體附件。
ibmcloud oc storage attachment rm --attachment ATTACHMENT_ID -c CLUSTER --worker WORKER_ID -
驗證已從工作者節點移除您的儲存空間。
ibmcloud oc storage attachment ls -c CLUSTER_ID --worker WORKER_ID
備份及還原檔案及區塊儲存空間的 PVC 資料
使用 CoreOS Worker 的 Satellite 版本 4.13 集群不支援備份和還原 Helm 圖。
透過 IBM Cloud 備份還原 Helm 圖表,您可以為儲存於檔案儲存或區塊儲存持久性磁碟區索賠 (PVC) 的資料建立一次性或排程備份。 您的資料會儲存在您所建立並擁有的 IBM Cloud Object Storage 服務實體中。 您可以使用 IBM Cloud Object Storage 服務實例中的現有備份,將資料還原至群集中的 PVC。
- 安裝 Helm Chart 時會發生什麼情況?
- 安裝 Helm Chart 時,會在叢集裡建立 Kubernetes Pod,以執行 PVC 資料的一次性或定期備份,或將資料從 IBM Cloud Object Storage 還原至 PVC。 您可以在 Helm Chart 提供的
values.yaml檔案中配置備份或還原,或在helm install指令中設定選項。 - 我需要注意哪些限制?
- 若要備份或還原區塊儲存 PVC 的資料,您的 PVC 必須未掛載至應用程式。 區塊儲存空間是以 RWO 存取模式進行裝載。 此存取容許一次僅將一個 Pod 裝載至區塊儲存空間。 若要備份或還原資料,您必須移除使用儲存空間來卸載 PVC 的 Pod。 完成資料備份或還原之後,您可以重建 Pod,並裝載已備份或已還原的 PVC。
- 開始之前,我需要準備什麼?
- 若要將資料備份或還原至 IBM Cloud Object Storage,您必須 設定 IBM Cloud Object Storage 服務實例,建立服務認證以存取服務,並建立可保留資料的儲存區。
設定 IBM Cloud Object Storage 服務實例
建立並設定一個「IBM Cloud Object Storage」服務實例,作為待備份資料的儲存庫。
- 建立使用 HMAC 認證的 IBM Cloud Object Storage 服務實例。
- 將 IBM Cloud Object Storage 認證儲存在 Kubernetes 密碼 中。
- 建立第一個 IBM Cloud Object Storage 儲存區。
- 在服務詳細資料頁面上的導覽,按一下儲存區。
- 按一下建立儲存區。 會顯示對話框。
- 輸入儲存區的唯一名稱。 名稱必須在跨所有地區且跨所有 IBM Cloud Object Storage 帳戶的 IBM Cloud 內都唯一。
- 請從「彈性」清單中,選擇您資料的可用性等級。 如需相關資訊,請參閱 IBM Cloud Object Storage 地區及端點。 若為 VPC 叢集,請記下直接端點。 例如:
s3.direct.us.cloud-object-storage.appdomain.cloud。 - 請將位置變更為您儲存資料的地區。 請記住,您的資料可能因為法律因素而無法還原到每個地區。
- 按一下建立。
- 擷取儲存區的 IBM Cloud Object Storage 主機名稱。
- 請點擊您在上一步驟中建立的儲存桶名稱。
- 在服務詳細資訊頁面的導覽列中,點選「儲存桶」>「設定」。
- 請注意,您可以使用公開的 URL 來存取儲存桶中的資料。
如需配置服務實例的相關資訊,請參閱 IBM Cloud Object Storage 文件。
使用 IBM Cloud Object Storage 來備份及還原 PVC 資料
您可以使用 IBM Cloud 備份還原 Helm 圖,將檔案儲存或區塊儲存 PVC 中的資料備份到 IBM Cloud Object Storage,或將 IBM Cloud Object Storage 中的資料還原到群集中的 PVC。
開始之前:
-
確保您有可以備份或還原資料的 PVC。 如需如何建立 PVC 的相關資訊,請參閱 將檔案儲存空間新增至應用程式 及 將區塊儲存空間新增至應用程式。
-
若要備份區塊儲存 PVC,請確保您的 PVC 未掛載至應用程式。 區塊儲存空間是以 RWO 存取模式進行裝載。 此存取容許一次僅將一個 Pod 裝載至區塊儲存空間。 若要備份資料,您必須移除裝載儲存空間的應用程式 Pod。 若要檢查 Pod 是否裝載至 PVC,請執行下列指令。
oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>" -
遵循指示,在本端機器上安裝 Helm 用戶端,並設定 IBM Cloud Helm Chart 儲存庫。
您可以透過編輯並套用 Helm 圖表的 values.yaml 檔案,或從 CLI 執行 helm install 指令,來部署 ibm-storage-backup pod 或 ibm-storage-restore pod。
若要透過編輯 values.yaml 檔案來備份或還原 PVC,請執行下列動作:
-
請將最新版本的 Helm 圖表下載至您的本地電腦。
helm fetch --untar iks-charts/ibmcloud-backup-restore -
在
nano指令行編輯器中開啟values.yaml檔案。nano ibmcloud-backup-restore/values.yaml -
配置 Helm Chart 以備份或還原 PVC 資料。 您可以配置多個 PVC 的備份。
透過配置
values.yaml檔案來建立備份 Pod 的範例:image: repository: icr.io/iks-charts/ibmcloud-backup-restore pullPolicy: Always tag: latest ACCESS_KEY_ID: # Example: 10110abab1111bbb111aa1aaa111b1a1 SECRET_ACCESS_KEY: # Example: a1aba11aaa11b11b11aa1111a1111ba111111111a0b1b11a ENDPOINT: # Example: s3.us-east.cloud-object-storage.appdomain.cloud BUCKET_NAME: # Example: my-bucket BACKUP_NAME: # Example: my_backup PVC_NAMES: - # Example: my_pvc - # Optional example: my_pvc2 CHART_TYPE: # Example: backup or restore BACKUP_TYPE: # Example: incremental SCHEDULE_TYPE: # Example: periodic SCHEDULE_INFO: # Example: weeklyACCESS_KEY_ID- 輸入您先前擷取之 IBM Cloud Object Storage 服務認證的存取金鑰 ID。
SECRET_ACCESS_KEY- 輸入您先前擷取的 IBM Cloud Object Storage 服務認證的秘密存取金鑰。
ENDPOINT- 輸入您先前所擷取儲存區的公用 IBM Cloud Object Storage s3 API 端點。
BUCKET_NAME- 備份:輸入您先前建立的「IBM Cloud Object Storage」儲存桶名稱。 當您執行備份時,可以使用此儲存區來儲存 PVC 資料。 還原: 輸入儲存備份的 IBM Cloud Object Storage 儲存區名稱。
BACKUP_NAME- 備份: 輸入您要在 IBM Cloud Object Storage中建立的備份名稱。 還原: 輸入您在 IBM Cloud Object Storage中使用 IBM Cloud 備份還原 Helm 圖表建立的備份名稱。 如果您在 IBM Cloud Object Storage 服務實例中有多個完整備份,則 PVC 會使用最後一個完整備份的資料進行還原。 如果您有增量備份,則 PVC 會使用最後一個完整備份的資料進行還原,並且包括直到您開始還原當天為止的所有增量備份。
PVC_NAMES- 備份:輸入要備份的 PVC 的名稱。 若要備份多個 PVC,請將每個 PVC 加入 PVC 清單中。 若要列出叢集裡您可以備份的可用 PVC,請執行
oc get pvc。 還原:輸入從 IBM Cloud Object Storage 還原資料的 PVC 的名稱。 您一次只能將資料還原至一個 PVC。 若要列出叢集裡可以將資料還原至其中的可用 PVC,請執行oc get pvc。 CHART_TYPE- 輸入要部署的圖表類型名稱。 輸入
backup以部署備份圖表。 輸入restore以部署還原圖表。 BACKUP_TYPE- 只有備份才需要。 輸入
full可建立完整備份,輸入incremental則只備份新增或變更的檔案。 如果您選擇incremental,則必須指定SCHEDULING_INFO和SCHEDULING_TYPE選項。 如果您未指定BACKUP_TYPE選項,依預設會建立完整備份。 SCHEDULE_TYPE- 只有備份才需要。 輸入
periodic以建立排程備份,或將此選項保留空白以建立一次性備份。 若要建立定期備份,您必須在SCHEDULE_INFO選項中定義備份間隔。 SCHEDULE_INFO- 只有備份才需要。 若要建立定期備份,您必須決定備份排程。 在
hourly、daily或weekly之間進行選擇。 如果您設定此選項,則必須將SCHEDULE_TYPE設為periodic。
-
儲存並關閉
values.yaml檔案。 -
使用
values.yaml檔案中的自訂設定來安裝 Helm Chart。 當您安裝 Helm Chart 並配置備份或還原時,會將ibm-storage-backup或ibm-storage-restorePod 部署至叢集。 備份 Pod 會將資料從 PVC 備份至 IBM Cloud Object Storage,而還原 Pod 會將資料還原至 PVC。 將<release_name>取代為 Helm Chart 的名稱。 請務必將備份及還原 Pod 安裝在與您要備份或還原之 PVC 相同的區域中。- 請使用
helm install指令安裝「Helm」圖表。
helm install <release_name> ./ibmcloud-backup-restore -n <namespace> ``` 備份的範例輸出: ```sh {: screen} NAME: <release_name> LAST DEPLOYED: Mon Jan 20 09:17:02 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing: ibmcloud-backup-restore. Your release is named: <release_name> Please refer Chart README.md file for creating a sample PVC Please refer Chart RELEASE.md to see the release details/fixes ``` * 選用項目: 透過在 `helm install` 指令中設定選項來安裝 Helm Chart。 您可以指定 `--name` 參數來命名發行。 ```sh {: pre} helm install <release_name> --set ACCESS_KEY_ID=<access_key_ID> --set SECRET_ACCESS_KEY=<secret_access_key> --set ENDPOINT=<public_bucket_endpoint> --set BUCKET_NAME=<bucket_name> --set BACKUP_NAME=<backup_name> --set PVC_NAMES[0]=<pvc_name1> --set PVC_NAMES[1]=<pvc_name2> --set CHART_TYPE=backup --set BACKUP_TYPE=<backup_type> --set SCHEDULE_TYPE=<schedule_type> --set SCHEDULE_INFO=<schedule_info> ./ibmcloud-backup-restore ``` - 請使用
-
驗證您的資料備份或還原已順利完成。
備份: 1. 請確認 ibm-storage-backup 這個 Pod 的狀態為「Running」。
sh {: pre} oc get pods -A | grep backup 輸出範例
```sh {: screen}
ibm-storage-backup 1/1 Running 0 64m
```
2. 檢閱 `ibm-storage-backup` Pod 的日誌,以確定您的備份成功。 當您在記錄中看到 `... backup completed` 訊息時,表示您的備份已成功完成。
```sh {: pre}
oc logs ibm-storage-backup
```
每日備份的範例輸出。
```sh {: screen}
[2019-04-18 16:01:51,157] [utilities : 151] [INFO] *****************Start logging to ./Backup.log
[2019-04-18 16:01:51,158] [backup : 48] [INFO] Starting backup:
[2019-04-18 16:01:51,158] [configureOS : 66] [INFO] Configuring duplicity with IBM CloudObjectStorage i.e s3.
[2019-04-18 16:01:51,158] [backup : 62] [INFO] Configuration done!!!
[2019-04-18 16:01:51,158] [backup : 78] [INFO] Got all required input from config file!!
[2019-04-18 16:01:52,366] [backup : 119] [WARNING] Incremental backup was not created
[2019-04-18 16:01:52,366] [backup : 120] [INFO] duplicity --no-encryption incremental /myvol s3://s3.us-south.cloud-object-storage.appdomain.cloud/mybucket/helm-backup command failed due to Fatal Error: Unable to start incremental backup. Old signatures not found and incremental specified
[2019-04-18 16:01:52,367] [backup : 121] [INFO] A full backup is required before incremental backups can begin. Creating a one-time full backup and will run incremental backups for scheduled backups.
[2019-04-18 16:01:54,357] [backup : 129] [INFO] Full backup completed
[2019-04-18 16:01:54,357] [backup : 130] [INFO] Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
--------------[ Backup Statistics ]--------------
StartTime 1555603313.31 (Thu Apr 18 16:01:53 2019)
EndTime 1555603313.32 (Thu Apr 18 16:01:53 2019)
ElapsedTime 0.01 (0.01 seconds)
SourceFiles 3
SourceFileSize 20495 (20.0 KB)
NewFiles 3
NewFileSize 20495 (20.0 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 3
RawDeltaSize 15 (15 bytes)
TotalDestinationSizeChange 183 (183 bytes)
Errors 0
-------------------------------------------------
[2019-04-18 16:01:54,357] [backup : 162] [INFO] Scheduling backup as per configurations, please don't stop this program or run this in background !!!
[2019-04-18 16:01:54,358] [backup : 166] [INFO] Schedule info is: ['daily']
[2019-04-18 16:01:54,358] [backup : 172] [INFO] Scheduled for daily!!!
```
- 驗證您的資料已順利備份或還原。
-
備份:
- 在 IBM Cloud 資源清單 中尋找 IBM Cloud Object Storage 服務實例。
- 從導覽列中,選擇「儲存桶」,然後點選您在備份設定中使用的儲存桶。 您的備份會顯示為儲存區中的物件。
- 檢閱壓縮檔。 您可以下載
*.gz檔案,解壓縮該檔案,並驗證備份資料。
-
還原:
-
使用 Pod 來建立
deployment.yaml檔案,該 Pod 會裝載包含所還原資料的 PVC。 下列範例會部署nginxPod,以在/test裝載目錄上裝載 PVC。apiVersion: apps/v1 kind: Deployment metadata: name: restore labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx name: nginx volumeMounts: - name: my-volume # Example: my_volume mountPath: /test # Example: /test volumes: - name: my-volume # Example: my_volume persistentVolumeClaim: claimName: my-actual-pvc-name # Example: my_pvcspec.containers.image- 要使用的映像檔名稱。 若要列出 IBM Cloud Container Registry 帳戶中的可用映像檔,請執行
ibmcloud cr image-list。 spec.containers.name- 要部署至叢集的容器名稱。
spec.containers.volumeMounts.mountPath- 容器內裝載磁區之目錄的絕對路徑。 寫入裝載路徑的資料儲存在實體區塊儲存空間實例的根目錄下。 若要在不同應用程式之間共用一個卷,您可以為每個應用程式指定 卷的子路徑。
spec.containers.volumeMounts.name- 要裝載至 Pod 之磁區的名稱。
volumes.name- 要裝載至 Pod 之磁區的名稱。 通常這個名稱與
volumeMounts/name volumes.persistentVolumeClaim.claimName- 用於將 PV 綁定在一起的 PVC 的名稱。
-
建立部署。
oc apply -f deployment.yaml -
請確認您的 Pod 狀態為「Running」。
如果您發現
ibm-storage-restorepod 未達到已完成或 CrashLoopBackOff 狀態,還原資料可能已經失敗。 執行oc logs ibm-storage-restore,以尋找失敗的主要原因。oc get pods | grep restore輸出範例
restore-7dfc6f4c78-wkcqp 1/1 Running 0 3m54s -
登入 Pod。
oc exec <pod_name> -it bash -
導覽至您在部署 YAML 中指定的裝載目錄。
cd <mount_directory> -
列出裝載目錄中的檔案,以驗證所有資料都已還原至裝載目錄。
ls -
從叢集中刪除 Helm Chart 安裝。 如果您將資料還原至區塊儲存空間 PVC,則需要此步驟。 區塊儲存空間是以 RWO 存取模式進行裝載。 此存取容許一次僅將一個 Pod 裝載至區塊儲存空間。 因為
ibm-storage-restorePod 已裝載 PVC,所以您必須移除 Pod 以釋放 PVC,以便您可以將 PVC 裝載至叢集裡的不同 Pod。helm uninstall <release_name> -n <namespace> -
您已順利還原備份。 您現在可以裝載負責將 PV 連結至叢集內任何其他 Pod 的 PVC,以便存取還原檔案。 如果所備份的容器資料包含非 root 使用者,您必須將非 root 許可權新增至新的容器。 如需相關資訊,請參閱新增非 root 使用者對磁區的存取權。
-
-
為儲存磁區設定 IBM Cloud Monitoring
在 IBM Cloud Monitoring 中為使用儲存卷的工作負載設定警示。 如需相關資訊,請參閱 警示。
當儲存空間磁區關閉時,使用儲存空間的應用程式 Pod 具有低檔案系統 I/O、網路錯誤或導致抄本計數關閉的當機。 您可以在 IBM Cloud Monitoring 中設定警示,以在應用程式的檔案系統作業低於特定臨界值、發生網路錯誤或應用程式 Pod 未達到 Ready 狀態時收到通知。
-
從 主控台,選擇為儲存磁碟區設定警示的群集。
-
在 監視 區段中,按一下 連接,以將現有 IBM Cloud Monitoring 實例連接至叢集。 如果您沒有實例,請按一下 建立實例 以建立實例。 如需如何設定 IBM Cloud Monitoring 實例的相關資訊,請參閱 佈建實例。
-
按一下 啟動 按鈕,以開啟 IBM Cloud Monitoring 儀表板。
-
針對在叢集裡執行的應用程式建立檔案系統使用率警示。
- 從 IBM Cloud Monitoring 主控台中,按一下 概觀 > 工作量。
- 請選擇您的應用程式所部署的命名空間。 尋找您的應用程式,按一下應用程式上的箭頭圖示,然後選取 Kubernetes Pod 概觀。
- 在「檔案系統使用率」區段中,檢閱 依 Pod 的檔案 I/O 頻寬 磚。
- 檢閱過去一天或一週時間範圍的檔案 I/O 頻寬,以判定平均頻寬。 您可以使用平均頻寬作為臨界值,來設定當檔案 I/O 頻寬在特定時間量內小於平均值時的警示。 例如,如果應用程式的平均檔案 I/O 頻寬為 300B/s,則您可以針對網路使用率在特定時間量內保持低於 300B/s 時建立警示。
- 在 依 Pod 的檔案 I/O 頻寬 磚中,按一下 選項 功能表,然後按一下 建立警示,以建立警示。
- 開啟警示功能表的 通知 區段,並建立或選取警示通知頻道。
- 儲存警示。
- 針對叢集裡部署的所有應用程式重複這些步驟。
- 透過編輯您配置為手動觸發警示的臨界值,來測試您建立的警示。 例如,如果您將檔案系統使用率警示設為在使用率小於 300B/s 達 5 分鐘時觸發,請將臨界值增加為大於應用程式的現行使用率達 5 分鐘,然後選取
at least once選項。 - 驗證警示在 5 分鐘之後觸發。 驗證警示之後,請將值重設為您先前配置的值。
-
針對在叢集裡執行的應用程式建立網路使用率警示。
- 從 IBM Cloud Monitoring 主控台中,按一下 概觀 > 工作量。
- 請選擇您的應用程式所部署的命名空間。 尋找您的應用程式,按一下應用程式上的箭頭圖示,然後選取 Kubernetes Pod 概觀。
- 在「網路使用率」區段中,檢閱 依 Pod 的網路要求計數 磚。
- 檢閱過去 1 天或 1 週時間範圍內 Pod 的平均網路要求計數,以判定臨界值。
- 在 依 Pod 的網路要求計數 磚中,按一下 選項 功能表,然後按一下 建立警示,以建立警示。 根據您觀察到的臨界值來設定警示參數。 例如,如果網路使用率在特定時間量內仍低於臨界值,則會觸發警示。
- 開啟警示功能表的 通知 區段,並建立或選取警示通知頻道。
- 儲存警示。
- 針對叢集裡部署的所有應用程式重複這些步驟。
- 透過編輯您配置為手動觸發警示的臨界值,來測試您建立的警示。 例如,如果您設定警示,指出 Pod 的網路要求數在 5 分鐘內小於 3/s,請編輯警示臨界值,使其小於您觀察到的 5 分鐘臨界值,然後選取
at least once選項。 - 驗證警示在 5 分鐘之後觸發。 驗證警示之後,請將值重設為您先前配置的值。
-
針對在叢集裡執行的應用程式建立 Pod 可用性警示。
- 從 IBM Cloud Monitoring 主控台中,按一下 概觀 > 工作量。
- 請選擇您的應用程式所部署的命名空間。 尋找您的應用程式,按一下應用程式上的箭頭圖示,然後選取 Kubernetes Pod 概觀。
- 在 Pod 性能 區段中,檢閱 Pod 可用性 磚。
- 檢閱過去 1 天或 1 週時間範圍的平均 Pod 可用性,以判定臨界值。
- 請檢閱應用程式配置檔,以取得所要求的抄本數。 您可以使用此數目作為臨界值,以在可用 Pod 數目小於應用程式所要求的抄本數目時傳送警示。 如果您要求應用程式的 3 個抄本,則可以設定警示,指出在特定持續時間 (例如 30 分鐘的持續時間) 內,可用 Pod 數目是否低於所要求的抄本計數。 在此範例中,當 Pod 可用性保持低於 3 個所要求抄本時,會觸發警示。
- 在 Pod 可用性 圖磚中,按一下 選項 功能表,然後 建立警示,以建立警示。 根據您觀察到的臨界值及所要求的應用程式抄本來設定警示參數。
- 開啟警示功能表的 通知 區段,並建立或選取警示通知頻道。
- 儲存警示。
- 針對叢集裡部署的所有應用程式重複這些步驟。
- 透過編輯您配置為手動觸發警示的臨界值,來測試您建立的警示。 例如,如果您設定 Pod 可用性警示,當可用 Pod 數目在 5 分鐘內小於 3 時,請將警示臨界值編輯為在 5 分鐘內小於 4 個 Pod,然後選取
at least once選項。 - 驗證警示在 5 分鐘之後觸發。 驗證警示之後,請將值重設為您先前配置的值。
在觸發 IBM Cloud Monitoring 警示時對持續性儲存體進行疑難排解
觸發警示時,請檢閱 IBM Cloud Monitoring 中的警示詳細資訊,並檢閱持久性儲存、應用程式、工作人員節點及群集的疑難排解指南,以找出警示的根本原因。 您設定的警示可能與儲存空間磁區問題無關,而是與應用程式、工作者節點上或叢集裡發生的問題相關。