你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

在本文中,你将为 Azure Red Hat OpenShift 4 创建一个 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 服务主体需要对新的 Azure 存储帐户资源组具有“listKeys”权限。 分配“参与者”角色来实现此目的。

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

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

后续步骤

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

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

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