Azure Kubernetes Service 用の Azure NetApp Files の NFS ボリュームをプロビジョニングする
Azure Kubernetes Service の Azure NetApp Files を構成したら、Azure Kubernetes Service 用の Azure NetApp Files ボリュームをプロビジョニングできます。
Azure NetApp Files では、NFS (NFSv3 または NFSv4.1)、SMB、またはデュアル プロトコル (NFSv3 と SMB、または NFSv4.1 と SMB) を使用するボリュームをサポートします。
- この記事では、NFS ボリュームを静的または動的にプロビジョニングする方法の詳細を説明します。
- SMB ボリュームを静的または動的にプロビジョニングする方法については、「Azure Kubernetes Service 用の Azure NetApp Files の SMB ボリュームをプロビジョニングする」を参照してください。
- デュアル プロトコル ボリュームを静的にプロビジョニングする方法については、「Azure Kubernetes Service 用の Azure NetApp Files のデュアル プロトコル ボリュームをプロビジョニングする」を参照してください
NFS ボリュームを使用するアプリケーション向けに静的に構成する
このセクションでは、Azure NetApp Files で NFS ボリュームを作成し、そのボリュームを Kubernetes に静的に公開する方法について説明します。 また、コンテナー化されたアプリケーションでそのボリュームを使用する方法についても説明します。
NFS ボリュームを作成する
後で使用するために、いくつかの変数を定義します。 myresourcegroup、mylocation、myaccountname、mypool1、premium、myfilepath、myvolsize、myvolname、vnetid、anfSubnetID を、お使いのアカウントと環境の適切な値に置き換えます。 "ファイルパス" は、すべての ANF アカウント内で一意である必要があります。
RESOURCE_GROUP="myresourcegroup" LOCATION="mylocation" ANF_ACCOUNT_NAME="myaccountname" POOL_NAME="mypool1" SERVICE_LEVEL="premium" # Valid values are Standard, Premium, and Ultra UNIQUE_FILE_PATH="myfilepath" VOLUME_SIZE_GIB="myvolsize" VOLUME_NAME="myvolname" VNET_ID="vnetId" SUBNET_ID="anfSubnetId"
az netappfiles volume create
コマンドを使用してボリュームを作成します。 詳細については、「Azure NetApp Files 用の NFS ボリュームを作成する」をご覧ください。az netappfiles volume create \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --name "$VOLUME_NAME" \ --service-level $SERVICE_LEVEL \ --vnet $VNET_ID \ --subnet $SUBNET_ID \ --usage-threshold $VOLUME_SIZE_GIB \ --file-path $UNIQUE_FILE_PATH \ --protocol-types NFSv3
永続ボリューム要求を作成する
az netappfiles volume show
コマンドを使用して、ボリュームの詳細を一覧表示します。 変数が前の手順で定義されていない場合は、Azure NetApp Files アカウントと環境の適切な値に置き換えます。az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
次の出力は、実際の値で上記のコマンドを実行した例です。
{ ... "creationToken": "myfilepath2", ... "mountTargets": [ { ... "ipAddress": "10.0.0.4", ... } ], ... }
pv-nfs.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 サーバーが手順 1 の出力 IP アドレスと一致し、パスが上記のcreationToken
の出力と一致していることを確認します。 容量が上記の手順のボリューム サイズと一致していることも必要です。apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 100Gi accessModes: - ReadWriteMany mountOptions: - vers=3 nfs: server: 10.0.0.4 path: /myfilepath2
kubectl apply
コマンドを使用して永続ボリュームを作成します。kubectl apply -f pv-nfs.yaml
kubectl describe
コマンドを使用して、永続ボリュームの状態が Available であることを確認します。kubectl describe pv pv-nfs
永続ボリューム要求の作成
pvc-nfs.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 このマニフェストでは、作成した PV と一致する 100Gi ストレージおよびReadWriteMany
アクセス モード用のpvc-nfs
という名前の PVC を作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 100Gi
kubectl apply
コマンドを使用して永続ボリューム要求を作成します。kubectl apply -f pvc-nfs.yaml
kubectl describe
コマンドを使用して、永続ボリューム要求の Status が Bound であることを確認します。kubectl describe pvc pvc-nfs
ポッドを使ったマウント
nginx-nfs.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 このマニフェストは、永続ボリューム要求を使用するnginx
ポッドを定義します。kind: Pod apiVersion: v1 metadata: name: nginx-nfs spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: nginx-nfs command: - "/bin/sh" - "-c" - while true; do echo $(date) >> /mnt/azure/outfile; sleep 1; done volumeMounts: - name: disk01 mountPath: /mnt/azure volumes: - name: disk01 persistentVolumeClaim: claimName: pvc-nfs
kubectl apply
コマンドを使用してポッドを作成します。kubectl apply -f nginx-nfs.yaml
kubectl describe
コマンドを使用してポッドが Running であることを確認します。kubectl describe pod nginx-nfs
kubectl exec
を使用してボリュームがポッドにマウントされていることを確認してポッドに接続してから、df -h
を使用してボリュームがマウントされているかどうかを確認します。kubectl exec -it nginx-nfs -- sh
/ # df -h Filesystem Size Used Avail Use% Mounted on ... 10.0.0.4:/myfilepath2 100T 384K 100T 1% /mnt/azure ...
NFS ボリュームを使用するアプリケーション向けに動的に構成する
Astra Trident は、Azure NetApp Files で NFS または SMB ファイルを動的にプロビジョニングする場合に使用できます。 動的にプロビジョニングされた SMB ボリュームは、Windows ワーカー ノードでのみサポートされます。
このセクションでは、Astra Trident を使用して、Azure NetApp Files で NFS ボリュームを動的に作成し、コンテナー化されたアプリケーションに自動的にマウントされるようにする方法について説明します。
Astra Trident をインストールする
NFS ボリュームを動的にプロビジョニングするには、Astra Trident をインストールする必要があります。 Astra Trident は、Kubernetes 専用に開発された NetApp の動的ストレージ プロビジョナーです。 Astra Trident の業界標準である Container Storage Interface (CSI) ドライバーを使用して、Kubernetes アプリケーションのストレージの消費を簡素化します。 Astra Trident は、Kubernetes クラスターにポッドとしてデプロイされ、Kubernetes ワークロードに動的ストレージ オーケストレーション サービスを提供します。
Trident は、Trident オペレーター (手動または Helm を使用) または tridentctl
を使用してインストールできます。 これらのインストール方法とその動作の詳細については、Astra Trident のインストール ガイドを参照してください。
Helm を使用して Astra Trident をインストールする
この方法を使用して Astra Trident をインストールするには、ワークステーションに Helm をインストールする必要があります。 他の方法で Astra Trident をインストールするには、Astra Trident のインストール ガイドを参照してください。
Linux ワーカー ノードのみでクラスター用の Helm を使用して Astra Trident をインストールするには、次のコマンドを実行します。
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart helm install trident netapp-trident/trident-operator --version 23.04.0 --create-namespace --namespace trident
コマンドの出力は、次の例のようになります。
NAME: trident LAST DEPLOYED: Fri May 5 13:55:36 2023 NAMESPACE: trident STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes. Your release is named 'trident' and is installed into the 'trident' namespace. Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster. To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases. You may find all Trident releases and source code online at https://github.com/NetApp/trident. To learn more about the release, try: $ helm status trident $ helm get all trident
Astra Trident が正常にインストールされたことを確認するには、次の
kubectl describe
コマンドを実行します。kubectl describe torc trident
コマンドの出力は、次の例のようになります。
Name: trident Namespace: Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: trident meta.helm.sh/release-namespace: trident API Version: trident.netapp.io/v1 Kind: TridentOrchestrator Metadata: ... Spec: IPv6: false Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: <nil> Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent k8sTimeout: 0 Kubelet Dir: <nil> Log Format: text Log Layers: <nil> Log Workflows: <nil> Namespace: trident Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Windows: false Status: Current Installation Params: IPv6: false Autosupport Hostname: Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: Autosupport Serial Number: Debug: false Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent Image Pull Secrets: Image Registry: k8sTimeout: 30 Kubelet Dir: /var/lib/kubelet Log Format: text Log Layers: Log Level: info Log Workflows: Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Message: Trident installed Namespace: trident Status: Installed Version: v23.04.0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Installing 2m59s trident-operator.netapp.io Installing Trident Normal Installed 2m31s trident-operator.netapp.io Trident installed
バックエンドを作成する
Astra Trident に Azure NetApp Files サブスクリプションとボリュームを作成する場所を指示するために、バックエンドを作成します。 この手順では、前の手順で作成したアカウントの詳細が必要です。
backend-secret.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。Client ID
とclientSecret
を環境に合った適切な値に変更します。apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: abcde356-bf8e-fake-c111-abcde35613aa clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
backend-anf.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。subscriptionID
、tenantID
、location
、serviceLevel
を環境に合った適切な値に変更します。 Azure NetApp Files が有効になっている Azure サブスクリプションのsubscriptionID
を使用します。 Azure NetApp Files サービスに対する十分なアクセス許可を持つ、Microsoft Entra ID 内のアプリケーションの登録のtenantID
、clientID
、clientSecret
を取得します。 アプリケーションの登録には、Azure によって定義済みの所有者ロールまたは共同作成者ロールが含まれます。 場所は、前の手順で作成した、少なくとも 1 つの委任されたサブネットを含む Azure の場所であることが必要です。serviceLevel
は、「AKS ワークロード用に Azure NetApp Files を構成する」で容量プール用に構成されたserviceLevel
と一致する必要があります。apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf spec: version: 1 storageDriverName: azure-netapp-files subscriptionID: 12abc678-4774-fake-a1b2-a7abcde39312 tenantID: a7abcde3-edc1-fake-b111-a7abcde356cf location: eastus serviceLevel: Premium credentials: name: backend-tbc-anf-secret
バックエンドの詳細については、「Azure NetApp Files のバックエンド構成オプションと例」を参照してください。
kubectl apply
コマンドを使用してシークレットとバックエンドを適用します。 最初にシークレットを適用します。kubectl apply -f backend-secret.yaml -n trident
コマンドの出力は、次の例のようになります。
secret/backend-tbc-anf-secret created
バックエンドを適用します。
kubectl apply -f backend-anf.yaml -n trident
コマンドの出力は、次の例のようになります。
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
kubectl get
コマンドを使用してバックエンドが作成されたことを確認します。kubectl get tridentbackends -n trident
コマンドの出力は、次の例のようになります。
NAME BACKEND BACKEND UUID tbe-kfrdh backend-tbc-anf 8da4e926-9dd4-4a40-8d6a-375aab28c566
ストレージ クラスの作成
ストレージ クラスは、保存の単位を永続ボリュームを使用して動的に作成する方法を定義します。 Azure NetApp Files ボリュームを使用するには、ストレージ クラスを作成する必要があります。
anf-storageclass.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azure-netapp-files provisioner: csi.trident.netapp.io parameters: backendType: "azure-netapp-files" fsType: "nfs"
kubectl apply
コマンドを使用して、ストレージ クラスを作成します。kubectl apply -f anf-storageclass.yaml
コマンドの出力は、次の例のようになります。
storageclass/azure-netapp-files created
kubectl get
コマンドを実行して、ストレージ クラスの状態を表示します。kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azure-netapp-files csi.trident.netapp.io Delete Immediate false
PVC を作成する
永続ボリューム要求 (PVC) とは、ユーザーがストレージを要求することです。 永続ボリューム要求を作成すると、Astra Trident によって Azure NetApp Files ボリュームが自動的に作成され、Kubernetes ワークロードで使用できるようになります。
anf-pvc.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 この例では、ReadWriteMany アクセス権を備えた 1 TiB のボリュームが必要です。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Ti storageClassName: azure-netapp-files
kubectl apply
コマンドを使用して永続ボリューム要求を作成します。kubectl apply -f anf-pvc.yaml
コマンドの出力は、次の例のようになります。
persistentvolumeclaim/anf-pvc created
永続ボリューム要求に関する情報を表示するには、
kubectl get
コマンドを実行します。kubectl get pvc
コマンドの出力は、次の例のようになります。
kubectl get pvc -n trident NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc Bound pvc-bffa315d-3f44-4770-86eb-c922f567a075 1Ti RWO azure-netapp-files 62s
永続ボリュームの使用
PVC を作成すると、Astra Trident で永続ボリュームが作成されます。 Azure NetApp Files ボリュームをマウントしてアクセスするためにポッドを起動できます。
次のマニフェストを使用して、前の手順で作成した Azure NetApp Files ボリュームをマウントする NGINX ポッドを定義することができます。 この例では、ボリュームは /mnt/data
にマウントされます。
anf-nginx-pod.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。kind: Pod apiVersion: v1 metadata: name: nginx-pod spec: containers: - name: nginx image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/data" name: volume volumes: - name: volume persistentVolumeClaim: claimName: anf-pvc
kubectl apply
コマンドを使用してポッドを作成します。kubectl apply -f anf-nginx-pod.yaml
コマンドの出力は、次の例のようになります。
pod/nginx-pod created
Kubernetes によって、
/mnt/data
にあるnginx
コンテナー内に、ボリュームがマウントされてアクセス可能なポッドが作成されました。kubectl describe
コマンドを使用して、ポッドのイベント ログを調べると確認できます。kubectl describe pod nginx-pod
コマンドの出力は、次の例のようになります。
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: anf-pvc ReadOnly: false default-token-k7952: Type: Secret (a volume populated by a Secret) SecretName: default-token-k7952 Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 15s default-scheduler Successfully assigned trident/nginx-pod to brameshb-non-root-test Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-bffa315d-3f44-4770-86eb-c922f567a075" Normal Pulled 12s kubelet Container image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" already present on machine Normal Created 11s kubelet Created container nginx Normal Started 10s kubelet Started container nginx
次のステップ
Astra Trident では、Azure NetApp Files の多くの機能がサポートされています。 詳細については、次のトピックを参照してください。
Azure Kubernetes Service