Azure Kubernetes Service 用の Azure NetApp Files のデュアルプロトコル ボリュームをプロビジョニングする
[アーティクル] 08/02/2024
4 人の共同作成者
フィードバック
この記事の内容
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 デュアルプロトコル ボリュームを Kubernetes に静的に公開する方法について説明します。 手順は、SMB と NFS プロトコル両方に対して提供されています。 SMB 経由で Windows ワーカー ノードに、NFS 経由で Linux ワーカー ノードに同じボリュームを公開できます。
NFS の永続ボリュームを作成する
後で使用するために変数を定義します。 myresourcegroup 、myaccountname 、mypool1 、myvolname を、デュアルプロトコル ボリュームの適切な値に置換します。
RESOURCE_GROUP="myresourcegroup"
ANF_ACCOUNT_NAME="myaccountname"
POOL_NAME="mypool1"
VOLUME_NAME="myvolname"
az netappfiles volume show
コマンドを使用して、ボリュームの詳細を一覧表示します。
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 をコピーします。 サーバーが前のステップの出力 IP アドレスと一致し、パスが上記の出力 creationToken
と一致していることを確認します。 容量は、ステップ 2 のボリューム サイズと一致している必要もあります。
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
コマンドを使用して、永続ボリュームが使用可能 な状態であることを確認します。
kubectl describe pv pv-nfs
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
コマンドを使用して、永続ボリューム要求の状態 が Bound であることを確認します。
kubectl describe pvc pvc-nfs
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 コマンドを使用してポッドを作成します。
kubectl apply -f nginx-nfs.yaml
kubectl apply
コマンドを使用してポッドが 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
...
ドメイン資格情報を使用してシークレットを作成する
kubectl create secret
コマンドを使用して、AD サーバーにアクセスするためのシークレットを AKS クラスターに作成します。 このシークレットは、Azure NetApp Files の SMB ボリュームにアクセスするために Kubernetes の永続ボリュームによって使用されます。 次のコマンドを使用してシークレットを作成し、USERNAME
をユーザー名に置き換え、PASSWORD
をパスワードに置き換え、DOMAIN_NAME
を Active Directory ドメイン名に置き換えます。
kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
シークレットが作成されたことを確認するには、kubectl get
コマンドを実行します。
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.10.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
SMB の永続ボリュームを作成する
後で使用するために変数を定義します。 myresourcegroup 、myaccountname 、mypool1 、myvolname を、デュアルプロトコル ボリュームの適切な値に置換します。
RESOURCE_GROUP="myresourcegroup"
ANF_ACCOUNT_NAME="myaccountname"
POOL_NAME="mypool1"
VOLUME_NAME="myvolname"
az netappfiles volume show
コマンドを使用して、ボリュームの詳細を一覧表示します。
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 anf-pv-smb
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 anf-pvc-smb
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 の多くの機能がサポートされています。 詳細については、次のトピックを参照してください。