本地存储器-文件和块
使用本地块或文件卷为 IBM Cloud Satellite® 集群设置持久存储器。 您可以使用 Satellite 存储模板来创建存储配置。 将存储器配置分配给集群时,所选存储器提供者的存储器驱动程序将安装在集群中。
先决条件
必须先识别集群中具有所需可用磁盘的工作程序节点,然后才能创建本地存储器配置。 然后,对这些工作程序节点进行标签,以便仅在这些工作程序节点上安装本地存储驱动程序。
-
确保您拥有以下权限
- 计费服务的 编辑器。
- Manager 和 Editor for Kubernetes 服务。
- Satellite 服务的 Satellite Link 管理员 和 读者。
-
- 确保在创建集群时选择 对 Satellite 配置 选项启用集群管理访问权。 如果在创建集群时未对 Satellite 配置启用管理员 (admin) 访问权,那么必须重新创建集群并启用管理员访问权,然后才能部署存储器。
-
部署本地存储器操作程序。 要设置本地文件或块存储器,必须部署本地存储器操作程序。
-
确保集群中要在存储配置中使用的工作程序节点除了具有 Satellite所需的磁盘外,还具有至少一个可用的本地磁盘。 额外磁盘必须无格式。
-
标注具有可用磁盘且要在配置中使用的工作程序节点。 本地存储驱动程序仅安装在标注的工作程序节点上。
获取本地存储器配置的设备详细信息
创建本地存储器配置时,必须指定要使用的设备。 在以下步骤中检索的设备路径在创建配置时指定为参数。
-
登录到集群并获取可用工作程序节点的列表。 记下要在配置中使用的工作程序节点。
oc get nodes
-
登录到要用于本地存储器配置的每个工作程序节点。
oc debug node/<node-name>
-
在工作程序节点上部署调试 pod 时,运行以下命令以列出工作程序节点上的可用磁盘。
-
允许主机二进制文件。
chroot /host
-
列出您的设备。
lsblk
-
获取设备的详细信息。 验证要使用的设备是否已卸载且未格式化。
fdisk -l
-
-
列出工作程序节点上的可用块存储磁盘。 必须将已卸载的磁盘用于本地存储器配置。 在
lsblk
命令的以下示例输出中,nvme2n1
磁盘已卸载并且没有分区。NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:3 0 100G 0 disk |-nvme0n1p1 259:4 0 1M 0 part `-nvme0n1p2 259:5 0 100G 0 part / nvme1n1 259:0 0 20G 0 disk nvme2n1 259:1 0 20G 0 disk nvme3n1 259:2 0 139.7G 0 disk /var/data
-
对要用于本地存储器配置的每个工作程序节点重复上述步骤。
标记工作程序节点
在 检索要在配置中使用的磁盘的设备路径 之后,请标注磁盘所在的工作程序节点。
-
获取工作程序节点 IP 地址。
oc get nodes
-
标注先前检索到的工作程序节点。 本地存储驱动程序将使用此标签部署到工作程序节点。 您可以在示例命令中使用
storage=local-block
标签,也可以使用key=value
格式创建自己的标签。oc label nodes <worker-IP> <worker-IP> <worker-IP> "storage=local-block"
示例输出
node/<worker-IP> labeled node/<worker-IP> labeled node/<worker-IP> labeled
-
验证是否已将标签添加到要使用的工作程序节点。 运行以下命令以在工作程序节点上显示标签,并突出显示上一步添加的标签。
oc get nodes --show-labels | grep --color=always storage=local-block
在控制台中创建和分配配置
-
查看 参数参考。
-
从 "位置" 控制台,选择要在其中创建存储配置的位置。
-
选择 存储器 > 创建存储器配置
-
输入配置名称。
-
选择存储类型。
-
选择版本并单击下一步
-
如果您选择的 存储器类型 接受定制参数,请在 参数 选项卡上输入这些参数。
-
如果您选择的 存储器类型 需要私钥,请在 私钥 选项卡上输入私钥。
-
在 存储类 选项卡上,查看配置所部署的存储类或创建定制存储类。
-
在 分配给服务 选项卡上,选择要将配置分配给的服务。
-
单击 完成 以分配存储器配置。
在 CLI 中创建配置
-
查看要使用的模板版本的 参数参考。
-
登录到 IBM Cloud CLI。
ibmcloud login
-
列出 Satellite 位置并记下
Managed from
列。ibmcloud sat location ls
-
将 Satellite 位置的
Managed from
区域作为目标。 例如,对于wdc
targetus-east
。 有关更多信息,请参阅 Satellite 区域。ibmcloud target -r us-east
-
如果使用除
default
以外的资源组,请将其作为目标。ibmcloud target -g <resource-group>
-
针对要使用的模板版本,复制以下某个示例命令。 有关该命令的更多信息,请参阅 命令参考 中的
ibmcloud sat storage config create
。用于创建 V 1.0.0 配置的示例命令。
ibmcloud sat storage config create --location LOCATION --name NAME --template-name local-storage --template-version 1.0.0 --param "install-local-storage-file=INSTALL-LOCAL-STORAGE-FILE" --param "auto-discover-devices-file=AUTO-DISCOVER-DEVICES-FILE" [--param "file-nodes-label-key=FILE-NODES-LABEL-KEY"] [--param "file-nodes-label-value=FILE-NODES-LABEL-VALUE"] [--param "file-devicepath=FILE-DEVICEPATH"] --param "fstype=FSTYPE" --param "install-local-storage-block=INSTALL-LOCAL-STORAGE-BLOCK" --param "auto-discover-devices-block=AUTO-DISCOVER-DEVICES-BLOCK" [--param "block-nodes-label-key=BLOCK-NODES-LABEL-KEY"] [--param "block-nodes-label-value=BLOCK-NODES-LABEL-VALUE"] [--param "block-devicepath=BLOCK-DEVICEPATH"]
-
根据要使用的设置定制命令。
-
运行命令创建配置。
-
验证是否已创建配置。
ibmcloud sat storage config get --config CONFIG
在 API 中创建配置
-
生成 API 密钥,然后请求刷新令牌。 有关详细信息,请参阅 使用 API 密钥生成IBM CloudIAM 令牌。
-
查看要使用的模板版本的 参数参考。
-
复制以下某个示例请求并替换要使用的变量。
用于创建 V 1.0.0 配置的示例请求。
curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createStorageConfigurationByController" -H "accept: application/json" -H "Authorization: TOKEN" -H "Content-Type: application/json" -d "{ \"config-name\": \"string\", \"controller\": \"string\", \"storage-class-parameters\": [ { \"additionalProp1\": \"string\", \"additionalProp2\": \"string\", \"additionalProp3\": \"string\" } ], \"storage-template-name\": \"local-storage\", \"storage-template-version\": \"1.0.0\", \"update-assignments\": true, \"user-config-parameters\": { \"entry.name\": \"INSTALL-LOCAL-STORAGE-FILE\", { \"entry.name\": \"AUTO-DISCOVER-DEVICES-FILE\", { \"entry.name\": \"FILE-NODES-LABEL-KEY\", { \"entry.name\": \"FILE-NODES-LABEL-VALUE\", { \"entry.name\": \"FILE-DEVICEPATH\", { \"entry.name\": \"FSTYPE\", { \"entry.name\": \"INSTALL-LOCAL-STORAGE-BLOCK\", { \"entry.name\": \"AUTO-DISCOVER-DEVICES-BLOCK\", { \"entry.name\": \"BLOCK-NODES-LABEL-KEY\", { \"entry.name\": \"BLOCK-NODES-LABEL-VALUE\", { \"entry.name\": \"BLOCK-DEVICEPATH\",\"user-secret-parameters\": }
在 CLI 中创建任务
-
列出存储配置,并记下要分配给集群的存储配置。
ibmcloud sat storage config ls
-
获取要向其分配存储器的集群,集群组或服务的标识。
要确保集群已向 Satellite 配置注册或要创建组,请参阅 设置集群以与 Satellite 配置配合使用。
用于列出集群组的示例命令。
ibmcloud sat group ls
用于列出集群的示例命令。
ibmcloud oc cluster ls --provider satellite
用于列出 Satellite 服务的示例命令。
ibmcloud sat service ls --location <location>
-
将存储器配置分配给先前检索的集群,组或服务。 有关更多信息,请参阅
ibmcloud sat storage assignment create
命令。用于将配置分配给集群组的示例命令。
ibmcloud sat storage assignment create --group GROUP --config CONFIG --name NAME
用于将配置分配给集群的示例命令。
ibmcloud sat storage assignment create --cluster CLUSTER --config CONFIG --name NAME
用于将配置分配给服务集群的示例命令。
ibmcloud sat storage assignment create --service-cluster-id CLUSTER --config CONFIG --name NAME
-
确认任务已创建。
ibmcloud sat storage assignment ls (--cluster CLUSTER | --config CONFIG | --location LOCATION | --service-cluster-id CLUSTER)
在 API 中创建存储器分配
-
复制以下某个示例请求。
用于将 配置分配给集群的示例请求。
curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createAssignmentByCluster" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"channelName\": \"CONFIGURATION-NAME\", \"cluster\": \"CLUSTER-ID\", \"controller\": \"LOCATION-ID\", \"name\": \"ASSIGNMENT-NAME\"}"
请求 将配置分配给集群组的示例。
curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/satellite/createAssignment" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"channelName\": \"CONFIGURATION-NAME\", \"cluster\": \"string\", \"groups\": [ \"CLUSTER-GROUP\" ], \"name\": \"ASSIGNMENT-NAME\"}"
-
将变量替换为详细信息并运行请求。
-
通过列出分配来验证是否已创建分配。
curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignments" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
在控制台中更新存储器分配
您可以使用 Satellite 控制台 对分配应用最新补丁更新。
-
从 Satellite 控制台中的“位置”页面,选择您的位置。
-
单击 存储器 选项卡以查看配置。
-
单击要更新的配置。
-
单击信息 信息 (i) 图标以应用最新修订版或补丁。
-
可选: 为存储器分配启用自动补丁更新。 启用自动补丁更新可确保分配始终具有最新的安全修订。
如果启用自动补丁更新,那么仍必须手动应用主要更新。
在 CLI 中手动升级分配
升级分配以使用最新的存储器模板修订版。
-
列出 Satellite 存储分配,记录要升级的 Satellite 分配。
ibmcloud sat storage assignment ls
-
列出 Satellite 存储模板以查看最新的可用版本。
ibmcloud sat storage template ls
-
升级 Satellite 分配。
用于升级分配的示例命令。
ibmcloud sat storage assignment upgrade --assignment ASSIGNMENT
在 CLI 中为配置和分配启用自动补丁更新
您可以使用 sat storage assignment autopatch enable
CLI 为分配启用自动补丁更新。 启用自动补丁更新将自动应用最新的存储模板修订 (补丁)。 您仍必须手动应用主要更新。
-
列出 Satellite 存储配置。 记下配置 ID。
ibmcloud sat storage assignment ls
-
运行以下某个示例命令以对配置及其关联的分配启用自动补丁更新。 输入您在上一步中获取的配置 ID。
用于对分配启用自动补丁更新的示例命令。
ibmcloud sat storage assignment autopatch enable --config CONFIG (--all | --assignment ASSIGNMENT-ID [--assignment ASSIGNMENT-ID])
用于对给定配置下的所有存储器分配启用自动补丁更新的示例命令。
ibmcloud sat storage assignment autopatch enable --config CONFIG --all
用于禁用特定配置下所有分配的自动补丁更新的示例命令。
ibmcloud sat storage assignment autopatch disable --config CONFIG --all
用于禁用单个分配和特定配置的自动补丁更新的示例命令。
ibmcloud sat storage assignment autopatch disable --config CONFIG --assignment ASSIGNMENT-ID
用于对多个分配和特定配置禁用自动补丁更新的示例命令。
ibmcloud sat storage assignment autopatch disable --config CONFIG --assignment ASSIGNMENT-ID --assignment ASSIGNMENT-ID
在 CLI 中手动升级配置
您可以升级 Satellite 存储配置,以获取同一主版本中的最新存储模板修订版。
-
列出 Satellite 存储配置,记录要升级的 Satellite 配置。
ibmcloud sat storage config ls
-
升级Satellite配置。 请注意,仅更新配置。 如果要升级使用此配置的分配,可以指定
--include-assignments
选项,也可以使用assignment update
命令手动更新每个分配。用于将配置升级到最新修订版的示例命令。
ibmcloud sat storage config upgrade --config CONFIG [--include-assignments]
用于将配置及其关联的分配升级到最新修订版的示例命令。
ibmcloud sat storage config upgrade --config CONFIG --include-assignments
在 API 中升级配置和分配
您可以使用 /v2/storage/satellite/updateAssignment
API 通过新的集群或集群组更新分配。 将 updateConfigVersion
设置为 true
以应用修订更新。
-
复制以下示例请求,并替换要更新的集群组和分配的变量。
curl -X PATCH "https://containers.cloud.ibm.com/global/v2/storage/satellite/updateAssignment" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d "{ \"groups\": [ \"CLUSTER-GROUPS\" ], \"name\": \"ASSIGNMENT-NAME\", \"updateConfigVersion\": true, \"uuid\": \"ASSIGNMENT-ID\"}"
-
运行请求。
-
获取分配的详细信息以验证更新。
curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignment?uuid=ASSIGNMENT-ID" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
在 API 中为分配启用自动补丁更新
您可以使用 /v2/storage/satellite/setAssignmentAutoupgrade
API 为分配启用自动补丁更新。 启用自动补丁更新将自动应用最新的存储模板修订 (补丁)。 您仍必须手动应用主要更新。
-
复制以下示例请求,并替换要更新的集群组和分配的变量。
curl -X PATCH "https://containers.cloud.ibm.com/global/v2/storage/satellite/setAssignmentAutoupgrade" -H "accept: application/json" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d { "config": "string", "controller": "string", "autopatch": boolean,"assignment" : { "all": boolean, "uuid": ["string", "string", ...], } }
-
运行请求。
-
获取分配的详细信息以验证升级。
curl -X GET "https://containers.cloud.ibm.com/global/v2/storage/satellite/getAssignment?uuid=ASSIGNMENT-ID" -H "accept: application/json" -H "Authorization: Bearer TOKEN"
部署使用本地存储器的应用程序
创建本地存储器配置并将其分配给集群后,可以创建使用本地块存储器的应用程序。
您可以通过向持久卷添加标签将 PVC 映射到特定持久卷。 有关更多信息,请参阅 选择器的Kubernetes 文档。
-
在名为
local-pvc.yaml
的本地机器上保存以下 PVC YAML 文件。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: local-pvc spec: accessModes: - ReadWriteOnce volumeMode: Block resources: requests: storage: 20Gi # Important: Ensure that size of your claim is not larger than the local disk. storageClassName: sat-local-block-gold
-
在集群中创建 PVC。
oc create -f local-pvc.yaml
-
确认已创建 PVC。 请注意,
sat-local-block-gold
存储类的volumeBindingMode
为waitForFirstConsumer
。oc get pvc | grep local
要确保将 pod 安排到具有存储器的工作程序节点,或者确保需要存储器的应用程序未被其他 pod 抢占,您可以指定
nodeAffinity
并设置 pod 优先级。 有关更多信息,请参阅 Kubernetes 文档以了解 pod 优先级和抢占 以及设置 节点亲缘关系。 -
部署使用本地存储器 PVC 的应用程序 pod。 将以下示例应用程序 YAML 另存为本地机器上名为
app.yaml
的文件。 在此示例中,nodeAffinity
规范确保仅将此 pod 调度到具有指定标签的工作程序节点。apiVersion: v1 kind: Pod metadata: name: app spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: storage # Enter the 'key' of the worker node label created earlier. operator: In values: - local-block # Enter the 'value' of the worker label that you created earlier. containers: - name: nginx image: nginx volumeDevices: - name: data devicePath: "/dev/nvme2n1" # Enter the path to your local device. volumes: - name: data persistentVolumeClaim: claimName: local-pvc
-
在集群中创建应用程序 pod。
oc create -f app.yaml
-
登录到应用程序 pod 并验证您是否可以写入本地磁盘。
kubectl exec <pod_name> -it bash
-
将目录更改为
dev
文件夹。cd dev
-
运行
ls -lR <device-path>
命令以验证设备详细信息,以及应用程序 pod 是否可以对块设备具有读写许可权 (由命令输出中的brw
指示)。ls -lR /dev/nvme2n1
示例输出
brw-rw-rw-. 1 root disk 202, 32 Mar 3 21:24 /dev/nvme2n1
-
可选 运行以下命令以将数据写入块设备。
-
将
"block_data"
写入安装到应用程序的本地存储设备。 将<device-path>
替换为存储设备的路径。 示例:/dev/nvme2n1
。kubectl exec <pod_name> -- bash -c "echo "block_data" | dd conv=unblock of=<device-path>"
-
验证数据是否已写入设备。 将
<device-path>
替换为存储设备的路径。 示例:/dev/nvme2n1
。kubectl exec <pod_name> -- bash -c "od -An -c -N 10 <device-path>"
示例输出
b l o c k _ d a t a
-
-
删除
test
pod。
oc delete pod <pod_name>
从控制台中除去存储器配置
- 从 Satellite 存储仪表板中,选择要删除的存储配置。
- 选择 操作 > 删除。
- 输入存储器配置的名称。
- 选择删除。
从命令行除去本地存储器配置
-
列出
local-storage
名称空间中的资源。 删除存储器分配时,将除去这些资源。oc get all -n local-storage
示例输出
NAME READY STATUS RESTARTS AGE pod/local-disk-local-diskmaker-clvg6 1/1 Running 0 29h pod/local-disk-local-diskmaker-kqddq 1/1 Running 0 29h pod/local-disk-local-diskmaker-p6z9q 1/1 Running 0 29h pod/local-disk-local-provisioner-dw5g7 1/1 Running 0 29h pod/local-disk-local-provisioner-hxd9n 1/1 Running 0 29h pod/local-disk-local-provisioner-tfg95 1/1 Running 0 29h pod/local-storage-operator-df4994656-7826l 1/1 Running 0 29h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/local-storage-operator ClusterIP 172.21.147.17 <none> 60000/TCP 29h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/local-disk-local-diskmaker 3 3 3 3 3 <none> 29h daemonset.apps/local-disk-local-provisioner 3 3 3 3 3 <none> 29h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/local-storage-operator 1/1 1 1 29h NAME DESIRED CURRENT READY AGE replicaset.apps/local-storage-operator-df4994656 1 1 1 29h
-
列出存储器分配并查找用于集群的存储分配。
ibmcloud sat storage assignment ls (--cluster CLUSTER | --config CONFIG | --location LOCATION | --service-cluster-id CLUSTER)
-
除去分配。 除去分配后,将从属于存储分配的所有集群中除去本地存储驱动程序 pod 和存储类。
ibmcloud sat storage assignment rm --assignment <assignment_ID>
-
列出
local-storage
名称空间中的资源,并验证是否已除去本地存储驱动程序 pod。oc get all -n local-storage
示例输出
No resources found in local-storage namespace.
-
列出集群中的存储类,并验证是否已除去本地存储类。
oc get sc
-
可选: 除去存储器配置。
-
列出存储配置。
ibmcloud sat storage config ls
-
除去存储器配置。
ibmcloud sat storage config rm --config <config_name>
-
-
列出 PVC 并记下要除去的 PVC 的名称。
oc get pvc
-
移除目前安装 PVC 的任何 pod。
-
列出当前安装要删除的 PVC 的所有 pod。 如果未返回任何 pod,那么您当前没有任何使用 PVC 的 pod。
oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
示例输出
app sat-local-block-gold
-
除去使用 PVC 的 pod。 如果 pod 是部署的一部分,请除去该部署。
oc delete pod <pod_name>
oc delete deployment <deployment-name>
-
验证是否已除去 pod 或部署。
oc get pods
oc get deployments
-
-
删除 PVC。 由于使用
Retain
回收策略指定了所有 IBM提供的本地块存储类,因此在删除应用程序或部署时不会自动删除 PV 和 PVC。oc delete pvc <pvc-name>
-
确认您的 PVC 已移除。
oc get pvc
-
列出 PV 并记下要除去的 PV 的名称。
oc get pv
-
删除 PV。 删除 PV 将使磁盘可用于其他工作负载。
oc delete pv <pv-name>
-
验证您的 PV 是否已移除。
oc get pv
参数参考
1.0.0 参数参考
显示名称 | CLI 选项 | Type | 描述 | 必需? | 缺省值 |
---|---|---|---|---|---|
安装文件存储器驱动程序 | install-local-storage-file |
配置 | 设为 true 则安装文件存储驱动程序。 |
是 | true |
文件存储器的自动卷发现 | auto-discover-devices-file |
配置 | 如果要自动发现并使用工作节点上的卷来存储文件,请设置为 true 。 |
是 | false |
文件存储器工作程序节点标签键 | file-nodes-label-key |
配置 | 要用于文件存储的工作节点 key=value 标签的 key 。 |
否 | 不适用 |
文件存储器工作程序节点标签值 | file-nodes-label-value |
配置 | 要用于文件存储的工作节点 key=value 标签的 value 。 |
否 | 不适用 |
文件存储器的设备路径 | file-devicepath |
配置 | 要用于文件存储器的工作程序节点上的存储设备的路径。 Example: /dev/sdc . 当 auto-discover-devices-file 设置为 false 时,需要使用该选项。 |
否 | 不适用 |
文件系统类型 | fstype |
配置 | 文件系统类型。 指定 ext3 、ext4 或 xfs 。 |
是 | ext4 |
安装块存储器驱动程序 | install-local-storage-block |
配置 | 设为 true 则安装块存储驱动程序。 |
是 | true |
块存储器的自动卷发现 | auto-discover-devices-block |
配置 | 如果要自动发现并使用工作节点上的卷作为块存储,则设置为 true 。 |
是 | false |
块存储器工作程序节点标签键 | block-nodes-label-key |
配置 | 要用于块存储的工作节点 key=value 标签的 key 。 |
否 | 不适用 |
块存储器工作程序节点标签值 | block-nodes-label-value |
配置 | 要用于块存储的工作节点 key=value 标签的 value 。 |
否 | 不适用 |
本地存储块的设备路径 | block-devicepath |
配置 | 要用于块存储器的工作程序节点上的存储设备的路径。 Example: /dev/sdc . 当 auto-discover-devices-block 设置为 false 时,需要使用该选项。 |
否 | 不适用 |