この記事では、Azure Files を使用して ReadWriteMany (RWX) ストレージを動的にプロビジョニングする、Azure Red Hat OpenShift 4 用の StorageClass を作成します。 次の方法を学びます:
- 前提条件を設定し、必要なツールをインストールする
- Azure Files プロビジョナーを使用して 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 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
アクセス許可を設定する
リソース グループのアクセス許可を設定する
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 Files プロビジョナーを使用して StorageClass を作成する
この手順では、Azure Files プロビジョナーを使用して StorageClass を作成します。 ARO クラスターが現在のリソース グループの外部にあるストレージ アカウントを認識できるようにするため、StorageClass マニフェストにストレージ アカウントの詳細を記述する必要があります。
ストレージのプロビジョニング中に、マウント資格情報用に 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 ファイルの場合、使用を検討する必要があるパラメーターが他にもあります。
必須のパラメーター:
-
mfsymlinks
シンボリックリンクをクライアントが使用できる形式にマップする -
noperm
クライアント側でアクセス許可チェックを無効にする
推奨されるパラメーター:
-
nossharesock
クライアントが既存のマウント ポイント経由で既に接続されている場合に、ソケットの再利用を無効にする場合 -
actimeo=30
(またはそれ以上) を使用して、CIFS クライアントがファイル属性とディレクトリ属性をキャッシュする時間を増やします -
nobrl
サーバーへのバイト範囲ロック要求の送信を無効にする場合、および posix ロックに問題があるアプリケーションの場合
既定の StorageClass を変更する (省略可能)
ARO の既定の StorageClass は、マネージド 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 Files 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 portal の Storage Explorer を介して表示されます。
次のステップ
この記事では、Microsoft Azure Files と Azure Red Hat OpenShift 4 を使用して、動的な永続ストレージを作成しました。 以下の方法を学習しました。
- ストレージ アカウントを作成する
- Azure Files プロビジョナーを使用して Azure Red Hat OpenShift 4 クラスターに StorageClass を作成する
次の記事に進んで、Azure Red Hat OpenShift 4 でサポートされているリソースについて確認してください。