IBM Cloud 存储实用程序
经典:安装 IBM Cloud Block Storage Attacher 插件(测试版)
使用 IBM Cloud Block Storage Attacher 插件将原始、未格式化和未加载块存储附加到群集中的经典工作节点上。
IBM Cloud Block Storage 连接程序插件仅可用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 添加原始 Block Storage for VPC 工作程序节点。
例如,您想使用软件定义存储解决方案(SDS)存储数据,如 Portworx 等软件定义存储解决方案来存储数据,但又不想使用为 SDS 使用而优化的、带有额外本地磁盘的传统裸机工作节点。 要将本地磁盘添加到经典非 SDS 工作节点,您必须在 IBM Cloud 基础架构账户中手动创建块存储设备,然后使用 IBM Cloud Block Volume Attacher 将存储附加到非 SDS 工作节点。
IBM Cloud Block Volume Attachcher 插件会在集群中的每个工作程序节点上创建 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 输出中未显示任何存储类,那么表明已成功除去存储类。
经典:为特定工作节点手动添加块存储
要添加不同的块存储器配置,将块存储器仅添加到一部分的工作程序节点,或者要拥有对供应过程的更多控制权,请使用此选项。
本主题中的指示信息仅适用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 将原始 Block Storage for VPC 添加到工作程序节点。
-
列出集群中的工作程序节点,并记下要在其中添加块存储设备的非 SDS 工作程序节点的专用 IP 地址和专区。
ibmcloud oc worker ls --cluster <cluster_name_or_ID>
-
查看决定块存储器配置中的步骤 3 和 4,以选择要添加到非 SDS 工作程序节点的块存储设备的类型、大小和 IOPS 数。
-
在非 SDS 工作程序节点所在的专区中创建块存储设备。
示例:以每 GB 两个 IOPS 配置 20 GB 持久块存储。
ibmcloud sl block volume-order --storage-type endurance --size 20 --tier 2 --os-type LINUX --datacenter dal10
例如,配置 20 GB 性能块存储,IOPS 为 100。
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)。
本主题中的指示信息仅适用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 将原始 Block Storage for VPC 添加到工作程序节点。
- 确保已 手动 将原始、未格式化和未加载的块存储添加到非 SDS 工作节点。
- 访问 Red Hat OpenShift 集群。
- 安装 块存储器 attacher 插件。
-
准备创建 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 标识。
ibm.io/nodeip
- 输入要在其中连接块存储设备并且先前授权其访问块存储设备的工作程序节点的专用 IP 地址。
ibm.io/volID
- 输入先前检索到的块存储卷的标识。
storage
- 输入先前创建的块存储设备的大小。 例如,如果块存储设备为 20 千兆字节,请输入
20Gi
。
-
-
-
创建 PV 以将块存储设备连接到非 SDS 工作程序节点。
-
如果使用
mkpvyaml
容器,请运行以下命令。oc apply -f pv-<cluster_name>.yaml
-
如果您手动添加了块存储器,请运行以下命令。
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 设置为设备标识(如
/dev/dm/1
),并且您可以在 CLI 输出的 Annotations 部分中看到 ibm.io/attachstatus=attached,那么表明块存储设备已成功连接。
如果想要拆离卷,可以删除 PV。 已拆离的卷仍可由特定工作程序节点进行访问,当您使用 IBM Cloud Block Volume 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 集群中的工作程序节点。
只能将卷连接到一个工作程序节点。 请确保卷与工作程序节点位于同一专区中,以便连接成功。
您还可以使用 CLI 来连接,拆离和列出工作程序节点的卷连接。 有关更多信息,请参阅 存储 CLI 参考。
本主题中的指示信息仅适用于 VPC 工作程序节点。 如果要将原始无格式块存储器连接到经典工作程序节点,那么必须安装 IBM Cloud Block Storage attacher 插件。
开始之前:
-
检查 VPC 工作程序节点所在的区域和区域。
ibmcloud oc worker ls -c <cluster_name>
-
决定最符合容量和性能要求的 Block Storage for Classic 配置文件。
-
供应 Block Storage for Classic 卷。 供应的卷必须与工作程序节点位于同一资源组,区域和区域中。
-
检索 IAM 令牌。
ibmcloud iam oauth-tokens
-
检索要连接到 Block Storage for Classic 实例的工作程序节点的标识。 确保选择与 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
- 分配给集群的唯一标识或名称。 您可以通过运行
ibmcloud oc cluster ls
来检索此标识。 worker_ID
- 分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行
ibmcloud oc worker ls -c <cluster_name>
来检索此值。 volume_ID
- 分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行
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 卷或存储在该卷中的数据。 您将继续计费,直到 您手动删除卷 为止。
-
标识要除去的存储卷,并记下卷标识。
ibmcloud is volumes
-
了解音量的详细信息。 此命令返回工作程序节点标识和连接标识。 记下工作程序节点标识。 在以下命令中,此标识将作为“实例名称”返回。
ibmcloud is volume <volume_ID>
-
检索 PV 的列表。 此命令将返回 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
- 分配给集群的唯一标识或名称。 您可以通过运行
ibmcloud oc cluster ls
来检索此标识。 worker_ID
- 分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行
ibmcloud oc worker ls -c <cluster_name>
来检索此值。 volume_ID
- 分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行
ibmcloud is volumes
来检索 Block Storage for Classic 卷的列表。 volume_attachment_ID
- 分配给卷连接的唯一标识。 您可以通过运行
ibmcloud is volume <volume_ID>
来检索此标识。
使用 API 查看 VPC 工作程序节点的卷连接详细信息
您可以使用 GET
请求来检索 VPC 工作程序节点的卷连接详细信息。
-
检索 IAM 令牌。
ibmcloud iam oauth-tokens
-
读取部署群集的资源组 ID。
ibmcloud oc cluster get <cluster_name_or_ID> | grep "Resource Group ID"
-
检索要查看其卷连接详细信息的工作程序节点的标识。 确保选择与 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
- 分配给群集的唯一 ID。 您可以通过运行
ibmcloud oc cluster ls
来检索此标识。 worker_ID
- 分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行
ibmcloud oc worker ls -c <cluster_name>
来检索此值。 volume_ID
- 分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行
ibmcloud is volumes
来检索 Block Storage for Classic 卷的列表。 volume_attachment_ID
- 分配给卷连接的唯一标识。 您可以通过运行
ibmcloud is volume <volume_ID>
来检索此标识。
VPC: 使用 CLI 将原始 Block Storage for VPC 连接到 VPC 工作程序节点
您可以使用 Kubernetes Service CLI 将未格式化的原始 Block Storage for Classic 连接和拆离到 VPC 集群中的工作程序节点。
只能将卷连接到一个工作程序节点。 请确保卷与工作程序节点位于同一专区中,以便连接成功。
本主题中的指示信息仅适用于 VPC 工作程序节点。 如果要将原始无格式块存储器连接到经典工作程序节点,那么必须安装 IBM Cloud Block Storage attacher 插件。
开始之前:
-
列出存储卷并记下要连接的卷的标识。
ibmcloud is vols
-
列出集群中的工作程序节点,并记下要在其中附加卷的工作程序节点的标识。
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
命令从工作程序节点中除去存储器。
登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
-
列出存储卷并记下要除去的卷的标识。
ibmcloud is vols
-
获取卷的详细信息,例如连接卷的
worker-id
。worker-id
在命令输出的 Volume Attachment Instance Reference 部分中列示为 Instance name。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
-
列出集群中工作程序节点上的存储附件,并记下要除去的附件标识。
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 工作程序的 Satellite V 4.13 集群上不支持备份和复原 Helm Chart。
通过 IBM Cloud 备份复原 Helm Chart,您可以为存储在文件存储器或块存储器持久卷声明 (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 Chart 的 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: weekly
ACCESS_KEY_ID
- 输入先前检索到的 IBM Cloud Object Storage 服务凭证的访问密钥标识。
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
以部署备份 Chart。 输入restore
以部署复原 Chart。 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-restore
pod 部署到集群。 备份 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>
备份的示例输出:
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
参数来命名发布。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
-
-
验证数据备份或复原是否成功完成。
备份:
-
验证
ibm-storage-backup
pod 是否处于运行状态。oc get pods -A | grep backup
示例输出
ibm-storage-backup 1/1 Running 0 64m
-
查看
ibm-storage-backup
pod 的日志以确保备份成功。 当您在日志中看到... backup completed
消息时,说明备份已成功完成。oc logs ibm-storage-backup
每日备份的示例输出。
[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
文件,提取文件并验证备份数据。
-
恢复:
-
使用安装包含复原数据的 PVC 的 pod 创建
deployment.yaml
文件。 以下示例部署用于在/test
安装目录上安装 PVC 的nginx
pod。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_pvc
spec.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 是否处于运行状态。
如果发现 "
ibm-storage-restore
pod 没有达到 "已完成"或 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-restore
pod 已安装 PVC,因此必须除去 pod 以释放 PVC,以便可以将 PVC 安装到集群中的其他 pod。helm uninstall <release_name> -n <namespace>
-
您已成功复原备份。 现在,可以将绑定了 PV 的 PVC 安装到集群中的其他任何 pod,以访问已复原的文件。 如果备份的容器数据包含非 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 概述。
- 在 文件系统利用率 部分中,查看 文件 I/O 带宽 (按 Pod) 磁贴。
- 查看最近一天或一周时间范围内的文件 I/O 带宽,以确定平均带宽。 您可以使用平均带宽作为阈值,以在文件 I/O 带宽在一定时间内小于平均值时设置警报。 例如,如果应用程序的平均文件 I/O 带宽为 300B/s,那么您可以在网络利用率在一定时间内保持小于 300B/s 时创建警报。
- 在 文件 I/O 带宽 (按 Pod) 磁贴中,通过单击 选项 菜单,然后单击 创建警报来创建警报。
- 打开警报菜单的 通知 部分,然后创建或选择警报通知通道。
- 保存警报。
- 对集群中部署的所有应用程序重复这些步骤。
- 通过编辑配置为手动触发警报的阈值来测试您创建的警报。 例如,如果将文件系统利用率警报设置为在 5 分钟的利用率小于 300B/s 时触发,请将阈值增大到大于应用程序 5 分钟的当前利用率,然后选择
at least once
选项。 - 验证警报是否在 5 分钟后触发。 验证警报后,将值重置为先前配置的值。
-
为集群中运行的应用程序创建网络利用率警报。
- 在 IBM Cloud Monitoring 控制台中,单击 概述 > 工作负载。
- 选择部署应用程序的 名称空间。 查找应用程序,单击应用程序上的箭头图标,然后选择 Kubernetes Pod 概述。
- 在“网络利用率”部分中,查看 网络请求计数 (按 Pod) 磁贴。
- 查看最近 1 天或 1 周时间范围内按 pod 列出的平均网络请求计数,以确定阈值。
- 在 网络请求计数 (按 Pod) 磁贴中,通过单击 选项 菜单,然后单击 创建警报来创建警报。 根据观察到的阈值设置警报参数。 例如,如果网络利用率在一定时间内保持在阈值以下,那么将触发警报。
- 打开警报菜单的 通知 部分,然后创建或选择警报通知通道。
- 保存警报。
- 对集群中部署的所有应用程序重复这些步骤。
- 通过编辑配置为手动触发警报的阈值来测试您创建的警报。 例如,如果为 5 分钟内 pod 的网络请求数小于 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 数小于 3 (表示 5 分钟) 时设置 pod 可用性警报,请将警报阈值编辑为小于 4 pod (表示 5 分钟),然后选择
at least once
选项。 - 验证警报是否在 5 分钟后触发。 验证警报后,将值重置为先前配置的值。
在触发 IBM Cloud Monitoring 警报时对持久存储器进行故障诊断
触发警报时,请查看 IBM Cloud Monitoring 中的警报详细信息,并查看持久存储器,应用程序,工作程序节点和集群的故障诊断指南以查找警报的根本原因。 您设置的警报可能与存储卷问题无关,而是与应用程序中,工作程序节点上或集群中发生的问题相关。