$ oc edit machineset <machine-set-name>
OpenShift Container Platform 支持 Microsoft Azure 磁盘卷。您可以使用 Azure 为 OpenShift Container Platform 集群配置持久性存储。假设您已经熟悉 Kubernetes 和 Azure。Kubernetes 持久卷框架允许管理员为集群配置持久性存储,并为用户提供一种无需了解底层基础架构即可请求这些资源的方法。Azure 磁盘卷可以动态配置。持久卷不绑定到单个项目或命名空间;它们可以在 OpenShift Container Platform 集群中共享。持久卷声明特定于项目或命名空间,用户可以请求它们。
OpenShift Container Platform 4.11 及更高版本为 Azure 磁盘内置卷插件到其等效 CSI 驱动程序提供了自动迁移。 CSI 自动迁移应该无缝进行。迁移不会更改您如何使用所有现有 API 对象,例如持久卷、持久卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移。 |
基础架构中存储的高可用性留给底层存储提供商。 |
存储类用于区分和描绘存储级别和用途。通过定义存储类,用户可以获得动态配置的持久卷。
在 OpenShift Container Platform 控制台中,单击**存储** → **存储类**。
在存储类概述中,单击**创建存储类**。
在出现的页面上定义所需的选项。
输入一个名称来引用存储类。
输入可选说明。
选择回收策略。
从下拉列表中选择kubernetes.io/azure-disk
。
输入存储帐户类型。这对应于您的 Azure 存储帐户 SKU 层级。有效选项为Premium_LRS
、PremiumV2_LRS
、Standard_LRS
、StandardSSD_LRS
和 UltraSSD_LRS
。
skuname |
输入帐户的类型。有效选项为shared
、dedicated
和 managed
。
Red Hat 仅支持在存储类中使用 对于 |
根据需要输入存储类的其他参数。
单击**创建**以创建存储类。
在底层基础架构中必须存在存储,然后才能将其作为卷安装到 OpenShift Container Platform 中。
在 OpenShift Container Platform 控制台中,单击**存储** → **持久卷声明**。
在持久卷声明概述中,单击**创建持久卷声明**。
在出现的页面上定义所需的选项。
从下拉菜单中选择先前创建的存储类。
输入存储卷声明的唯一名称。
选择访问模式。此选择决定存储卷声明的读写访问权限。
定义存储卷声明的大小。
点击**创建**以创建持久卷声明并生成持久卷。
在OpenShift Container Platform挂载卷并将其传递给容器之前,它会检查卷是否包含持久卷定义中fsType
参数指定的 文件系统。如果设备未格式化为该文件系统,则设备中的所有数据将被擦除,并且设备将自动格式化为给定的文件系统。
这允许使用未格式化的Azure卷作为持久卷,因为OpenShift Container Platform会在首次使用前对其进行格式化。
您可以创建一个在Azure上运行的机器集,该机器集部署带有超高速磁盘的机器。超高速磁盘是高性能存储,旨在用于最苛刻的数据工作负载。
树内插件和CSI驱动程序都支持使用PVC启用超高速磁盘。您也可以部署带有超高速磁盘的机器作为数据磁盘,而无需创建PVC。
您可以通过编辑机器集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)
1 | 指定一个标签来选择由该机器集创建的节点。此过程为此值使用disk.ultrassd 。 |
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)
1 | 指定存储类的名称。此过程为此值使用ultra-disk-sc 。 |
2 | 指定存储类的IOPS数量。 |
3 | 指定存储类的吞吐量(以MBps为单位)。 |
4 | 对于Azure Kubernetes Service (AKS) 1.21或更高版本,使用disk.csi.azure.com 。对于早期版本的AKS,使用kubernetes.io/azure-disk 。 |
5 | 可选:指定此参数以等待使用磁盘的Pod的创建。 |
创建一个持久卷声明 (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)
1 | 指定PVC的名称。此过程为此值使用ultra-disk 。 |
2 | 此PVC引用ultra-disk-sc 存储类。 |
3 | 指定存储类的大小。最小值为4Gi 。 |
创建一个包含以下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)
1 | 指定启用超高速磁盘使用的机器集的标签。此过程为此值使用disk.ultrassd 。 |
2 | 此Pod引用ultra-disk PVC。 |
通过运行以下命令验证机器是否已创建
$ oc get machines
机器应处于运行中
状态。
对于正在运行并已连接节点的机器,请运行以下命令验证分区
$ oc debug node/<node-name> -- chroot /host lsblk
在此命令中,oc debug node/<node-name>
在节点<node-name>
上启动一个调试 shell 并传递一个带有--
的命令。传递的命令chroot /host
提供对底层主机OS二进制文件的访问权限,而lsblk
显示附加到主机OS机器的块设备。
要在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
使用本节中的信息来了解和恢复您可能遇到的问题。
如果挂载由超高速磁盘支持的持久卷声明时出现问题,则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>