Azure Kubernetes Service で Azure NetApp Files の SMB ボリュームをプロビジョニングする
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) を使用したボリュームがサポートされています。
- この記事では、SMB ボリュームを静的または動的にプロビジョニングする方法の詳細を説明します。
- NFS ボリュームを静的または動的にプロビジョニングする方法については、「Azure Kubernetes Service 用の Azure NetApp Files の NFS ボリュームをプロビジョニングする」を参照してください。
- デュアル プロトコル ボリュームを静的または動的にプロビジョニングする方法については、「Azure Kubernetes Service 用の Azure NetApp Files の デュアル プロトコル ボリュームをプロビジョニングする」を参照してください。
SMB ボリュームを使用するアプリケーション向けに静的に構成する
このセクションでは、Azure NetApp Files で SMB ボリュームを作成し、コンテナー化されたアプリケーションが使用できるようにボリュームを Kubernetes に静的に公開する方法について説明します。
SMB ボリュームを作成する
後で使用するために、いくつかの変数を定義します。 myresourcegroup、mylocation、myaccountname、mypool1、premium、myfilepath、myvolsize、myvolname、virtnetid を環境に適した値に置き換えます。 ファイルパスは、すべての 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
コマンドを使用してボリュームを作成します。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 CIFS
ドメイン資格情報でシークレットを作成する
kubectl create secret
コマンドを使用して、アクティブ ディレクトリ (AD) サーバーにアクセスするためのシークレットを AKS クラスターに作成します。 このシークレットは、Azure NetApp Files の SMB ボリュームにアクセスするために Kubernetes の永続ボリュームによって使用されます。USERNAME
をユーザー名に置き換え、PASSWORD
をパスワードに置き換え、DOMAIN_NAME
を AD のドメイン名に置き換え、次のコマンドを使用してシークレットを作成します。kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
シークレットが作成されていることを確認します。
kubectl get secret NAME TYPE DATA AGE smbcreds Opaque 2 20h
SMB CSI ドライバーのインストール
Kubernetes SMB PersistentVolume
を作成するには、コンテナー ストレージ インターフェイス (CSI) ドライバーをインストールする必要があります。
Helm を使用して、クラスターに SMB CSI ドライバーをインストールします。
windows.enabled
オプションは必ずtrue
に設定してください。helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.13.0 --set windows.enabled=true
SMB CSI ドライバーをインストールする他の方法については、「Kubernetes クラスターに SMB CSI ドライバーのマスター バージョンをインストールする」を参照してください。
kubectl get pods
コマンドを使用して、csi-smb
コントローラー ポッドが実行されていて、各ワーカー ノードでポッドが実行されていることを確認します。kubectl get pods -n kube-system | grep csi-smb csi-smb-controller-68df7b4758-xf2m9 3/3 Running 0 3m46s csi-smb-node-s6clj 3/3 Running 0 3m47s csi-smb-node-win-tfxvk 3/3 Running 0 3m47s
永続ボリューム要求を作成する
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": "myvolname", ... "mountTargets": [ { ... " "smbServerFqdn": "ANF-1be3.contoso.com", ... } ], ... }
pv-smb.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 必要に応じて、myvolname
をcreationToken
に置き換え、ANF-1be3.contoso.com\myvolname
を前の手順のsmbServerFqdn
値に置き換えます。 AD 資格情報のシークレットおよび、前の手順で作成したシークレットが配置されている名前空間を必ず含めるようにしてください。apiVersion: v1 kind: PersistentVolume metadata: name: anf-pv-smb spec: storageClassName: "" capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain mountOptions: - dir_mode=0777 - file_mode=0777 - vers=3.0 csi: driver: smb.csi.k8s.io readOnly: false volumeHandle: myvolname # make sure it's a unique name in the cluster volumeAttributes: source: \\ANF-1be3.contoso.com\myvolname nodeStageSecretRef: name: smbcreds namespace: default
kubectl apply
コマンドを使用して永続ボリュームを作成します。kubectl apply -f pv-smb.yaml
kubectl describe
コマンドを使用して、永続ボリュームが使用可能な状態であることを確認します。kubectl describe pv pv-smb
永続ボリューム要求の作成
pvc-smb.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany volumeName: anf-pv-smb storageClassName: "" resources: requests: storage: 100Gi
kubectl apply
コマンドを使用して永続ボリューム要求を作成します。kubectl apply -f pvc-smb.yaml
kubectl describe コマンドを使用して、永続ボリューム要求のステータスが Bound であることを確認します。
kubectl describe pvc pvc-smb
ポッドを使ったマウント
iis-smb.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。 このファイルは、ボリュームを パス/inetpub/wwwroot
にマウントするインターネット インフォメーション サービス ポッドを作成するために使用されます。apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: web spec: nodeSelector: "kubernetes.io/os": windows volumes: - name: smb persistentVolumeClaim: claimName: anf-pvc-smb containers: - name: web image: mcr.microsoft.com/windows/servercore/iis:windowsservercore resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 volumeMounts: - name: smb mountPath: "/inetpub/wwwroot" readOnly: false
kubectl apply コマンドを使用してポッドを作成します。
kubectl apply -f iis-smb.yaml
kubectl describe コマンドを使用して、ポッドが実行中であり、
/inetpub/wwwroot
が SMB からマウントされていることを確認します。kubectl describe pod iis-pod
コマンドの出力は、次の例のようになります。
Name: iis-pod Namespace: default Priority: 0 Node: akswin000001/10.225.5.246 Start Time: Fri, 05 May 2023 09:34:41 -0400 Labels: app=web Annotations: <none> Status: Running IP: 10.225.5.248 IPs: IP: 10.225.5.248 Containers: web: Container ID: containerd://39a1659b6a2b6db298df630237b2b7d959d1b1722edc81ce9b1bc7f06237850c Image: mcr.microsoft.com/windows/servercore/iis:windowsservercore Image ID: mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 05 May 2023 09:34:55 -0400 Ready: True Restart Count: 0 Limits: cpu: 1 memory: 800M Requests: cpu: 1 memory: 800M Environment: <none> Mounts: /inetpub/wwwroot from smb (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mbnv8 (ro) ...
kubectl exec コマンドでポッドに接続し、ボリュームがポッドにマウントされていることを確認し、次に正しいディレクトリで
dir
コマンドを使用して、ボリュームがマウントされていて、サイズがプロビジョニングしたボリュームのサイズと一致するかどうかを確認します。kubectl exec -it iis-pod –- cmd.exe
コマンドの出力は、次の例のようになります。
Microsoft Windows [Version 10.0.20348.1668] (c) Microsoft Corporation. All rights reserved. C:\>cd /inetpub/wwwroot C:\inetpub\wwwroot>dir Volume in drive C has no label. Volume Serial Number is 86BB-AA55 Directory of C:\inetpub\wwwroot 05/04/2023 08:15 PM <DIR> . 05/04/2023 08:15 PM <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 107,373,838,336 bytes free
SMB ボリュームを使用するアプリケーション向けに動的に構成する
このセクションでは、Astra Trident を使用して、Azure NetApp Filesで SMB ボリュームを動的に作成し、コンテナー化された Windows アプリケーションに自動的にマウントする方法について説明します。
Astra Trident のインストール
SMB ボリュームを動的にプロビジョニングするには、Astra Trident バージョン 22.10 以降をインストールする必要があります。 SMB ボリュームを動的にプロビジョニングするには、Windows ワーカー ノードが必要です。
Astra Trident は、Kubernetes 専用に開発された NetApp の動的ストレージ プロビジョナーです。 Astra Trident の業界標準である Container Storage Interface (CSI) ドライバーを使用して、Kubernetes アプリケーションのストレージの消費を簡素化します。 Astra Trident は、Kubernetes クラスターにポッドとしてデプロイされ、Kubernetes ワークロードに動的ストレージ オーケストレーション サービスを提供します。
Trident は、Trident オペレーター (手動または Helm を使用) または tridentctl
を使用してインストールできます。 これらのインストール方法とその動作の詳細については、インストール ガイドを参照してください。
Helm を使用した Astra Trident のインストール
この方法を使用して Astra Trident をインストールするには、ワークステーションに Helm をインストールする必要があります。 Astra Trident をインストールする他の方法については、Astra Trident のインストール ガイドを参照してください。 クラスターに Windows ワーカー ノードがある場合は、任意のインストール方法で Windows を有効にしてください。
Helm を使用して、Windows ワーカー ノードを持つクラスターに 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 –-set windows=true
コマンドの出力は、次の例のようになります。
NAME: trident LAST DEPLOYED: Fri May 5 14:23:05 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: true 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 74s trident-operator.netapp.io Installing Trident Normal Installed 46s trident-operator.netapp.io Trident installed
バックエンドを作成する
Azure NetApp Files のサブスクリプションおよび、ボリュームを作成する場所を Astra Trident に指示するために、バックエンドを作成する必要があります。 バックエンドの詳細については、「Azure NetApp Files のバックエンド構成オプションと例」を参照してください。
backend-secret-smb.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-smb.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。ClientID
、clientSecret
、subscriptionID
、tenantID
、location
、serviceLevel
を環境に合った適切な値に変更します。tenantID
、clientID
、clientSecret
は、Azure NetApp Files サービスに対する十分なアクセス許可を持つ Microsoft Entra ID のアプリケーション登録から取得できます。 アプリケーションの登録には、Azure で事前定義済みの Owner ロールまたは Contributor ロールが含まれます。 Azure の場所には、少なくとも 1 つの委任されたサブネットが含まれていなければなりません。serviceLevel
は、「AKS ワークロード用に Azure NetApp Files を構成する」で容量プール用に構成したserviceLevel
と一致する必要があります。apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf-smb 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 nasType: smb
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 tridentbackends -n trident
コマンドの出力は、次の例のようになります。
NAME BACKEND BACKEND UUID tbe-9shfq backend-tbc-anf-smb 09cc2d43-8197-475f-8356-da7707bae203
SMB のドメイン資格情報でシークレットを作成する
kubectl create secret
コマンドを使用して、AD サーバーにアクセスするためのシークレットを AKS クラスターに作成します。 この情報は、Azure NetApp Files の SMB ボリュームにアクセスするために Kubernetes の永続ボリュームによって使用されます。DOMAIN_NAME\USERNAME
をドメイン名とユーザー名に置き換え、PASSWORD
をパスワードに置き換えて次のコマンドを使用します。kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD"
シークレットが作成されたことを確認します。
kubectl get secret
出力は次の例のようになります。
NAME TYPE DATA AGE smbcreds Opaque 2 2h
ストレージ クラスの作成
ストレージ クラスは、保存の単位を永続ボリュームを使用して動的に作成する方法を定義します。 Azure NetApp Files ボリュームを使用するには、ストレージ クラスを作成する必要があります。
anf-storageclass-smb.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: anf-sc-smb provisioner: csi.trident.netapp.io allowVolumeExpansion: true parameters: backendType: "azure-netapp-files" trident.netapp.io/nasType: "smb" csi.storage.k8s.io/node-stage-secret-name: "smbcreds" csi.storage.k8s.io/node-stage-secret-namespace: "default"
kubectl apply
コマンドを使用して、ストレージ クラスを作成します。kubectl apply -f anf-storageclass-smb.yaml
コマンドの出力は、次の例のようになります。
storageclass/anf-sc-smb created
kubectl get
コマンドを実行して、ストレージ クラスの状態を表示します。kubectl get sc anf-sc-smb NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE anf-sc-smb csi.trident.netapp.io Delete Immediate true 13s
PVC を作成する
永続ボリューム要求 (PVC) とは、ユーザーがストレージを要求することです。 永続ボリューム要求を作成すると、Astra Trident は Azure NetApp Files ボリュームを自動的に作成し、Kubernetes ワークロードで使用できるようになります。
anf-pvc-smb.yaml
という名前のファイルを作成し、次の YAML をコピーします。 この例では、ReadWriteMany
アクセス権を持つ 100 GB のボリュームが作成され、「ストレージ クラスの作成」で作成した ストレージ クラスが使用されます。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: anf-sc-smb
kubectl apply
コマンドで永続ボリューム要求を作成します。kubectl apply -f anf-pvc-smb.yaml
コマンドの出力は、次の例のようになります。
persistentvolumeclaim/anf-pvc-smb created
永続ボリューム要求に関する情報を表示するには、
kubectl get
コマンドを実行します。kubectl get pvc
コマンドの出力は、次の例のようになります。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc-smb Bound pvc-209268f5-c175-4a23-b61b-e34faf5b6239 100Gi RWX anf-sc-smb 5m38s
Astra Trident によって作成された永続ボリュームを表示するには、次の
kubectl get
コマンドを実行します。kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-209268f5-c175-4a23-b61b-e34faf5b6239 100Gi RWX Delete Bound default/anf-pvc-smb anf-sc-smb 5m52s
永続ボリュームの使用
PVC が作成されたら、Azure NetApp Files ボリュームにアクセスするためにポッドを起動することができます。 次のマニフェストを使用して、前の手順で作成した Azure NetApp Files の SMB ボリュームをマウントする インターネット インフォメーション サービス (IIS) ポッドを定義することができます。 この例では、ボリュームは /inetpub/wwwroot
にマウントされます。
anf-iis-pod.yaml
という名前のファイルを作成し、そこに以下の YAML をコピーします。apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: web spec: nodeSelector: "kubernetes.io/os": windows volumes: - name: smb persistentVolumeClaim: claimName: anf-pvc-smb containers: - name: web image: mcr.microsoft.com/windows/servercore/iis:windowsservercore resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 volumeMounts: - name: smb mountPath: "/inetpub/wwwroot" readOnly: false
次の
kubectl apply
コマンドを使ってデプロイを作成します。kubectl apply -f anf-iis-deploy-pod.yaml
コマンドの出力は、次の例のようになります。
pod/iis-pod created
kubectl describe
コマンドを使用して、ポッドが実行中であり、SMB を介して/inetpub/wwwroot
にマウントされていることを確認します。kubectl describe pod iis-pod
コマンドの出力は、次の例のようになります。
Name: iis-pod Namespace: default Priority: 0 Node: akswin000001/10.225.5.246 Start Time: Fri, 05 May 2023 15:16:36 -0400 Labels: app=web Annotations: <none> Status: Running IP: 10.225.5.252 IPs: IP: 10.225.5.252 Containers: web: Container ID: containerd://1e4959f2b49e7ad842b0ec774488a6142ac9152ca380c7ba4d814ae739d5ed3e Image: mcr.microsoft.com/windows/servercore/iis:windowsservercore Image ID: mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 05 May 2023 15:16:44 -0400 Ready: True Restart Count: 0 Limits: cpu: 1 memory: 800M Requests: cpu: 1 memory: 800M Environment: <none> Mounts: /inetpub/wwwroot from smb (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-zznzs (ro)
kubectl exec を使用して、ボリュームがポッドにマウントされていることを確認します。 次に、適切なディレクトリで
dir
コマンドを使用して、ボリュームがマウントされ、サイズがプロビジョニングしたボリュームのサイズと一致するかどうかをチェックします。kubectl exec -it iis-pod –- cmd.exe
コマンドの出力は、次の例のようになります。
Microsoft Windows [Version 10.0.20348.1668] (c) Microsoft Corporation. All rights reserved. C:\>cd /inetpub/wwwroot C:\inetpub\wwwroot>dir Volume in drive C has no label. Volume Serial Number is 86BB-AA55 Directory of C:\inetpub\wwwroot 05/05/2023 01:38 AM <DIR> . 05/05/2023 01:38 AM <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 107,373,862,912 bytes free C:\inetpub\wwwroot>exit
次のステップ
Astra Trident では、Azure NetApp Files の多くの機能がサポートされています。 詳細については、次のトピックを参照してください。
Azure Kubernetes Service