设置 Block Storage for VPC
Block Storage for VPC 为您的虚拟服务器实例提供虚拟机监控程序安装的高性能数据存储,您可以在VPC内进行配置。
您可以在具有不同 GB 大小和 IOPS 的预定义存储层之间进行选择,以满足工作负载的需求。 要了解 Block Storage for VPC 是否为适合您的存储选项,请参阅选择存储解决方案。 有关定价信息,请参阅 Block Storage for VPC的定价。
VPC 群集默认启用Block Storage for VPC群集插件。
IBM Cloud Block Storage for VPC
在此快速入门指南中,通过创建 PVC 以动态供应卷,在集群中创建 10Gi 5IOPS 层 Block Storage for VPC 卷。 然后,创建用于安装 PVC 的应用程序部署。
只要在同一节点上调度 Block Storage for VPC 卷,这些卷可由多个 pod 安装。
-
为 PVC 创建文件并将其命名为
pvc.yaml
。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: ibmc-vpc-block-5iops-tier 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 volumes
Events** 部分中看到间歇性的 ** 错误。 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: Filesystem
name
- 在元数据部分中,输入 PV 的名称。
storage
- 在“规范容量”部分中,输入先前检索的 Block Storage for VPC 卷的大小 (以千兆字节 (Gi) 为单位)。 例如,如果您的设备容量为100GB,请输入
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-configmap
ConfigMap中的缺省存储类设置。 有关更多信息,请参阅 更改缺省存储类。 -
如果您根据缺省 Block Storage for VPC 存储类创建了自己的存储类,那么必须重新创建这些存储类以更新参数。 有关更多信息,请参阅 在更新到 V 4.2后重新创建您自己的存储类。
在更新到 V 4.2 之后重新创建您自己的存储类
对于 V 4.2,存储类的缺省参数已更改。 不再使用 sizeRange
或 iopsRange
参数。 如果您创建了任何使用这些参数的自己的存储类,那么必须编辑自己的存储类以除去这些参数。 要更改您自己的存储类中的参数,必须删除并重新创建这些参数。 先前,每个存储类都提供了 sizeRange
和 iopsRange
作为参考信息。 对于 V 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
,则必须提供要在parameters.encryptionKey
中使用的 Key Protect 服务实例的根密钥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
-
使用卷ID 列出您的 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
定制缺省存储器设置
您可以使用自定义存储类别或 Kubernetes 密码来更改一些默认的PVC设置,从而创建具有自定义设置的 Block Storage for VPC。
- 使用自定义存储类别的秘密和指定我的参数有什么好处?
- 作为集群管理员,如果您希望集群用户创建的所有PVC都使用特定配置进行预置,并且不希望集群用户覆盖默认配置,则可以创建自定义存储类。
- 但是,当需要多个配置并且您不希望为每个可能的 PVC 配置创建定制存储类时,可以使用缺省 PVC 设置以及对通用 Kubernetes 私钥的引用来创建一个定制存储类。 如果集群用户必须覆盖定制存储类的缺省设置,那么他们可以通过创建保存自己的定制设置的 Kubernetes 私钥来实现这一点。
当您要为您的 Block Storage for VPC 实例设置加密时,如果您想将 Key Protect 根密钥CRN编码为 base64,而不是直接在自定义存储类中提供密钥,也可以使用 Kubernetes 密钥。
更改缺省存储类
对于 V 4.2,Block Storage for VPC 集群附加组件将缺省存储类设置为 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-configmap
oc 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 实例的首选设置来创建您自己的定制存储类。
如果要执行以下操作,您可以创建自己的存储类:
- 设置定制 IOPs 值。
- 使用非
ext4
的文件系统类型设置 Block Storage for VPC。 - 设置加密。
-
查看 存储类参考 以确定要用于存储类的
profile
。 如果要为 Block Storage for VPC指定定制 IOP,那么还可以查看 定制概要文件。如果要使用预先安装的存储类作为模板,那么可以使用
oc get sc <storageclass> -o yaml
命令来获取存储类的详细信息。 -
创建定制存储类配置文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage_class_name> provisioner: vpc.block.csi.ibm.io parameters: profile: "<profile>" csi.storage.k8s.io/fstype: "<file_system_type>" billingType: "hourly" encrypted: "<encrypted_true_false>" encryptionKey: "<encryption_key>" resourceGroup: "" zone: "<zone>" region: "<region>" tags: "<tags>" generation: "gc" 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
- 输入您在上一步中选择的概要文件,或者输入
custom
以使用定制 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 驱动程序使用ReadWriteOnceWithFSType
fsGroupPolicy
。 有关更多信息,请参阅 CSI 驱动程序文档。 encrypted
- 在参数中,输入
true
以创建用于为 Block Storage for VPC 卷设置加密的存储类。 如果您将此选项设置为true
,则必须提供要在parameterencryptionKey
中使用的 Key Protect 服务实例的根密钥CRN。 有关加密数据的更多信息,请参阅为 Block Storage for VPC 设置加密。 encryptionKey
- 如果您输入了
true
用于parameters.encrypted
,请输入您要用于加密 Block Storage for VPC 卷的 Key Protect 服务实例的根密钥 CRN。 有关加密数据的更多信息,请参阅为 Block Storage for VPC 设置加密。 zone
- 在参数中,输入要在其中创建 Block Storage for VPC 实例的 VPC 区域。 确保使用的是工作程序节点连接到的专区。 要列出您的工作节点使用的 VPC 区域,请运行
ibmcloud oc cluster get --cluster <cluster_name_or_ID>
并查看 CLI 输出中的 “工作区域”字段。 如果您没有指定区域,系统将自动为您的 Block Storage for VPC 实例选择一个工人节点区域。 region
- 要在其中连接存储器的工作程序节点的区域。
tags
- 在参数中,输入要应用于 Block Storage for VPC 实例的以空格分隔的标记列表。 标记可帮助您更轻松地找到实例,或者根据常见特征(例如,应用程序或它所用于的环境)对实例分组。
iops
- 如果您在
profile
中输入了custom
,请输入您希望 Block Storage for VPC 使用的IOP值。 请参阅 Block Storage for VPC 定制 IOP 概要文件 表,以获取按卷大小列出的受支持 IOP 范围的列表。 reclaimPolicy
- 输入存储类的回收策略。 如果要在除去 PVC 时保留 PV、物理存储设备和数据,请输入
Retain
。 如果要在除去 PVC 时删除 PV、物理存储设备和数据,请输入Delete
。 allowVolumeExpansion
- 输入存储类的卷扩展策略。 如果您想允许音量扩大,请输入
true
。 如果您不想允许音量扩大,请输入false
。 volumeBindingMode
- 选择是否要延迟 Block Storage for VPC 实例创建,直到使用此存储器的第一个 pod 准备就绪可安排为止。 要延迟创建,请输入
WaitForFirstConsumer
。 要在创建 PVC 时创建实例,请输入Immediate
。
-
在集群中创建定制存储类。
oc apply -f custom-storageclass.yaml
-
验证存储类是否在集群中可用。
oc get sc
示例输出
NAME PROVISIONER AGE ibmc-vpc-block-10iops-tier vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-5iops-tier vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-custom vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-general-purpose vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-retain-10iops-tier vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-retain-5iops-tier vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-retain-custom vpc.block.csi.ibm.io 4d21h ibmc-vpc-block-retain-general-purpose vpc.block.csi.ibm.io 4d21h <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-node
pod 重新启动。 验证 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 编码,而不仅仅是创建 自定义存储类。
- 在开始使用 Kubernetes 密码进行PVC设置之前,我需要了解什么?
- 某些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>
并查看 CLI 输出中的 “工作区域”字段。 如果您没有指定区域,系统将自动为您的 Block Storage for VPC 实例选择一个工人节点区域。 tags
- 在字符串数据部分中,输入创建 PVC 时要使用的标记的逗号分隔列表。 标签可以帮助您在创建存储实例后找到它。
resourceGroup
- 在字符串数据部分,输入您希望 Block Storage for VPC 实例访问的资源组 ID。 如果您没有加入资源组,实例将自动获得访问权限,可以访问集群所属资源组的资源。
encrypted
- 在字符串数据部分中,输入
true
以创建用于为 Block Storage for VPC 卷设置加密的私钥。 如果您将此选项设置为true
,则必须提供要在parameters.encryptionKey
中使用的 Key Protect 服务实例的根密钥CRN。 有关加密数据的更多信息,请参阅为您的 Block Storage for VPC设置加密。 encryptionKey
- 在数据部分,如果您将
parameters.encrypted
输入为true
,则输入您要用于加密 Block Storage for VPC 卷的 Key Protect 服务实例的根密钥 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
,则必须提供要在parameters.encryptionKey
中使用的 Key Protect 服务实例的根密钥CRN。 有关加密数据的更多信息,请参阅为您的 Block Storage for VPC设置加密。 encryptionKey
- 在数据部分,如果您将
parameters.encrypted
输入为true
,则输入您要用于加密 Block Storage for VPC 卷的 Key Protect 服务实例的根密钥 CRN。 若要以密文形式使用您的根密钥CRN,您必须先通过运行echo -n "<root_key_CRN>" | base64
将其转换为64进制。 有关加密数据的更多信息,请参阅 为 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
。
-
登录您的应用程序。
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 上的数据在您所在区域的冗余故障专区中受到保护。 要手动备份数据,请使用 Kubernetes oc cp
命令。
您可以使用 oc cp
命令将文件和目录复制到集群中的pod或特定容器中,或将它们从这些容器中复制出来
开始之前: 访问 Red Hat OpenShift 集群。
要备份或复原数据,请从以下选项中进行选择:
将数据从本地机器复制到集群中的pod。
oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
将集群中的数据复制到本地计算机。
oc cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
将数据从本地机器复制到集群中运行于容器中的特定容器。
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
。
有时,创建的卷的容量小于所请求的值。 请注意,计费适用于创建的卷,而不是请求的卷。