Azure Kubernetes Service で Azure NetApp Files の SMB ボリュームをプロビジョニングする
[アーティクル] 2024/08/02
7 人の共同作成者
フィードバック
この記事の内容
SMB ボリュームを使用するアプリケーション向けに静的に構成する
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) を使用したボリュームがサポートされています。
このセクションでは、Azure NetApp Files で SMB ボリュームを作成し、コンテナー化されたアプリケーションが使用できるようにボリュームを Kubernetes に静的に公開する方法について説明します。
後で使用するために、いくつかの変数を定義します。 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
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
このセクションでは、Astra Trident を使用して、Azure NetApp Filesで SMB ボリュームを動的に作成し、コンテナー化された Windows アプリケーションに自動的にマウントする方法について説明します。
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: 00001111-aaaa-2222-bbbb-3333cccc4444
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: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
tenantID: aaaabbbb-0000-cccc-1111-dddd2222eeee
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) とは、ユーザーがストレージを要求することです。 永続ボリューム要求を作成すると、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 の多くの機能がサポートされています。 詳細については、次のトピックを参照してください。