通过使用动态预配,Azure Lustre CSI 驱动程序会在创建持久卷声明(PVC)时自动创建 Azure Managed Lustre 文件系统。 此功能在 CSI 驱动程序版本 0.3.0 中可用。
Note
动态预配从 Azure Lustre CSI 驱动程序版本 0.3.0 开始提供。 有关详细信息,请参阅 v0.3.0 发行说明。
动态预配的先决条件
- 满足 v0.6.0 兼容性要求的 AKS 群集,包括支持的节点操作系统、体系结构和
kubernetes.azure.com/os-sku-effective标签。 - CSI 驱动程序先决条件中的工具、网络访问和节点调度要求
Permissions
Important
在动态创建文件系统之前,向 CSI 控制器使用的标识授予权限。 默认情况下,此标识是 kubelet 标识。 Helm 安装也可以使用 Microsoft Entra 工作负载标识。
控制器标识需要读取和加入现有子网、验证Azure Managed Lustre子网要求以及读取、创建、更新和删除文件系统的权限。 请参阅 v0.6.0 权限要求。
对于工作负荷标识,请完成 v0.6.0 工作负载标识设置的步骤 1 到 4,其中包括控制器 ServiceAccount 的 OIDC、标识权限和联合身份验证。 然后结合 --set IsWorkloadIdentityEnabled=Enabled 和 --set IdentityClientId=<managed-identity-client-id> 使用 Helm install 命令。
网络要求
- Azure 托管 Lustre 群集的现有虚拟网络和子网
- 群集子网中可用的足够 IP 地址
- 合适的网络安全组规则以允许 Lustre 流量
有关网络体系结构规划,请参阅使用 Azure Managed Lustre 规划 AKS 的网络体系结构。
安装用于动态预配的驱动程序
为任一预配方法完成共享 群集准备 和 驱动程序安装 步骤一次。 如果已安装驱动程序,请按照 升级 CSI 驱动程序 而不是安装第二个副本进行操作。
在创建持久卷声明或装载卷之前完成 驱动程序准备情况检查。 在当前 kubectl 上下文选择的同一工作负荷命名空间中创建示例 PVC 和 Pod。
为动态预配创建存储类
根据storageclass_dynprov_lustre.yaml,使用以下配置创建一个名为的文件。 将 location 设置为要在其中创建文件系统的区域,然后选择该区域中可用的 SKU 和区域。 将资源组、虚拟网络和子网的值替换为所选资源。 省略可选参数以使用注释中显示的默认值。 该 resource-group-name 参数标识创建文件系统的位置,参数 vnet-resource-group 标识虚拟网络所在的位置。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: dynprov.azurelustre.csi.azure.com
provisioner: azurelustre.csi.azure.com
parameters:
sku-name: "AMLFS-Durable-Premium-125" # Choose appropriate SKU
zone: "1" # Specify zone if required for your SKU/location
maintenance-day-of-week: "Sunday"
maintenance-time-of-day-utc: "22:00"
location: "chinanorth3" # Optional: defaults to AKS cluster location
resource-group-name: "my-resource-group" # Optional: defaults to AKS infrastructure RG
vnet-resource-group: "my-vnet-resource-group" # Optional: defaults to AKS VNet resource group
vnet-name: "my-vnet" # Optional: defaults to AKS cluster VNET
subnet-name: "my-subnet" # Optional: defaults to AKS cluster subnet
reclaimPolicy: Delete # Change to "Retain" to keep clusters after PVC deletion
volumeBindingMode: Immediate
mountOptions:
- noatime
- flock
---
# Optional: Limit this StorageClass to one PVC in the current namespace
apiVersion: v1
kind: ResourceQuota
metadata:
name: pvc-lustre-dynprov-quota
spec:
hard:
dynprov.azurelustre.csi.azure.com.storageclass.storage.k8s.io/persistentvolumeclaims: "1"
此示例还创建一个配额,用于将使用 StorageClass 的声明限制为当前命名空间中的一个 PVC。 使用该示例:
kubectl apply -f storageclass_dynprov_lustre.yaml
为动态预配创建永久性卷声明
基于pvc_storageclass_dynprov.yaml,使用以下配置创建一个名为的文件。 调整工作负荷所请求的容量,以及所选 SKU 的 容量增量。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-lustre-dynprov
spec:
accessModes:
- ReadWriteMany
storageClassName: dynprov.azurelustre.csi.azure.com
resources:
requests:
storage: 48Ti
将 PVC 应用到 AKS 集群:
kubectl apply -f pvc_storageclass_dynprov.yaml
监视文件系统创建
驱动程序可能需要 10 分钟或更多时间才能创建Azure Managed Lustre文件系统。 查看 PVC 状态:
kubectl get pvc pvc-lustre-dynprov --watch
当 Bound 显示 STATUS 时,按 Ctrl+C 并继续。
若要检查预配事件,请运行 kubectl describe pvc pvc-lustre-dynprov。
创建用于动态预配的 Pod
创建一个名为 pod_echo_date_dynprov.yaml 的文件,并将以下 YAML 内容复制进去。 此示例适用于安装了驱动程序的 Linux amd64 节点。 对于受支持的 ARM 节点,采用相同方法时请使用与 ARM 兼容的映像。
apiVersion: v1
kind: Pod
metadata:
name: lustre-echo-date-dynprov
spec:
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
name: lustre-echo-date-dynprov
command:
- "/bin/sh"
- "-c"
- "while true; do echo $(date) >> /mnt/lustre/outfile; sleep 1; done"
volumeMounts:
- name: lustre-storage
mountPath: /mnt/lustre
volumes:
- name: lustre-storage
persistentVolumeClaim:
claimName: pvc-lustre-dynprov
将 Pod 应用到 AKS 群集:
kubectl apply -f pod_echo_date_dynprov.yaml
验证动态预配
等待示例 Pod 准备就绪,然后检查其装载:
kubectl wait --for=condition=Ready pod/lustre-echo-date-dynprov --timeout=10m &&
kubectl exec -it lustre-echo-date-dynprov -- df -h
您应该能看到 Azure 托管 Lustre 文件系统已装载在 /mnt/lustre。
通过读取 Pod 的输出文件,确认 Pod 正在写入文件系统。 新的时间戳应继续显示:
kubectl exec lustre-echo-date-dynprov -- tail -f /mnt/lustre/outfile
确认出现新时间戳后按 Ctrl+C。
清理动态资源
对于该示例的 reclaimPolicy: Delete,删除 PVC 也会删除 PV 和 Azure Managed Lustre 文件系统,包括其数据。 完成示例后,请删除其 Kubernetes 资源:
kubectl delete pod lustre-echo-date-dynprov
kubectl delete pvc pvc-lustre-dynprov
kubectl delete storageclass dynprov.azurelustre.csi.azure.com
kubectl delete resourcequota pvc-lustre-dynprov-quota --ignore-not-found
如果选择 Retain,则当不再需要时,PV 和文件系统将保留下来,以便之后手动清理。
Troubleshooting
若要排查 Azure Lustre CSI 驱动程序的问题,请参阅 GitHub 存储库中的 v0.6.0 CSI 驱动程序故障排除指南。
有关常见的驱动程序安装、节点调度和升级问题,请参阅 CSI 驱动程序故障排除。
动态预配的常见问题包括:
- 身份验证或授权错误 - 验证已配置的控制器标识是否具有创建 Azure Managed Lustre 群集的权限。 对于工作负荷标识,还检查 OIDC、联合身份验证和控制器 ServiceAccount 配置。
-
SKU 和区域验证错误 - 检查文件系统配置中的可用区域、可用区和吞吐量选项,然后在 StorageClass 中更新
location、sku-name和zone。 - 网络 IP 地址可用性 - 确认目标子网中有足够的 IP 地址可用。
- 配额限制 - 检查 Azure Managed Lustre 群集的 Kubernetes 资源配额和Azure订阅配额。
- AKS 与 Azure Managed Lustre 之间的网络连接问题 - 验证虚拟网络对等互连或子网配置。
有关其他故障排除资源,请参阅: