在 Azure Red Hat OpenShift 4 上创建 Azure 文件存储 StorageClass

本文中,您为 Azure Red Hat OpenShift 4 创建一个 StorageClass,该 StorageClass 使用 Azure 文件服务动态预配 ReadWriteMany (RWX) 存储。 你将学会如何:

  • 设置必备组件并安装所需的工具
  • 使用 Azure 文件配置程序创建 Azure Red Hat OpenShift 4 StorageClass

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.6.0 或更高版本。 若要查找版本,请运行 az --version 命令。 如果需要进行安装或升级,请参阅安装 Azure CLI

在您开始之前

将 Azure Red Hat OpenShift 4 群集部署到订阅中,请参阅 创建 Azure Red Hat OpenShift 4 群集

设置 Azure 存储帐户

此步骤在 Azure Red Hat OpenShift (ARO) 群集的资源组之外创建资源组。 此资源组包含创建 Azure Red Hat OpenShift 动态预配者的 Azure 文件共享。

AZURE_FILES_RESOURCE_GROUP=aro_azure_files
LOCATION=eastus

az group create -l $LOCATION -n $AZURE_FILES_RESOURCE_GROUP

AZURE_STORAGE_ACCOUNT_NAME=aroazurefilessa

az storage account create \
  --name $AZURE_STORAGE_ACCOUNT_NAME \
  --resource-group $AZURE_FILES_RESOURCE_GROUP \
  --kind StorageV2 \
  --sku Standard_LRS

设置权限

设置资源组权限

ARO 服务主体需要 listKeys 对新的 Azure 存储帐户资源组具有权限。 分配参与者角色。

ARO_RESOURCE_GROUP=aro-rg
CLUSTER=cluster
ARO_SERVICE_PRINCIPAL_ID=$(az aro show -g $ARO_RESOURCE_GROUP -n $CLUSTER --query servicePrincipalProfile.clientId -o tsv)

az role assignment create --role Contributor --scope /subscriptions/mySubscriptionID/resourceGroups/$AZURE_FILES_RESOURCE_GROUP --assignee $ARO_SERVICE_PRINCIPAL_ID

设置 ARO 群集权限

OpenShift 永久性卷绑定程序服务帐户需要能够读取机密。 创建并分配 OpenShift 群集角色。

ARO_API_SERVER=$(az aro list --query "[?contains(name,'$CLUSTER')].[apiserverProfile.url]" -o tsv)

oc login -u kubeadmin -p $(az aro list-credentials -g $ARO_RESOURCE_GROUP -n $CLUSTER --query=kubeadminPassword -o tsv) $ARO_API_SERVER

oc create clusterrole azure-secret-reader \
  --verb=create,get \
  --resource=secrets

oc adm policy add-cluster-role-to-user azure-secret-reader system:serviceaccount:kube-system:persistent-volume-binder

使用 Azure 文件存储配置程序来创建 StorageClass

此步骤将使用 Azure 文件存储预配器创建 StorageClass。 在 StorageClass 清单中,需要提供存储帐户的详细信息,以便 ARO 群集知道要查看当前资源组之外的存储帐户。

在存储预配期间,会为装载凭据创建一个由 secretName 命名的机密。 在多租户上下文中,建议显式设置secretNamespace的值,否则其他用户可能会读取存储帐户凭据。

cat << EOF >> azure-storageclass-azure-file.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azure-file
provisioner: file.csi.azure.com
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - noperm
parameters:
  ___location: $LOCATION
  secretNamespace: kube-system
  skuName: Standard_LRS
  storageAccount: $AZURE_STORAGE_ACCOUNT_NAME
  resourceGroup: $AZURE_FILES_RESOURCE_GROUP
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF

oc create -f azure-storageclass-azure-file.yaml

Azure 文件存储的装载选项通常取决于要部署的工作负载和应用程序的要求。 就 Azure 文件存储而言,还应考虑使用其他参数。

必需参数:

  • mfsymlinks 将符号链接映射到客户端可以使用的格式
  • noperm 在客户端上禁用权限检查

建议的参数:

  • nossharesock 如果客户端已通过现有装入点连接,则禁用重用套接字
  • actimeo=30 (或更高) 增加 CIFS 客户端缓存文件和目录属性的时间
  • nobrl 禁用向服务器和对 POSIX 锁定有问题的应用程序发送字节范围锁定请求

更改默认 StorageClass(可选)

ARO 上的默认 StorageClass 称为 managed-premium,并使用 azure-disk 配置程序。 通过针对 StorageClass 清单发出修补程序命令来更改此设置。

oc patch storageclass managed-premium -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

oc patch storageclass azure-file -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

验证 Azure 文件 StorageClass(可选)

创建新的应用程序并将向其分配存储。

注释

若要使用 httpd-example 模板,必须在启用“拉取机密”的情况下部署 ARO 群集。 有关详细信息,请参阅获取 Red Hat 拉取机密

oc new-project azfiletest
oc new-app httpd-example

#Wait for the pod to become Ready
curl $(oc get route httpd-example -n azfiletest -o jsonpath={.spec.host})

#If you have set the storage class by default, you can omit the --claim-class parameter
oc set volume dc/httpd-example --add --name=v1 -t pvc --claim-size=1G -m /data --claim-class='azure-file'

#Wait for the new deployment to rollout
export POD=$(oc get pods --field-selector=status.phase==Running -o jsonpath={.items[].metadata.name})
oc exec $POD -- bash -c "echo 'azure file storage' >> /data/test.txt"

oc exec $POD -- bash -c "cat /data/test.txt"
azure file storage

test.txt 文件通过 Azure 门户中的存储资源管理器可见。

后续步骤

在本文中,你使用 Microsoft Azure 文件存储和 Azure Red Hat OpenShift 4 创建了动态持久化存储。 你已了解如何执行以下操作:

  • 创建存储帐户
  • 使用 Azure 文件存储配置程序在 Azure Red Hat OpenShift 4 群集上配置 StorageClass

转到下一篇文章以了解 Azure Red Hat OpenShift 4 支持的资源。