设置 Block Storage for VPC
Block Storage for VPC 为您的虚拟服务器实例提供基于虚拟机监控程序挂载的高性能数据存储,您可在虚拟私有云(VPC)内进行配置。
您可以在具有不同 GB 大小和 IOPS 的预定义存储层之间进行选择,以满足工作负载的需求。 要了解 Block Storage for VPC 是否为适合您的存储选项,请参阅选择存储解决方案。 有关定价信息,请参阅 Block Storage for VPC的定价。
- VPC 群集默认启用Block Storage for VPC群集插件。
- 若禁用该 Block Storage for VPC 附加组件,它将保持禁用状态,直至您再次启用它。 当您刷新或更新集群主节点时,此功能不会被启用。
IBM Cloud Block Storage for VPC
在本快速入门指南中,您将通过创建一个持久卷控制量(PVC)来动态分配卷,从而在集群中创建一个 5IOPS10Gi 分层 Block Storage for VPC 卷。 然后,创建用于安装 PVC 的应用程序部署。
现在,您可以选择 第二代存储类别。
只要这些 Pod 被调度到同一节点上,您的 Block Storage for VPC 卷就可以被多个 Pod 挂载。
-
为 PVC 创建文件并将其命名为
pvc.yaml。 可选择 第一代和第二代 存储类。使用
ibmc-vpc-block-5iops-tier存储类的第一代示例:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: ibmc-vpc-block-5iops-tier accessModes: - ReadWriteOnce resources: requests: storage: 10Gi使用
ibmc-vpc-block-sdp存储类的第二代示例:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: ibmc-vpc-block-sdp accessModes: - ReadWriteOnce resources: requests: storage: 10Gi -
在集群中创建 PVC。
oc apply -f pvc.yaml -
绑定 PVC 后,创建使用 PVC 的应用程序部署。 为部署创建文件,并将其命名为
deployment.yaml。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: ngnix # Your containerized app image. name: my-container volumeMounts: - name: my-volume mountPath: /mount-path volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc -
在集群中创建部署。
oc apply -f deployment.yaml
有关更多信息,请参阅以下链接。
向应用程序添加 Block Storage for VPC
选择 Block Storage for VPC 概要文件,并创建持久卷声明,以便为集群动态供应 Block Storage for VPC。 动态供应将自动创建匹配的持久卷,并在 IBM Cloud 帐户中订购物理存储设备。
-
决定能最好地满足您所需的容量和性能需求的 Block Storage for VPC 概要文件。
-
为 Block Storage for VPC 概要文件选择相应的存储类。
缺省情况下,所有 IBM 预定义的存储类都会为 Block Storage for VPC 设置
ext4文件系统。 如果要使用其他文件系统(例如,xfs或ext3),请创建定制存储类。- 10 IOPS/GB:
ibmc-vpc-block-10iops-tier或ibmc-vpc-block-retain-10iops-tier - 5 IOPS/GB:
ibmc-vpc-block-5iops-tier或ibmc-vpc-block-retain-5iops-tier - 3 IOPS/GB:
ibmc-vpc-block-general-purpose或ibmc-vpc-block-retain-general-purpose - 定制:
ibmc-vpc-block-custom或ibmc-vpc-block-retain-custom
- 10 IOPS/GB:
-
决定 Block Storage for VPC 配置。
- 选择存储器的大小。 确保您选择的 Block Storage for VPC 概要文件支持该大小。
- 选择在删除集群或持久卷声明 (PVC) 后是否要保留数据。
- 如果要保留数据,请选择
retain存储类。 删除 PVC 时,仅会删除 PVC。 持久卷 (PV)、IBM Cloud 帐户中的物理存储设备以及数据仍会存在。 要回收存储器并再次在集群中使用,必须除去 PV,并执行使用现有 Block Storage for VPC 的步骤。 - 如果要在删除 PVC 时删除 PV、数据和物理 Block Storage for VPC,请选择不带
retain的存储类。
- 如果要保留数据,请选择
-
创建配置文件以定义持久卷声明,并将配置保存为 YAML 文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc_name> # Enter a name for your PVC. spec: accessModes: - <access-mode> # ReadWriteOnce or ReadWriteOncePod resources: requests: storage: 10Gi # Enter the size. Make sure that the size is supported in the profile that you chose. storageClassName: <storage_class> # Enter the storage class name that you selected earlier. -
在集群中创建 PVC。
oc apply -f pvc.yaml -
验证 PVC 是否已创建并与 PV 绑定。 此过程可能需要几分钟时间。
oc describe pvc <pvc_name>示例输出
Name: mypvv Namespace: default StorageClass: ibmc-vpc-block-5iops-tier Status: Bound Volume: Labels: <none> Annotations: oc.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"csi-block-pvc-good","namespace":"default"},"spec":{... volume.beta.kubernetes.io/storage-provisioner: vpc.block.csi.ibm.io Finalizers: [kubernetes.io/pvc-protection] Capacity: 10Gi Access Modes: VolumeMode: Filesystem Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ExternalProvisioning 9s (x3 over 18s) persistentvolume-controller waiting for a volume to be created, either by external provisioner "vpc.block.csi.ibm.io" or manually created by system administrator Mounted By: <none> -
为应用程序创建部署配置文件,并将 PVC 安装到应用程序。
apiVersion: apps/v1 kind: Deployment metadata: name: <deployment_name> labels: app: <deployment_label> spec: selector: matchLabels: app: <app_name> template: metadata: labels: app: <app_name> spec: containers: - image: <image_name> name: <container_name> volumeMounts: - name: <volume_name> mountPath: /<file_path> volumes: - name: <volume_name> persistentVolumeClaim: claimName: <pvc_name>labels.app- 在元数据部分中,输入部署的标签。
matchLabels.app和labels.app- 在规范选择器和模板元数据部分中,输入应用程序的标签。
image- 指定要使用的容器镜像名称。 要列出 IBM Cloud Container Registry 帐户中的可用映像,请运行
ibmcloud cr image-list。 name- 指定要在 pod 中部署的容器的名称。
mountPath- 在容器卷安装部分中,指定在容器中安装 PVC 的目录的绝对路径。
name- 在“容器卷安装”部分中,输入要安装到 pod 的卷的名称。 可以输入所需的任何名称。
name- 在“卷”部分中,输入要安装到 pod 的卷的名称。 通常这个名称与
volumeMounts.name.相同。 claimName- 在卷持久卷声明部分中,输入先前创建的 PVC 的名称。
-
在集群中创建部署。
oc apply -f deployment.yaml -
验证 PVC 是否已成功安装到应用程序。 pod 可能需要几分钟时间才能进入 Running 状态。
在部署应用程序期间,您可能会在 CLI 输出的
Unable to mount volumesEvents** 部分中看到间歇性的 ** 错误。 集群 Block Storage for VPC 附加组件会自动重试将存储挂载到您的应用程序。 请多等待几分钟,以便存储器安装到应用程序。oc describe deployment <deployment_name>示例输出
... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: mypvc ReadOnly: false
使用现有 Block Storage for VPC 实例
若您已有现成的 Block Storage for VPC 物理设备需要在集群中使用,可手动创建物理卷(PV)和卷控制项(PVC)来静态配置存储资源。
只能将卷连接到一个工作程序节点。 请确保卷与工作程序节点位于同一专区中,以便连接成功。
-
确定要连接到 VPC 集群中工作程序节点的卷。 请注意音量ID。
ibmcloud is volumes -
列出卷的详细信息。 请注意 大小,区域和 IOPS。 这些值用于创建 PV。
ibmcloud is volume <volume_id> -
检索 VPC 集群中工作程序节点的列表。 请注意与存储卷位于同一专区中的工作程序节点的 专区。
ibmcloud oc worker ls -c <cluster_name> -
可选:如果已使用
retain存储类供应了物理 Block Storage for VPC 实例,那么在除去 PVC 时不会除去 PV 和物理存储器。 要在集群中使用物理 Block Storage for VPC 设备,必须先除去现有 PV。-
列出集群中的 PV,并查找属于 Block Storage for VPC 设备的 PV。 该 PV 处于
released状态。oc get pv -
除去该 PV。
oc delete pv <pv_name>
-
-
为 PV 创建配置文件。 包含您之前检索到的ID、大小、区域和 IOPS。
apiVersion: v1 kind: PersistentVolume metadata: name: <pv_name> # Example: my-persistent-volume spec: accessModes: - ReadWriteOnce capacity: storage: <vpc_block_storage_size> # Example: 20Gi csi: driver: vpc.block.csi.ibm.io fsType: ext4 volumeAttributes: iops: "<vpc_block_storage_iops>" # Example: "3000" volumeId: <vpc_block_storage_ID> # Example: a1a11a1a-a111-1111-1a11-1111a11a1a11 zone: "<vpc_block_zone>" # Example: "eu-de-3" region: "<vpc_block_region>" volumeHandle: <vpc_block_storage_ID> nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: failure-domain.beta.kubernetes.io/zone operator: In values: - <worker_node_zone> # Example: eu-de-3 - key: failure-domain.beta.kubernetes.io/region operator: In values: - <worker_node_region> # Example: eu-de - key: kubernetes.io/hostname operator: In values: - <worker_node_primary_IP> persistentVolumeReclaimPolicy: Retain storageClassName: "" volumeMode: Filesystemname- 在元数据部分中,输入 PV 的名称。
storage- 在“规范容量”部分中,输入先前检索的 Block Storage for VPC 卷的大小 (以千兆字节 (Gi) 为单位)。 例如,如果您的设备容量为100 GB,请输入
100Gi. iops- 在 spec CSI 卷属性部分中,输入先前检索的 Block Storage for VPC 卷的最大 IOPS。
zone- 在“规范 CSI 卷属性”部分中,输入与先前检索的位置匹配的 VPC 块区域。 例如,如果您的位置是
Washington DC-1,则使用us-east-1作为您的区域。 要列出可用区域,请运行ibmcloud is zones. 要查找可用 VPC 专区和位置的概述,请参阅在其他区域中创建 VPC。 指定 "zone" 时,请提及 "region" 参数。 region- 要在其中连接存储器的工作程序节点的区域。
worker_node_primary_IP- 要在其中连接存储器的工作程序节点的主 IP。 您可以通过运行
ibmcloud oc worker ls来查找工作程序节点的主 IP。 volumeId和spec.csi.volumeHandle- 在 spec CSI 卷属性部分中,输入先前检索的 Block Storage for VPC 卷的标识。
storageClassName- 对于规格存储类名称,请输入空字符串。
matchExpressions- 在规范节点亲缘关系部分中,输入节点选择器术语以与区域匹配。 对于密钥,请输入
failure-domain.beta.kubernetes.io/zone。 对于该值,输入要在其中附加存储器的工作程序节点的区域。 matchExpressions- 在规范节点亲缘关系部分中,输入节点选择器术语以与区域匹配。 对于密钥,请输入
failure-domain.beta.kubernetes.io/region。 对于该值,请输入要在其中附加存储器的工作程序节点的区域。
-
在集群中创建 PV。
oc apply -f pv.yaml -
验证是否已在集群中创建 PV。
oc get pv -
为 PVC 创建另一个配置文件。 为了使 PVC 与先前创建的 PV 相匹配,必须为存储器大小和访问方式选择相同的值。 在存储类字段中,输入空字符串以与 PV 相匹配。 如果这些字段中的任何一个与 PV 不匹配,则会通过动态配置自动创建新的 PV 和实例 Block Storage for VPC。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc_name> spec: accessModes: - ReadWriteOnce resources: requests: storage: <vpc_block_storage_size> storageClassName: "" -
创建 PVC。
oc apply -f pvc.yaml -
验证 PVC 是否已创建并与先前创建的 PV 绑定。 此过程可能需要几分钟时间。
oc describe pvc <pvc_name>
- 创建使用 PVC 的部署或 pod。
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deployment_name>
labels:
app: <deployment_label>
spec:
selector:
matchLabels:
app: <app_name>
template:
metadata:
labels:
app: <app_name>
spec:
containers:
- image: <image_name>
name: <container_name>
volumeMounts:
- name: <volume_name>
mountPath: /<file_path>
volumes:
- name: <volume_name>
persistentVolumeClaim:
claimName: <pvc_name>
nodeSelector:
kubernetes.io/hostname: "<worker_node_primary_IP>"
更新 Block Storage for VPC 集群附加组件
您可以使用命令 addon update 更新集群 Block Storage for VPC 附加组件。
在更新附加组件之前,请查看 更改日志。
在从以前的版本更新到“5.x 版本之前,必须没有处于”failure 状态的卷快照。 有关更多信息,请参阅《 为什么我无法删除 Block Storage for VPC 我的卷快照资源? 》。
-
检查更新是否可用。 如果更新可用,那么会使用星号标记插件版本,并显示最新版本。 请注意最新版本,因为稍后将使用此值。
ibmcloud oc cluster addons --cluster <cluster_name_or_ID>示例输出
Name Version Health State Health Status vpc-block-csi-driver 1.0.0* (2.0.0 latest) normal Addon Ready -
更新附加组件。 请注意,根据您安装的版本,更新命令有所不同。
5.0 和更高版本 运行
addon update命令。ibmcloud oc cluster addon update vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y]版本 5.0 之前的所有版本 禁用并启用附加组件。
ibmcloud oc cluster addon disable vpc-block-csi-driver --cluster CLUSTER [-f] [-q]ibmcloud oc cluster addon enable vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y] -
验证附加组件是否处于
Addon Ready状态。 附加组件可能需要几分钟才能就绪。ibmcloud oc cluster addon ls --cluster <cluster_name_or_ID>示例输出
Name Version Health State Health Status vpc-block-csi-driver 2.0.0 normal Addon Ready若您使用的默认存储类与
ibmc-vpc-block-10iops-tier存储类不同,则必须在addon-vpc-block-csi-driver-configmapConfigMap 中更改默认存储类设置。 有关更多信息,请参阅 更改缺省存储类。 -
如果您根据缺省 Block Storage for VPC 存储类创建了自己的存储类,那么必须重新创建这些存储类以更新参数。 有关更多信息,请参阅 在更新到 V 4.2后重新创建您自己的存储类。
在更新到 V 4.2 之后重新创建您自己的存储类
从版本 4.2 起,存储类的默认参数已发生变更。 不再使用 sizeRange 或 iopsRange 参数。 如果您创建了任何使用这些参数的自己的存储类,那么必须编辑自己的存储类以除去这些参数。 要更改您自己的存储类中的参数,必须删除并重新创建这些参数。 先前,每个存储类都提供了 sizeRange 和 iopsRange 作为参考信息。 从版本 4.2 开始,这些引用已被移除。
现在,有关块存储器概要文件,大小和 IOP 的信息,请参阅 块存储器概要文件 参考。
-
要查找您自己的存储类的详细信息,请运行以下命令。
oc describe sc STORAGECLASS -
如果存储类使用
sizeRange或iopsRange,请获取存储类 YAML 并将其保存到文件中。oc get sc STORAGECLASS -o yaml -
在从先前命令的输出保存的文件中,除去
sizeRange或iopsRange参数。 -
从集群中删除存储类。
oc delete sc STORAGECLASS -
使用先前创建的文件在集群中重新创建存储类。
oc apply -f custom-storage-class.yaml
为 Block Storage for VPC 设置加密
使用密钥管理服务(KMS)提供商( IBM® Key Protect 例如)创建私有根密钥,该密钥用于在 Block Storage for VPC 实例中将数据写入存储时进行加密。 创建私有根密钥后,请使用该根密钥创建您自己的存储类或 Kubernetes 密钥,然后使用此存储类或密钥为您的 Block Storage for VPC 实例进行配置。
启用加密功能 Block Storage for VPC 将导致性能下降约20%。 但是,确切的影响取决于工作程序节点和存储卷配置。 在启用加密时,请考虑允许对性能产生影响。
-
创建要使用的 KMS 提供程序的实例。
-
在您的 KMS 实例中创建一个根密钥。
- Key Protect 根密钥。
- Hyper Protect Crypto Services 根密钥。 缺省情况下,会创建没有到期日期的根密钥。
-
设置服务对服务授权。 授权 Block Storage for VPC 访问 IBM® Key Protect。 确保让 Block Storage for VPC 至少有
Reader访问 KMS 实例的权限。 -
确定要在定制存储类中还是在 Kubernetes 私钥中存储 Key Protect 根密钥 CRN。 然后,执行以下步骤来创建定制存储类或 Kubernetes 私钥。
示例定制存储类。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage_class_name> # Enter a name for your storage class. provisioner: vpc.block.csi.ibm.io parameters: profile: "5iops-tier" csi.storage.k8s.io/fstype: "ext4" billingType: "hourly" encrypted: "true" encryptionKey: "<encryption_key>" resourceGroup: "" zone: "" tags: "" generation: "gc" classVersion: "1" reclaimPolicy: "Delete"encrypted- 在参数中,输入
true以创建用于为 Block Storage for VPC 卷设置加密的存储类。 若将此选项设置为true,则必须提供要在 中使用的服务 Key Protect 实例的parameters.encryptionKey根密钥 CRN。 encryptionKey- 在参数中,输入您之前检索到的根密钥CRN。
示例 Kubernetes 秘密。
apiVersion: v1 kind: Secret type: vpc.block.csi.ibm.io metadata: name: <secret_name> namespace: <namespace_name> stringData: encrypted: <true_or_false> data encryptionKey: <encryption_key>name- 输入私钥的名称。
namespace- 输入要在其中创建私钥的名称空间。
encrypted- 在参数中,输入
true以设置 Block Storage for VPC 卷的加密。 encryptionKey- 在这些参数中,输入要用于加密 Block Storage for VPC 卷的 Key Protect 服务实例的根密钥 CRN。 要在密钥中使用您的根密钥CRN,您必须先通过运行命令将其
echo -n "<root_key_CRN>" | base64转换 base64 为。
-
请按照 《 Block Storage for VPC 为应用添加存储 》中的步骤4至9,创建一个使用自定义存储类进行配置的PVC,Block Storage for VPC 该存储类需配置为使用您的 Key Protect 根密钥进行加密。 然后,将此存储器安装到应用程序 pod。
应用程序可能需要几分钟时间来安装存储器,然后才能进入 Running 状态。
-
验证数据是否已加密。 列出您的 Block Storage for VPC 卷,并记录您创建的实例的 ID。 存储实例 Name 等于创建 PVC 时自动创建的 PV 的名称。
ibmcloud is vols示例输出
ID Name Status Capacity IOPS Profile Attachment type Created Zone Resource group a395b603-74bf-4703-8fcb-b68e0b4d6960 pvc-479d590f-ca72-4df2-a30a-0941fceeca42 available 10 3000 5iops-tier data 2019-08-17T12:29:18-05:00 us-south-1 a8a12accd63b437bbd6d58fb6a462ca7 -
使用卷标识符,列出实例 Block Storage for VPC 的详细信息,以确保根 Key Protect 密钥存储在存储实例中。 可以在 CLI 输出的 Encryption key 字段中找到根密钥。
ibmcloud is vol <volume_ID>示例输出
ID a395b603-74bf-4703-8fcb-b68e0b4d6960 Name pvc-479d590f-ca72-4df2-a30a-0941fceeca42 Status available Capacity 10 IOPS 3000 Profile 5iops-tier Encryption key crn:v1:bluemix:public:kms:us-south:a/6ef045fd2b43266cfe8e6388dd2ec098:53369322-958b-421c-911a-c9ae8d5156d1:key:47a985d1-5f5e-4477-93fc-12ce9bae343f Encryption user_managed Resource group a8a12accd63b437bbd6d58fb6a462ca7 Created 2019-08-17T12:29:18-05:00 Zone us-south-1 Volume Attachment Instance Reference
定制缺省存储器设置
您可以通过自定义存储类或使用自定义设置创建 Block Storage for VPCKubernetes 的密钥来更改某些默认PVC设置。
- 使用密钥并通过自定义存储类指定参数有何益处?
- 作为集群管理员,当您希望所有集群用户创建的持久化卷控制(PVC)都采用特定配置进行分配,且不允许用户覆盖默认配置时,请创建自定义存储类。
- 但是,当需要多个配置并且您不希望为每个可能的 PVC 配置创建定制存储类时,可以使用缺省 PVC 设置以及对通用 Kubernetes 私钥的引用来创建一个定制存储类。 如果集群用户必须覆盖定制存储类的缺省设置,那么他们可以通过创建保存自己的定制设置的 Kubernetes 私钥来实现这一点。
当您需要为 Block Storage for VPC 实例配置加密时,若希望将 Key Protect 根密钥CRN编码为密钥,也可使用 Kubernetes 密钥,base64 而非直接在自定义存储类中提供密钥。
更改缺省存储类
从版本开始,Block Storage for VPC 集群 4.2 附加组件将默认存储类设置为类 ibmc-vpc-block-10iops-tier。 如果您具有除 ibmc-vpc-block-10iops-tier 以外的缺省存储类,并且 PVC 使用缺省存储类,那么这可能会导致多个缺省存储类,从而导致 PVC 创建失败。 要使用除 ibmc-vpc-block-10iops-tier 以外的缺省存储类,可以更新
addon-vpc-block-csi-driver-configmap 以将 IsStorageClassDefault 更改为 false。
Block Storage for VPC 集群附加组件的缺省存储类是 ibmc-vpc-block-10iops-tier 存储类。
-
编辑
addon-vpc-block-csi-driver-configmapoc edit cm addon-vpc-block-csi-driver-configmap -n kube-system -
将
IsStorageClassDefault设置更改为false。 -
保存并退出。
-
等待 15 分钟,并通过获取
ibmc-vpc-block-10iops-tier存储类的详细信息来验证更改。oc get sc ibmc-vpc-block-10iops-tier -o yaml
创建您自己的存储类
创建您自己的自定义存储类,并为您的 Block Storage for VPC 实例设置首选参数。 通过使用 SDP 配置文件,可以指定容量和最大吞吐量限制。
SSD定义的性能配置文件(SDP)已在达拉斯、法兰克福、伦敦、马德里、大阪、圣保罗、悉尼、东京、多伦多和华盛顿提供。D.C 为SSD定义的性能配置文件提供快照创建功能,服务覆盖达拉斯、D.C 法兰克福、东京和华盛顿。
如果要执行以下操作,您可以创建自己的存储类:
- 设置定制 IOPs 值。
- 使用非
ext4的文件系统类型设置 Block Storage for VPC。 - 设置加密。
- 设置固态硬盘定义的性能。
准备工作
-
查看 存储类参考 以确定要用于存储类的
profile。 -
如果您想为 Block Storage for VPC 指定自定义 IOP,也可以查看自定义 配置文件。
-
如果要使用固态硬盘定义的性能 (SDP) 配置文件,请 查看容量范围和 IOPs 详情。 请注意,使用固态硬盘定义性能时,卷的容量由您指定的 IOP 和吞吐量决定。
-
您可以使用现有的存储类作为创建自己存储类的起点。 使用
oc get sc <storageclass> -o yaml命令保存现有存储类的详细信息。 -
为降低成本,您可以使用
ibmc-vpc-block-sdp存储类别(最低 3000 IOPS 和 1000 吞吐量 (Mbps)),以低容量、最低 IOPS 和最低吞吐量配置 PVC。 配置完成后,您可以访问 PVC,并根据需要调整 IOPS 和 吞吐量。
创建自定义存储类
-
按以下格式创建自定义存储类配置文件。 可选择 第一代和第二代 存储类。
第一代的例子:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage_class_name> provisioner: vpc.block.csi.ibm.io parameters: profile: "<profile>" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom csi.storage.k8s.io/fstype: "<file_system_type>" # xfs, ext3, or ext4 billingType: "hourly" encrypted: "<encrypted_true_false>" encryptionKey: "<encryption_key>" resourceGroup: "" zone: "<zone>" region: "<region>" tags: "<tags>" generation: "gc" throughput: "<throughput>" # Example: 2000 classVersion: "1" iops: "<iops>" # Only specify this parameter if you are using a "custom" profile. allowVolumeExpansion: (true|false) # Select true or false. Only supported on version 3.0.1 and later volumeBindingMode: <volume_binding_mode> # csi.storage.k8s.io/provisioner-secret-name: # Uncomment and add secret parameters to enforce encryption. # csi.storage.k8s.io/provisioner-secret-namespace: reclaimPolicy: "<reclaim_policy>"name- 输入存储类的名称。
profile- 输入您在上一步中选择的配置文件。 选择
general-purpose,sdp,5iops-tier,10iops-tier,或自定义使用自定义 IOPs 值。 要查找特定配置文件支持的存储容量,请参阅 分层IOPS配置文件。 使用此存储类的任何 PVC 都必须指定此范围内的大小值。 csi.storage.k8s.io/fstype- 在参数中,输入您 Block Storage for VPC 实例的文件系统。 选择
xfs、ext3或ext4。 如果要修改卷的所有权或权限,必须在自己的存储类中指定csi.storage.k8s.io/fstype,PVC 必须以ReadWriteOnce作为accessMode。 Block Storage for VPC 驱动程序使用ReadWriteOnceWithFSTypefsGroupPolicy. 更多信息,请参阅 CSI 驱动程序文档。 encrypted- 在参数中,输入
true以创建用于为 Block Storage for VPC 卷设置加密的存储类。 若将此选项设置为true,则必须提供要在 中使用的服务 Key Protect 实例的parameterencryptionKey根密钥 CRN。 有关加密数据的更多信息,请参阅为 Block Storage for VPC 设置加密。 encryptionKey- 若您输入的是
true``parameters.encrypted,请输入您要用于加密 Key Protect 卷 Block Storage for VPC 的服务实例的根密钥CRN。 有关加密数据的更多信息,请参阅为 Block Storage for VPC 设置加密。 zone- 在参数中,输入要在其中创建 Block Storage for VPC 实例的 VPC 区域。 确保使用的是工作程序节点连接到的专区。 要列出工作节点使用的VPC区域,请运行
ibmcloud oc cluster get --cluster <cluster_name_or_ID>命令,并在命令行输出中查看" Worker Zones "字段。 若未指定区域,系统将自动为您的 Block Storage for VPC 实例选择其中一个工作节点区域。 region- 要在其中连接存储器的工作程序节点的区域。
tags- 在参数中,输入要应用于 Block Storage for VPC 实例的以空格分隔的标记列表。 标记可帮助您更轻松地找到实例,或者根据常见特征(例如,应用程序或它所用于的环境)对实例分组。
iops- 如果
profile输入的是custom或sdp,请输入您希望 Block Storage for VPC 使用的 IOP 值。 请参阅 Block Storage for VPC 自定义 IOPs 配置文件 表,查看按卷大小划分的支持 IOPs 范围列表。 throughput- 如果使用
sdp配置文件,请输入该值。 更多信息,请参阅 SDP 配置文件的 IOP 和吞吐量详情 reclaimPolicy- 输入存储类的回收策略。 如果要在除去 PVC 时保留 PV、物理存储设备和数据,请输入
Retain。 如果要在除去 PVC 时删除 PV、物理存储设备和数据,请输入Delete。 allowVolumeExpansion- 输入存储类的卷扩展策略。 若要允许体积膨胀,请输入
true. 若不允许体积膨胀,请输入false. volumeBindingMode- 选择是否要延迟 Block Storage for VPC 实例创建,直到使用此存储器的第一个 pod 准备就绪可安排为止。 要延迟创建,请输入
WaitForFirstConsumer。 要在创建 PVC 时创建实例,请输入Immediate。
第二代的例子:
如果使用第一代
ibmc-vpc-block-5iops-tier存储类配置 9.6TB PVC,最大 IOPS 为 48,000,最大吞吐量为 6144 Mbps。 不过,在第二代ibmc-vpc-block-sdp-max-bandwidth存储类别中,最大 IOPS 为 64000,最大吞吐量为 8192 Mbps。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-block-sdp-max-bandwidth provisioner: vpc.block.csi.ibm.io parameters: profile: "sdp" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom csi.storage.k8s.io/fstype: "ext4" # xfs, ext3, or ext4 billingType: "hourly" encrypted: "false" encryptionKey: "" resourceGroup: "" zone: "us-east" region: "tor01" tags: "tag" generation: "gc" throughput: "8192" # Example: 2000 classVersion: "1" iops: "64000" # Only specify this parameter if you are using a "custom" profile. allowVolumeExpansion: true # Select true or false. Only supported on version 3.0.1 and later volumeBindingMode: Immediate reclaimPolicy: "Delete" -
在集群中创建定制存储类。
oc apply -f custom-storageclass.yaml -
验证存储类是否在集群中可用。
oc get sc示例输出
NAME PROVISIONER AGE <custom-storageclass> vpc.block.csi.ibm.io 4m26s -
执行向应用程序添加 Block Storage for VPC 中的步骤来使用定制存储类创建 PVC,以供应 Block Storage for VPC。 然后,将此存储器安装到样本应用程序。
验证 Block Storage for VPC 文件系统
您可以创建定制存储类,以供应使用其他文件系统(例如,xfs 或 ext3)的 Block Storage for VPC。 缺省情况下,会为所有 Block Storage for VPC 实例供应 ext4 文件系统。
-
执行步骤以使用要利用的文件系统来创建定制存储类。
-
请按照 《 Block Storage for VPC 为应用程序添加存储 》中的步骤4至9,创建一个使用自定义存储类的PVC,以通过不同的文件系统进行 Block Storage for VPC 配置。 然后,将此存储器安装到应用程序 pod。
应用程序可能需要几分钟时间来安装存储器,然后才能进入 Running 状态。
-
验证存储器是否已安装有正确的文件系统。 列出集群中的 pod,并记下用于安装存储器的 pod 的 Name。
oc get pods -
登录到 pod。
oc exec <pod_name> -it bash -
列出 pod 中的安装路径。
mount | grep /dev/xvdg示例输出:
xfs/dev/xvdg on /test type xfs (rw,relatime,attr2,inode64,noquota) -
退出 pod。
exit
更新 VolumeAttachLimit
在 Block Storage for VPC 集群附加组件的版本 5.2 和更高版本中,您可以通过编辑 configmap 来编辑可附加到每个节点的最大卷数。 默认值为 12.
必须核准您的帐户才能使用此功能。
-
编辑配置映射。 将
VALUE替换为要设置的卷连接限制。kubectl patch configmap/addon-vpc-block-csi-driver-configmap \ -n kube-system \ --type merge \ -p '{"data":{"VolumeAttachmentLimit":"VALUE"}}' -
等待
kube-system名称空间中的ibm-vpc-block-csi-nodepod 重新启动。 验证 pod 是否已重新启动。kubectl get pods -n kube-system -w| grep block-csi -
现在,您可以通过使用动态供应或手动创建附件将卷附加到工作程序节点。 有关更多信息,请参阅 将 Block Storage for VPC 添加到应用程序 或 使用现有 Block Storage for VPC 实例。
在 Kubernetes 私钥中存储定制 PVC 设置
在 Kubernetes 私钥中指定 PVC 设置,并在定制存储类中引用此私钥。 然后,使用定制存储类通过在私钥中设置的定制参数来创建 PVC。
- 我有哪些选项可以使用这个 Kubernetes 秘密?
- 作为集群管理员,您可以选择是否要允许每个集群用户覆盖存储类的缺省设置,或者是否要创建集群中每个用户都必须使用的私钥并对 Key Protect 根密钥 CRN 强制实施 Base64 编码。
- 每个用户都可以定制缺省设置
- 在此场景中,集群管理员创建了一个自定义存储类,该存储类采用默认的PVC设置,并引用了一个通用 Kubernetes 密钥。 集群用户可以通过创建包含所需PVC Kubernetes 设置的密钥,覆盖存储类的默认设置。 要使密钥中的自定义设置应用到 Block Storage for VPC 实例,必须创建一个与 Kubernetes 密钥同名的持久化卷控制对象(PVC)。
- 对 Key Protect 根密钥实施 base64 编码
- 在此场景中,您创建一个自定义存储类,该存储类采用默认的PVC设置,并引用一个静态 Kubernetes 密钥,该密钥用于覆盖或增强自定义存储类的默认设置。 集群用户无法通过创建自己的 Kubernetes 密钥来覆盖默认设置。 集群用户必须改为使用在定制存储类和私钥中选择的配置来供应 Block Storage for VPC。 相较于仅创建 自定义存储类,此方法的优势在于:当您需要加密实例 Block Storage for VPC 中的数据时,可强制对服务 Key Protect 实例的根密钥CRN进行编码 base64 处理。
- 在开始使用PVC设置的秘诀 Kubernetes 之前,我需要注意哪些事项?
- 某些 PVC 设置(如
reclaimPolicy`fstype`、或volumeBindingMode)无法在 `` Kubernetes 密钥中配置,必须在存储类中设置。 作为集群管理员,如果要允许集群用户覆盖缺省设置,那么必须确保设置足够的定制存储类来引用通用 Kubernetes 私钥,以便用户可以使用不同的reclaimPolicy、fstype和volumeBindingMode设置来供应 Block Storage for VPC。
允许每个用户定制缺省 PVC 设置
-
以集群管理员身份,执行创建定制存储类的步骤。 在自定义存储类 YAML 文件中,请在 部分
metadata.parameters中按以下方式引用 密钥 Kubernetes: 确保按原样添加代码,而不更改变量名称。csi.storage.k8s.io/provisioner-secret-name: ${pvc.name} csi.storage.k8s.io/provisioner-secret-namespace: ${pvc.namespace} -
以集群用户身份,创建 Kubernetes 私钥,用于定制存储类的缺省设置。
apiVersion: v1 kind: Secret type: vpc.block.csi.ibm.io metadata: name: <secret_name> namespace: <namespace_name> stringData: iops: "<IOPS_value>" zone: "<zone>" tags: "<tags>" encrypted: <true_or_false> resourceGroup: "<resource_group>" data encryptionKey: <encryption_key>name- 输入 Kubernetes 私钥的名称。
namespace- 输入要在其中创建私钥的名称空间。 要在 PVC 中引用私钥,必须在私钥所在的名称空间中创建 PVC。
iops- 在字符串数据部分中,输入要允许用于 Block Storage for VPC 实例的 IOPS 范围。 输入的范围必须与计划使用的 Block Storage for VPC 层相匹配。
zone- 在字符串数据部分中,输入要在其中创建 Block Storage for VPC 实例的 VPC 区域。 确保使用的是工作程序节点连接到的专区。 要列出工作节点使用的VPC区域,请运行
ibmcloud oc cluster get --cluster <cluster_name_or_ID>命令,并在命令行输出中查看" Worker Zones "字段。 若未指定区域,系统将自动为您的 Block Storage for VPC 实例选择其中一个工作节点区域。 tags- 在字符串数据部分中,输入创建 PVC 时要使用的标记的逗号分隔列表。 标签可帮助您在存储实例创建后进行查找。
resourceGroup- 在字符串数据部分,输入您希望 Block Storage for VPC 实例访问的资源组 ID。 若未指定资源组,实例将自动获得访问集群所属资源组中资源的权限。
encrypted- 在字符串数据部分中,输入
true以创建用于为 Block Storage for VPC 卷设置加密的私钥。 若将此选项设置为true,则必须提供要在 中使用的服务 Key Protect 实例的parameters.encryptionKey根密钥 CRN。 有关加密数据的更多信息,请参阅 设置加密功能Block Storage for VPC。 encryptionKey- 在数据部分,若您为 字段
true输入parameters.encrypted了,则请输入您要用于加密 Key Protect 卷 Block Storage for VPC 的服务实例的根密钥 CRN。 要在密钥中使用您的根密钥CRN,您必须先通过运行命令将其echo -n "<root_key_CRN>" | base64转换 base64 为。 有关加密数据的更多信息,请参阅为 Block Storage for VPC 设置加密。
-
创建 Kubernetes 私钥。
oc apply -f secret.yaml -
执行向应用程序添加 Block Storage for VPC 中的步骤来使用定制设置创建 PVC。 确保使用集群管理员创建的定制存储类来创建 PVC,并将用于私钥的名称用于 PVC。 对私钥和 PVC 使用相同的名称会触发存储器提供者在 PVC 中应用私钥的设置。
对 Key Protect 根密钥 CRN 强制实施 Base64 编码
-
以集群管理员身份,创建 Kubernetes 私钥,其中包含 Key Protect 根密钥 CRN 的 Base64 编码值。 要检索根密钥 CRN,请参阅为 Block Storage for VPC 设置加密。
apiVersion: v1 kind: Secret type: vpc.block.csi.ibm.io metadata: name: <secret_name> namespace: <namespace_name> stringData: encrypted: <true_or_false> resourceGroup: "<resource_group>" data: encryptionKey: <encryption_key>name- 输入 Kubernetes 私钥的名称。
namespace- 输入要在其中创建私钥的名称空间。 要在 PVC 中引用私钥,必须在私钥所在的名称空间中创建 PVC。
encrypted- 在字符串数据部分中,输入
true以创建用于为 Block Storage for VPC 卷设置加密的私钥。 若将此选项设置为true,则必须提供要在 中使用的服务 Key Protect 实例的parameters.encryptionKey根密钥 CRN。 有关加密数据的更多信息,请参阅 设置加密功能Block Storage for VPC。 encryptionKey- 在数据部分,若您输入
true的是parameters.encrypted,则请输入您要用于加密 Key Protect 卷 Block Storage for VPC 的服务实例的根密钥CRN。 要在密文中使用您的根密钥CRN,必须先通过运行.将其转换为echo -n "<root_key_CRN>" | base64base64格式。 有关加密数据的更多信息,请参阅 为 Block Storage for VPC 设置加密。
-
创建 Kubernetes 私钥。
oc apply -f secret.yaml -
执行创建定制存储类的步骤。 在自定义存储类 YAML 文件中,请在 部分
metadata.parameters中按以下方式引用 密钥 Kubernetes: 确保输入先前创建的 Kubernetes 私钥的名称以及在其中创建该私钥的名称空间。csi.storage.k8s.io/provisioner-secret-name: <secret_name> csi.storage.k8s.io/provisioner-secret-namespace: <secret_namespace> -
以集群用户身份,执行向应用程序添加 Block Storage for VPC 中的步骤来通过定制存储类创建 PVC。
设置卷扩展
要供应支持扩展的卷,必须使用将 allowVolumeExpansion 设置为 true 的存储类。
只能扩展由应用程序 pod 安装的卷。
登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
-
如果您未使用 V
4.2或更高版本的附加组件,请 更新集群中的 Block Storage for VPC 集群附加组件。 -
创建 PVC,该 PVC 使用支持卷扩展的存储类。
-
部署使用 PVC 的应用程序。 创建应用程序时,请记下指定的
mountPath。 -
通过应用程序 pod 安装 PVC 后,可以通过编辑 PVC 中
spec.resources.requests.storage字段的值来扩展卷。 要扩展卷,请编辑 PVC 并增大spec.resources.requests.storage字段中的值。oc edit pvc <pvc-name>示例
spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi -
保存并关闭PVC。
-
可选: 验证卷是否已扩展。 获取 PVC 的详细信息,并记录 PV 名称。
oc get pvc <pvc-name> -
描述 PV 并记下卷标识。
oc describe PV -
获取 Block Storage for VPC 卷的详细信息并验证容量。
ibmcloud is vol <volume-ID>
在附加组件版本 4.2 之前手动扩展卷
请执行以下步骤,手动扩展在附加组件 4.2 版本之前创建的现有 Block Storage for VPC 卷。
只能扩展由应用程序 pod 安装的卷。
-
获取应用程序的详细信息,并记录 PVC 名称和
mountPath。oc get pod <pod-name> -n <pod-namespace> -o yaml -
获取 PVC 的详细信息,并记录 PV 名称。
oc get pvc -
描述 PV 并获取
volumeId。oc describe pv `pv-name` | grep volumeId卷标识
r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1的示例输出。volumeId=r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1 -
使用 PATCH 请求调整卷大小。 以下示例将卷大小调整为 250 GiB。
curl -sS -X PATCH -H "Authorization: <iam_token>" "https://<region>.iaas.cloud.ibm.com/v1/volumes/<volumeId>?generation=2&version=2020-06-16" -d '{"capacity":250}'<iam_token>- 您的 IAM 令牌。 要检索您的 IAM 令牌,请运行
ibmcloud iam oauth-tokens. <region>- 集群所在的区域,例如
us-south。 <volumeId>- 先前检索的卷标识。 例如,
r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1。 <capacity>- GiB, 中增加的容量,例如
250。
-
登录您的应用程序 pod。
oc exec <pod-name> -it -- bash -
运行以下命令以使用主机二进制文件。
chroot /host -
获取文件系统详细信息并记录要更新的
Filesystem路径。 您还可以grep用于应用程序 pod 中指定的安装路径。df -h | grep <mount-path>。df -h示例输出
Filesystem Size Used Avail Use% Mounted on overlay 98G 64G 29G 70% / tmpfs 64M 0 64M 0% /dev tmpfs 32G 0 32G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm /dev/vda2 98G 64G 29G 70% /etc/hosts /dev/vdg 9.8G 37M 9.8G 1% /mount-path # Note the Filesystem path that corresponds to the mountPath that you specified in your app. tmpfs 32G 40K 32G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 32G 0 32G 0% /proc/acpi tmpfs 32G 0 32G 0% /proc/scsi tmpfs 32G 0 32G 0% /sys/firmware -
调整文件系统的大小。
sudo resize2fs <filesystem-path>示例命令
sudo resize2fs /dev/vdg -
验证文件系统是否已调整大小。
df -h
备份和复原数据
数据在您所在区域的 Block Storage for VPC 冗余故障域中得到安全保护。 要手动备份数据,请使用 命令 Kubernetesoc cp。
您可以使用 命令oc cp 在集群中的 pod 或特定容器之间复制文件和目录
开始之前: 访问 Red Hat OpenShift 集群。
要备份或复原数据,请从以下选项中进行选择:
将数据从本地机器复制到集群中的一个Pod。
oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
将集群中某个Pod的数据复制到本地机器。
oc cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
将数据从本地机器复制到集群中某个Pod内运行的特定容器中。
oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER
了解卷请求容量
VPC 块 CSI 驱动程序使用以下公式计算卷容量。
-
如果在
Gi中提供了值:rBytes(requestedBytes) = X * 1024^3 -
如果在
G中提供了值:rBytes(requestedBytes) = X * 10^9
请求的值等于 (((rBytes+ GiB - 1) / GiB) * GiB) / GiB。
例如:
- 如果提供了值
20Gi(应用上述公式),那么创建的卷为20GB。 - 如果提供了值
20G,那么创建的卷为19GB。
有时,创建的卷的容量小于所请求的值。 请注意,计费适用于创建的卷,而不是请求的卷。
为块存储分配可信配置文件
由于已知问题,当实施受信任配置文件时,VPC Block Storage 卷上的用户标签更新可能不会显示。 不使用受信任配置文件的群集不存在这个问题。
您可以使用受信任的配置文件授予不同的 IBM Cloud 身份访问您账户中的资源,包括您的存储解决方案。 受信任的配置文件可集中访问控制,无需长期使用 API 密钥,并允许您将权限范围精确到特定任务所需的最小值。 有关详细信息,请参阅 为存储组件配置可信配置文件。