Azure Blob StorageをRocky LinuxからNFSでマウント

Azure,Others,RockyLinux/CentOS,Storage(Files,Blob),Virtual Machine

Azure Blob StorageのコンテナーをLinuxの仮想マシン(Azure VM)からNFSマウントする手順の紹介です。
ストレージアカウント作成時のNFS設定から、AZNFS Mount Helperのインストール、Rocky Linuxでのマウントやfstabの設定まで、一連の手順を確認しています。
Azure上に作成したRocky Linuxの仮想マシンを利用して確認しています。

※本記事内ではAzure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※ストレージアカウントはStandard 汎用 v2 アカウントを利用しています。
※Rocky LinuxはRocky Linux release 9.5 (Blue Onyx)を利用しています。
※手順の確認はrootユーザーで実施しています。環境に合わせてsudoコマンド利用してください。

スポンサーリンク

Azure Blob StorageのNFS有効化からコンテナー作成まで

Azure Blob StorageではNFSがサポートされている

Azure Blob StorageはNFS(3.0)をサポートしています。
Standard 汎用 v2 アカウント、Premium ブロック BLOB アカウントのストレージアカウントで利用できます。

Azure Blob Storage でのネットワーク ファイル システム (NFS) 3.0 プロトコル サポート

Azure Files(PremiumのNFSファイル共有)でもNFS(4.1)をサポートしています。
設定手順についてはこちらで紹介しています。

Geo冗長が利用できないなどの制約事項がある

NFSを有効化した場合、ストレージアカウントのGeo冗長がサポートされないなどの制約があります。

Azure Blob Storage でのネットワーク ファイル システム (NFS) 3.0 プロトコルのサポートに関する既知の問題

また、NFSを一度有効化すると無効化できないといった制約もあります。
そのほかにも、Blobのスナップショットやオブジェクトレプリケーションが使用できないなどの制約もあります。

Azure ストレージ アカウントにおける Blob Storage 機能のサポート

ストレージアカウントの設定値

今回利用したストレージアカウントの設定値です。
仮想マシンからストレージアカウントへのアクセスは、サービスエンドポイント経由としています。

  • 基本
区分 項目 設定値
インスタンス
の詳細
ストレージ アカウント名 stnfsteststandard01
場所 Japan East
プライマリ サービス Azure Blob Storage または Azure Data Lake Storage Gen 2
パフォーマンス Standard
冗長性 LRS(ローカル冗長ストレージ)
  • 詳細
区分 項目 設定値
セキュリティ REST API 操作の安全な転送を必須にする 無効(チェックを外す)
階層型名前空間 階層型名前空間を有効にする 有効(チェックを入れる)
アクセス プロトコル ネットワーク ファイル システム v3 を有効にする 有効(チェックを入れる)

※Azure Blob StorageでNFSを利用する場合は、階層型名前空間を有効にする必要があります。

NFS 3.0 と階層型名前空間

  • ネットワーク
区分 項目 設定値
ネットワーク接続 ネットワーク アクセス 選択した仮想ネットワークとIPアドレスからのパブリックアクセスを有効にする
仮想ネットワーク 仮想ネットワーク test-vnet-01
サブネット vm-subnet-01
(仮想マシンのサブネット)

※サービスエンドポイント経由で、仮想マシンからBlobコンテナーへアクセスします。
※ネットワーク設定については公式サイトの注意書きを併せて参照します。

ネットワークのセキュリティ

  • データ保護
区分 項目 設定値
復旧 BLOB の論理的な削除を有効にする 無効(チェックを外す)
コンテナーの論理的な削除を有効にする 無効(チェックを外す)
ファイル共有の論理的な削除を有効にする 無効(チェックを外す)

※手順確認用の設定です。利用用途に合わせて設定します。

コンテナーの設定値

検証用に作成した、Blob コンテナーの設定値です。

区分 項目 設定値
基本 名前 nfs-share-02
ルートスカッシュ ルートスカッシュなし

NFSを有効化したストレージアカウントを作成

公式サイトの手順を確認しながら、Azure Blob StorageでNFSを有効化した、ストレージアカウントを作成します。

ネットワーク ファイル システム (NFS) 3.0 プロトコルを使用して Blob Storage をマウントする

※既存のストレージアカウントのNFSを有効化する事はできません。

ストレージアカウントを作成

ストレージアカウントで作成を選択します。

ストレージアカウントを作成(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

基本タブです。
ストレージアカウント名、リージョンを設定します。
プライマリサービスはAzure Blob Storage または Azure Data Lake Storage Gen 2を選択します。
パフォーマンスはStandard、冗長性はローカル冗長ストレージ(LRS)を選択します。

ストレージアカウントの基本設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

詳細タブです。
REST API操作の安全な転送を必須にするチェックを外して無効化します。
階層型名前空間を有効にするにチェックを入れて有効化します。
ネットワークファイルシステムv3を有効にするにチェックを入れて有効化します。

 

ストレージアカウントの詳細設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)
ストレージアカウントの詳細設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

ネットワークタブです。
選択した仮想ネットワークとIPアドレスからのパブリックアクセスを有効にするを選択します。
仮想ネットワークとサブネットを選択します。

ストレージアカウントのネットワーク設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

データ保護のタブです。
BLOB、コンテナー、ファイル共有の論理的な削除のチェックを外し、無効化します。

※論理的削除の設定とNFSの利用とは関係ありません。検証に必要ないので無効化しています。

ストレージアカウントのデータ保護設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

暗号化タブです。
変更せずにそのまま次に進みます。

ストレージアカウントの暗号化設定画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

内容を確認し、問題がなければ作成を選択します。

ストレージアカウントの確認と作成画面(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

作成したストレージアカウントです。
NFS v3が有効化されているのが確認できます。

ストレージアカウントでNFS v3の有効化を確認(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

コンテナーを作成

仮想マシンからマウントする、コンテナーを作成します。

コンテナーを作成

ストレージアカウントでコンテナーを選択します。
新しいコンテナーで名前、ルートスカッシュを設定します。
作成を選択します。

ストレージアカウントで新しいコンテナーを作成(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

作成したコンテナーが表示されています。

作成したコンテナー(Azure Blob StorageのコンテナーをRocky LinuxからNFSマウント)

—広告—

Rocky LinuxからAzure FilesのNFSファイル共有をマウント

公式サイトの手順を参考に確認を進めています。

ネットワーク ファイル システム (NFS) 3.0 プロトコルを使用して Blob Storage をマウントする

AZNFS Mount Helperをインストール

Azure Blob NFS エンドポイントのIPが変わる場合があります。
新規にマウントする場合には問題がないのですが、既存のマウントは古いIPに再試行して接続します。
AZNFS Mount Helperを利用してこの問題を解決する事ができます。

AZNFS Mount Helper

iptablesのDNAT機能を使用して、正しいBlob NFSエンドポイントのIPにマッピングしてくれます。

# AZNFS Mount Helperをインストール
[root@test-vm-01 ~]# wget -O – -q https://github.com/Azure/AZNFS-mount/releases/
Retrieving distro info from /etc/os-release…

~(中略)~

******************************
Do not uninstall AZNFS while you have active aznfs mounts!
Doing so may lead to broken AZNFS package with unmet dependencies.
If you want to uninstall AZNFS make sure you unmount all aznfs mounts.
******************************

~(中略)~

インストール済み:
aznfs-2.0.10-1.x86_64 bind-libs-32:9.16.23-24.el9_5.x86_64 bind-license-32:9.16.23-24.el9_5.noarch
bind-utils-32:9.16.23-24.el9_5.x86_64 conntrack-tools-1.4.7-2.el9.x86_64 fstrm-0.6.1-3.el9.x86_64
libnetfilter_cthelper-1.0.0-22.el9.x86_64 libnetfilter_cttimeout-1.0.0-19.el9.x86_64 libnetfilter_queue-1.0.5-1.el9.x86_64
libuv-1:1.42.0-2.el9_4.x86_64 nmap-ncat-3:7.92-3.el9.x86_64 protobuf-c-1.3.3-13.el9.x86_64

完了しました!
Version 2.0.10 of aznfs mount helper is successfully installed 

Rocky LinuxからコンテナーをNFSでマウント

Rocky LinuxからコンテナーをNFSでマウントします。
mountコマンドで確認しています。
aznfsとnfsの2パターンでマウントした場合を比較しています。
aznfsを利用した場合は、IPアドレスで表示されていることが確認できます。

# NFSサーバを利用するためにnfs-utilsをインストール
[roo@test-vm-01 ~]# dnf -y install nfs-utils

# マウントポイントを作成
[roo@test-vm-01 ~]# mkdir -p /mount/nfs02

# マウントコマンドを実行(aznfsを指定した場合)
[root@test-vm-01 ~]# mount -t aznfs stnfsteststandard01.blob.core.windows.net:/stnfsteststandard01/nfs-share-02 /mount/nfs02 -o sec=sys,vers=3,nolock,proto=tcp
[root@test-vm-01 ~]# df -h | grep nfs02
10.xxx.xxx.xxx:/stnfsteststandard01/nfs-share-02 5.0P 0 5.0P 0% /mount/nfs02

# マウントコマンドを実行(nfsを指定した場合)
[root@test-vm-01 ~]#
mount -t nfs stnfsteststandard01.blob.core.windows.net:/stnfsteststandard01/nfs-share-02 /mount/nfs02 -o sec=sys,vers=3,nolock,proto=tcp
[root@test-vm-01 ~]# df -h | grep nfs02
stnfsteststandard01.blob.core.windows.net:/stnfsteststandard01/nfs-share-02 5.0P 0 5.0P 0% /mount/nfs02

NFSでマウントしたコンテナーにファイル書き込み

NFSでマウントしたコンテナーにディレクトリを作成し、ファイルを書き込んで確認します。

# ディレクトリ作成やファイル作成を確認
[root@test-vm-01 ~]# cd /mount/nfs02/
[root@test-vm-01 nfs02]# mkdir nfstest
[root@test-vm-01 nfs02]# cd nfstest/
[root@test-vm-01 nfstest]# echo “nfs test" >> nfstestfile
[root@test-vm-01 nfstest]# cat nfstestfile
nfs test
[root@test-vm-01 nfstest]# ls -l
合計 1
-rw-r–r–. 1 root root 9 12月 15 17:02 nfstestfile

/etc/fstabにコンテナーをNFSマウントするエントリーを追加

OSを再起動した場合も、再マウントするようにfstabに設定を追加します。

手順 6: コンテナーをマウントする

echoコマンドを利用して、fstabファイルにエントリーを追加しています。
ファイルシステムのタイプにはaznfsを設定しています。
マウントに失敗しても起動できるように、マウントオプションにnofailを設定しています。

# fstabに書き込み
[root@test-vm-01 ~]# echo “stnfsteststandard01.blob.core.windows.net:/stnfsteststandard01/nfs-share-02 /mount/nfs02 aznfs defaults,sec=sys,vers=3,nolock,proto=tcp,nofail,_netdev 0 0" >> /etc/fstab

# fstabを確認
[root@test-vm-01 ~]#
 cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Nov 13 15:54:40 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/’.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload’ to update systemd
# units generated from this file.
#
/dev/mapper/rocky-root / xfs defaults 0 0
UUID=xxxxxxxx-xxxx-xxxxxxxx-xxxxxxxx /boot xfs defaults 0 0
UUID=XXXX-XXXX /boot/efi vfat defaults,uid=0,gid=0,umask=077,shortname=winnt 0 2
/dev/disk/cloud/azure_resource-part1 /mnt auto defaults,nofail,x-systemd.requires=cloud-init.service,_netdev,comment=cloudconfig 0 2
stnfsteststandard01.blob.core.windows.net:/stnfsteststandard01/nfs-share-02 /mount/nfs02 aznfs defaults,sec=sys,vers=3,nolock,proto=tcp,nofail,_netdev 0 0

# OSを再起動
[root@test-vm-01 ~]# reboot

[root@test-vm-01 ~]# df -h |grep nfs02
10.xxx.xxx.xxx:/stnfsteststandard01/nfs-share-02 5.0P 0 5.0P 0% /mount/nfs02

—広告—

最後に

Rocky Linuxをから、Azure Blob StorageのコンテナーをNFSでマウントする手順について確認してみました。
制約事項はありますが、NFSサーバーを立てる事なく利用できるのは便利かと思います。

引き続き色々試してみたいと思います。

Azure Blob StorageでのBLOBのバックアップリストや、オブジェクトレプリケーションの手順についてはこちらで紹介しています。
なお、NFSを有効化した場合には利用できません。

スポンサーリンク