概要
Kubernetesで利用するPersistent Volumeを簡易的に作りたかったので、秒でNFSサーバーを構築した。
関連記事
- 【KubernetesのPersistentVolume】その1- 外部ストレージをPodにmountする
- 【KubernetesのPersistentVolume】その2- Dynamic Provisionerを使ってNFSサーバーをPodにmountする
環境
- CentOS 7.6
- nfs-utils-1.3.0-0.61
NFSサーバーのインストール
NFSにするサーバーで以下を実行
接続許可設定は環境にあったものに変更してください。
nfs-installer.sh
#!/bin/bash
sudo yum install -y rpcbind nfs-utils
# mountするディレクトリ
sudo mkdir -p /var/share/nfs
# 共有ディレクトリを設定
EXPORTS_FILE='/etc/exports'
# 接続許可設定
DEFINITION='/var/share/nfs 192.168.249.0/24(rw)'
sudo cat ${EXPORTS_FILE} | grep -w "${DEFINITION}" > /dev/null 2>&1
if [ $? = 1 ]; then
sudo echo "${DEFINITION}" >> ${EXPORTS_FILE}
sudo exportfs -ra
sudo exportfs -v
else
echo 'Alreday defined.'
fi
# Domain の行にドメイン名を指定します。ここで指定したドメイン名は NFSv4 が内部的に使用します
# Domainはサーバ・クライアントで共通であればなんでもいいようです
IDMAPD_FILE='/etc/idmapd.conf'
ORIGINAL='#Domain = local\.domain\.edu'
REPLACED='Domain = local\.domain\.edu'
sudo sed -i -e "s/${ORIGINAL}/${REPLACED}/g" ${IDMAPD_FILE}
# 起動
sudo systemctl start rpcbind
sudo systemctl start nfs-server
sudo systemctl start nfs-lock
sudo systemctl start nfs-idmap
sudo systemctl enable nfs-server
# firewalld
sudo firewall-cmd --permanent --zone=public --add-service=nfs
sudo firewall-cmd --reload
実行
$ chmod u+x nfs-installer.sh
$ sudo ./nfs-installer.sh
Clientでの作業
mountする側のサーバーで実行。こちらでもrpcbind nfs-utilsが必要。
client.sh
#!/bin/bash
NFS_SERVER='NFSサーバーのIPアドレス'
REMOTE_VOLUME='/var/share/nfs'
LOCAL_VOLUME='/mnt/nfs'
sudo yum install rpcbind nfs-utils -y
# mountする
sudo mount -t nfs ${NFS_SERVER}:${REMOTE_VOLUME} ${LOCAL_VOLUME}
実行
$ chmod u+x client.sh
$ sudo ./client.sh
mountされたか確認
NFSサーバー
$ sudo touch /var/share/nfs/sample.txt
Clientサーバー
$ ls /mnt/nfs
sample.txt
unmount
client側で実行
$ sudo umount /mnt/nfs
root権限でNFSのmount先に書き込みができない
/etc/exportsにno_root_squashを付ける。
/etc/exports
/var/share/nfs 192.168,1.0/24(rw,no_root_squash)
NFSでは、デフォルトでroot権限でのmount先の領域に書き込みができないようになっている。
mount先のroot権限を持っていなくても、リモートからroot権限での書き込みができてしまうことがセキュリティ上よくないからだ。
no_root_squashを付与することで、root権限での書き込みが可能となる。
参考:https://okwave.jp/qa/q6145679.html