Azure Red Hat OpenShift 4 で Azure Files ストレージ クラスを作成する

この記事では、Azure Red Hat OpenShift 4 のストレージ クラスを作成し、Azure Filesを使用してストレージを動的にプロビジョニングします。 次の方法を学びます:

  • 前提条件を設定し、必要なツールをインストールする
  • Azure Files プロビジョンタを使用して Azure Red Hat OpenShift 4 ストレージ クラスを作成する

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 クラスターのリソース グループの外部にリソース グループを作成します。 このリソース グループには、Azure Red Hat OpenShift動的プロビジョンを作成したAzure Files共有が含まれています。

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

アクセス許可を設定する

リソース グループのアクセス許可を設定し、クラスターのアクセス許可を設定します。

リソース グループのアクセス許可の場合、サービス プリンシパルには、新しい 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

クラスターのアクセス許可の場合、永続ボリューム バインダー サービス アカウントにはシークレットを読み取る機能が必要です。 Azure Red Hat 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 Files プロビジョナーを使用してストレージ クラスを作成する

この手順では、Azure Files プロビジョニング ツールを使用してストレージ クラスを作成します。 ストレージ クラス マニフェスト内にストレージ アカウントの詳細を含める必要があります。 これらの詳細により、クラスターは現在のリソース グループの外部にあるストレージ アカウントを確認します。

ストレージのプロビジョニング時には、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 Filesのマウント オプションは、通常、デプロイするワークロードとアプリケーションの要件によって異なります。 特にAzure Filesの場合は、他のパラメーターの使用を検討してください。

必須のパラメーター:

  • mfsymlinks を使用して、 symlinks をクライアントが使用できるフォームにマップします。

  • noperm クライアント側のアクセス許可チェックを無効にします。

推奨されるパラメーター:

  • nossharesock クライアントが既存のマウント ポイント経由で既に接続されている場合は、ソケットの再利用をオフにします。

  • actimeo=30 (またはそれ以上) を使用して、Common Internet File System (CIFS) プロトコル クライアントがファイル属性とディレクトリ属性をキャッシュする時間を増やします。

  • nobrl を選択すると、バイト範囲ロック要求のサーバーへの送信がオフになります。 このパラメーターは、Unix 用ポータブル オペレーティング システム インターフェイス (POSIX) のロックに問題があるアプリケーションにも推奨されます。

既定のストレージ クラスを変更する (省略可能)

既定のストレージ クラスは マネージド Premium と呼ばれ、 azure-disk プロビジョンタを使用します。 この設定を変更するには、ストレージ クラス マニフェストに対してパッチ コマンドを発行します。

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 Files ストレージ クラスを確認する (省略可能)

新しいアプリケーションを作成し、それにストレージを登録します。

httpd-example テンプレートを使用するには、プル シークレットを有効にしてクラスターをデプロイする必要があります。 詳しくは、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 ポータルのStorage Explorerで確認できます。