このドキュメントでは、KubernetesクラスタのコンポーネントとしてNFS (Network File System) サーバーをセットアップする手順について解説します。NFSは、ネットワーク経由でファイルシステムを共有するためのプロトコルであり、Kubernetesでは永続ボリュームのストレージバックエンドとして利用されます。セキュリティ上の理由から、NFSは信頼できる内部ネットワークでの利用が推奨されます。
環境準備
以下の3台のUbuntu 22.04マシンを使用します。ubuntu-server をNFSサーバーとして、残りの2台をクライアントとして設定します。
| IPアドレス | ホスト名 |
|---|---|
| 10.53.207.10 | ubuntu-server |
| 10.53.207.11 | ubuntu-client1 |
| 10.53.207.12 | ubuntu-client2 |
NFSサーバーの設定
NFSサーバーパッケージのインストール
NFSサーバーのカーネルモジュールをインストールします。
sudo apt update
sudo apt install nfs-kernel-server -y
NFSバージョン確認
NFSのサポートバージョンを確認します。
cat /proc/fs/nfsd/versions
共有ディレクトリの作成
NFSで共有するディレクトリを作成します。ここでは、NFSv4用のデータディレクトリと、バッキングストア用のディレクトリ、そしてNFS共有のルートディレクトリを作成します。
sudo mkdir -p /srv/nfs4/data
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /nfs_share
sudo chmod 777 -R /nfs_share
fstabの設定
/etc/fstab ファイルを編集し、NFS共有ディレクトリをローカルパスにバインドマウントします。これにより、NFSサーバー上の指定ディレクトリが、Kubernetesの永続ボリュームとして利用可能になります。
# /etc/fstab
/nfs_share /srv/nfs4/data none bind 0 0
設定後、以下のコマンドでマウントします。
sudo mount -a
エクスポート設定 (/etc/exports)
/etc/exports ファイルを編集して、NFS共有ディレクトリとアクセス権限を設定します。ここでは、/nfs_share ディレクトリを共有します。
全クライアントへの読み書き許可 (非推奨、テスト用):
/nfs_share *(rw,sync,no_subtree_check,no_root_squash,insecure)
特定のクライアントへのアクセス制御:
# ubuntu-client1 には読み書き権限、ubuntu-client2 には読み取り専用権限
/nfs_share 10.53.207.11(rw,sync,no_subtree_check) 10.53.207.12(ro,sync,no_subtree_check)
エクスポートオプションの説明:
rw: クライアントに読み書きアクセス権を付与します。sync: 変更がディスクに書き込まれるまで応答を待機します。データの永続性は向上しますが、パフォーマンスは低下します。no_subtree_check: サブツリーチェックを無効にします。ファイルがリネームされた場合などに発生する問題を回避するため、通常はこのオプションを有効にします。no_root_squash: クライアントのrootユーザーからのリクエストを、サーバー上のrootユーザーとして処理します。デフォルトではroot権限は制限されますが、このオプションで解除します。セキュリティリスクを伴うため、注意が必要です。insecure: 非セキュアなポートからの接続を許可します (通常は使用しません)。
NFSサービスの再起動と有効化
設定を反映させるためにNFSサービスを再起動し、システム起動時に自動起動するように設定します。
sudo exportfs -rv
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
NFSクライアントの設定
NFSクライアントパッケージのインストール
NFSクライアントに必要なパッケージをインストールします。
sudo apt update
sudo apt install nfs-common -y
NFS共有の確認とマウント
NFSサーバー上の共有リストを確認し、クライアントマシンにマウントします。
共有リストの確認:
ubuntu-server のIPアドレスと共有ディレクトリを指定して、NFSサーバーからエクスポートされているファイルシステムを確認します。
showmount -e ubuntu-server
NFS共有のマウント:
クライアントマシン上のマウントポイントを作成し、NFS共有をマウントします。
# マウントポイントの作成
sudo mkdir -p /mnt/nfs_share
# NFS共有のマウント (ubuntu-server の /nfs_share を /mnt/nfs_share にマウント)
sudo mount -t nfs ubuntu-server:/nfs_share /mnt/nfs_share
マウント後、df -h コマンドなどで正しくマウントされているか確認できます。