5.11. Azure Disk CSI Driver Operator
5.11.1. 概述
OpenShift Container Platform 可以使用 Microsoft Azure Disk Storage 的 Container Storage Interface(CSI)驱动程序置备持久性卷(PV)。
在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储和配置 CSI 卷。
要创建挂载到 Azure Disk 存储资产中的 CSI 置备 PV,OpenShift Container Platform 在 openshift-cluster-csi-drivers
命名空间中默认安装 Azure Disk CSI Driver Operator 和 Azure Disk CSI 驱动程序。
-
Azure Disk CSI Driver Operator 提供了一个名为
managed-csi
的存储类,您可以使用它来创建持久性卷声明(PVC)。Azure Disk CSI Driver Operator 支持动态卷置备,方法是允许按需创建存储卷,使集群管理员无需预置备存储。如果需要,您可以禁用此默认存储类 (请参阅管理默认存储类)。 - Azure Disk CSI 驱动程序 允许您创建并挂载 Azure Disk PV。
5.11.2. 关于 CSI
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
OpenShift Container Platform 为 Azure Disk in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。如需更多信息,请参阅 CSI 自动迁移。
5.11.3. 创建带有存储帐户类型的存储类
存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。
在创建存储类时,您可以指定存储帐户类型。这与您的 Azure 存储帐户 SKU 层对应。有效选项包括 Standard_LRS
,Premium_LRS
,StandardSSD_LRS
,UltraSSD_LRS
,Premium_ZRS
,StandardSSD_ZRS
, 和 PremiumV2_LRS
。有关查找 Azure SKU 层的详情,请参考 SKU 类型。
ZRS 和 PremiumV2_LRS 都有一些区域限制。有关这些限制的详情,请参阅 ZRS 限制和 Premium_LRS 限制。
先决条件
- 使用管理员权限访问 OpenShift Container Platform 集群
流程
使用以下步骤创建带有存储帐户类型的存储类。
使用类似如下的 YAML 文件创建设计存储帐户类型的存储类:
$ oc create -f - << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class> 1 provisioner: disk.csi.azure.com parameters: skuName: <storage-class-account-type> 2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true EOF
注意对于 PremiumV2_LRS,在
storageclass.parameters
中指定cachingMode: None
。通过列出存储类来确保创建了存储类:
$ oc get storageclass
输出示例
$ oc get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azurefile-csi file.csi.azure.com Delete Immediate true 68m managed-csi (default) disk.csi.azure.com Delete WaitForFirstConsumer true 68m sc-prem-zrs disk.csi.azure.com Delete WaitForFirstConsumer true 4m25s 1
- 1
- 带有存储帐户类型的新存储类。
5.11.4. 用户管理的加密
用户管理的加密功能允许您在安装过程中提供加密 OpenShift Container Platform 节点根卷的密钥,并允许所有受管存储类使用这些密钥加密置备的存储卷。您必须在 install-config YAML 文件中的 platform.<cloud_type>.defaultMachinePlatform
字段中指定自定义密钥。
此功能支持以下存储类型:
- Amazon Web Services (AWS) Elastic Block storage (EBS)
- Microsoft Azure Disk 存储
- Google Cloud Platform (GCP) 持久磁盘 (PD) 存储
- IBM Virtual Private Cloud (VPC) Block 存储
如果 OS (root) 磁盘已被加密,且存储类中没有定义加密密钥,Azure Disk CSI 驱动程序默认使用 OS 磁盘加密密钥来加密置备的存储卷。
有关为 Azure 安装用户管理加密的详情,请参考为 Azure 启用用户管理的加密。
5.11.5. 用于部署带有使用 PVC 的巨型磁盘的机器的机器集
您可以创建在 Azure 上运行的机器集,该机器集用来部署带有巨型磁盘的机器。ultra 磁盘是高性能存储,用于要求最苛刻的数据工作负载。
in-tree 插件和 CSI 驱动程序都支持使用 PVC 启用巨型 磁盘。您还可以在不创建 PVC 的情况下将巨型磁盘部署为数据磁盘。
5.11.5.1. 使用机器集创建带有巨型磁盘的机器
您可以通过编辑机器集 YAML 文件在 Azure 上部署带有巨型磁盘的机器。
先决条件
- 已有 Microsoft Azure 集群。
流程
运行以下命令,复制现有的 Azure
MachineSet
自定义资源(CR)并编辑它:$ oc edit machineset <machine-set-name>
其中
<machine-set-name>
是您要使用巨型磁盘置备机器的机器集。在指示的位置中添加以下行:
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: metadata: labels: disk: ultrassd 1 providerSpec: value: ultraSSDCapability: Enabled 2
运行以下命令,使用更新的配置创建机器集:
$ oc create -f <machine-set-name>.yaml
创建一个包含以下 YAML 定义的存储类:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ultra-disk-sc 1 parameters: cachingMode: None diskIopsReadWrite: "2000" 2 diskMbpsReadWrite: "320" 3 kind: managed skuname: UltraSSD_LRS provisioner: disk.csi.azure.com 4 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer 5
创建一个持久性卷声明(PVC)来引用包含以下 YAML 定义的
ultra-disk-sc
存储类:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ultra-disk 1 spec: accessModes: - ReadWriteOnce storageClassName: ultra-disk-sc 2 resources: requests: storage: 4Gi 3
创建包含以下 YAML 定义的 pod:
apiVersion: v1 kind: Pod metadata: name: nginx-ultra spec: nodeSelector: disk: ultrassd 1 containers: - name: nginx-ultra image: alpine:latest command: - "sleep" - "infinity" volumeMounts: - mountPath: "/mnt/azure" name: volume volumes: - name: volume persistentVolumeClaim: claimName: ultra-disk 2
验证
运行以下命令验证机器是否已创建:
$ oc get machines
机器应处于
Running
状态。对于正在运行并附加节点的机器,请运行以下命令验证分区:
$ oc debug node/<node-name> -- chroot /host lsblk
在这个命令中,
oc debug node/<node-name>
会在节点<node-name>
上启动一个 debugging shell,并传递一个带有--
的命令。传递的命令chroot /host
提供对底层主机操作系统二进制文件的访问,lsblk
显示连接至主机操作系统计算机的块设备。
后续步骤
要在 pod 中使用大量磁盘,请创建使用挂载点的工作负载。创建一个类似以下示例的 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: ssd-benchmark1 spec: containers: - name: ssd-benchmark1 image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - name: lun0p1 mountPath: "/tmp" volumes: - name: lun0p1 hostPath: path: /var/lib/lun0p1 type: DirectoryOrCreate nodeSelector: disktype: ultrassd
5.11.5.2. 启用 ultra 磁盘的机器集的故障排除资源
使用本节中的信息从您可能会遇到的问题了解和恢复。
5.11.5.2.1. 无法挂载由巨型磁盘支持的持久性卷声明
如果挂载了被巨型磁盘支持的持久性卷声明的问题,pod 会一直处于 ContainerCreating
状态,并触发警报。
例如,如果没有在支持托管 pod 的节点的机器上设置 additionalCapabilities.ultraSSDEnabled
参数,则会出现以下出错信息:
StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
要解决这个问题,请运行以下命令来描述 pod:
$ oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>