4.2. 使用 Azure 持久性存储
OpenShift Container Platform 支持 Microsoft Azure Disk 卷。您可以使用 Azure 为 OpenShift Container Platform 集群置备永久性存储。我们假设您对 Kubernetes 和 Azure 有一定的了解。Kubernetes 持久性卷框架允许管理员提供带有持久性存储的集群,并使用户可以在不了解底层存储架构的情况下请求这些资源。Azure 磁盘卷可以动态部署。持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Container Platform 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。
OpenShift Container Platform 4.11 及之后的版本为 Azure Disk in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。
CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移。
存储的高可用性功能由底层的存储架构提供。
其他资源
4.2.1. 创建 Azure 存储类
存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。
流程
- 在 OpenShift Container Platform 控制台中点击 Storage→ Storage Classes。
- 在存储类概述中,点击 Create Storage Class。
在出现的页面中定义所需选项。
- 输入一个名称来指代存储类。
- 输入描述信息(可选)。
- 选择 reclaim 策略。
从下拉列表中选择
kubernetes.io/azure-disk
。输入存储帐户类型。这与您的 Azure 存储帐户 SKU 层对应。有效选项包括
Premium_LRS
、PremiumV2_LRS
、Standard_LRS
、StandardSSD_LRS
和UltraSSD_LRS
。重要所有区域都不支持 skuname
PremiumV2_LRS
,在一些支持的区域中也不支持所有可用区。如需更多信息,请参阅 Azure 文档。输入帐户类型。有效选项为
shared
、dedicated
和managed
.重要红帽仅在存储类中支持使用
kind: Managed
。使用
Shared
和Dedicated
时,Azure 会创建非受管磁盘,而 OpenShift Container Platform 为机器 OS(root)磁盘创建一个受管磁盘。但是,因为 Azure Disk 不允许在节点上同时使用受管和非受管磁盘,所以使用Shared
或Dedicated
创建的非受管磁盘无法附加到 OpenShift Container Platform 节点。
- 根据需要为存储类输入附加参数。
- 点 Create 创建存储类。
4.2.2. 创建持久性卷声明
先决条件
当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。
流程
-
在 OpenShift Container Platform 控制台中,点击 Storage
Persistent Volume Claims。 - 在持久性卷声明概述页中,点 Create Persistent Volume Claim。
在出现的页面中定义所需选项。
- 从下拉菜单中选择之前创建的存储类。
- 输入存储声明的唯一名称。
- 选择访问模式。此选择决定了存储声明的读写访问权限。
- 定义存储声明的大小。
- 点击 Create 创建持久性卷声明,并生成一个持久性卷。
4.2.3. 卷格式
在 OpenShift Container Platform 挂载卷并将其传递给容器之前,它会检查它是否包含由 fstype
参数指定的文件系统。如果没有使用文件系统格式化该设备,该设备中的所有数据都会被删除,并使用指定的文件系统自动格式化该设备。
这将可以使用未格式化的 Azure 卷作为持久性卷,因为 OpenShift Container Platform 在第一次使用前会对其进行格式化。
4.2.4. 用于部署带有使用 PVC 的巨型磁盘的机器的机器集
您可以创建在 Azure 上运行的机器集,该机器集用来部署带有巨型磁盘的机器。ultra 磁盘是高性能存储,用于要求最苛刻的数据工作负载。
in-tree 插件和 CSI 驱动程序都支持使用 PVC 启用巨型 磁盘。您还可以在不创建 PVC 的情况下将巨型磁盘部署为数据磁盘。
4.2.4.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
4.2.4.2. 启用 ultra 磁盘的机器集的故障排除资源
使用本节中的信息从您可能会遇到的问题了解和恢复。
4.2.4.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>