Azure Kubernetes Service (AKS) を使用した Linux NFS (Network File System) サーバーを手動で作成して使用する
コンテナー間のデータ共有はしばしば、コンテナーを基盤とするサービスやアプリケーションで必要となります。 一般的に、外部の永続ボリューム上の同じ情報にさまざまなポットでアクセスする必要があります。 Azure Files という選択肢がありますが、永続的共有ストレージのもう 1 つの形態が Azure VM 上で NFS サーバーを作成することです。
この記事では、Azure Ubuntu 仮想マシン上に NFS サーバーを作成し、この共有ファイル システムにアクセスできる AKS クラスターを永続ボリュームとして設定する方法について説明します。
開始する前に
この記事では、この構成をサポートする次の要素があることを前提としています。
- 既存の AKS クラスター。 AKS クラスターがない場合は、AKS の設計の計画に関する記事で、エンタープライズ規模の AKS の実装を設計する方法を参照してください。
- AKS クラスターは、NFS サーバーと同じまたはピアリングされた Azure 仮想ネットワーク (VNet) 上にある必要があります。 クラスターは、NFS サーバー VM と同じ VNet にできる既存の VNet 上に作成する必要があります。 既存の VNet を使用して構成する手順については、既存の VNET での AKS クラスターの作成および VNET ピアリングを使用した仮想ネットワークの接続で説明されています。
- バージョン 18.04 以降を実行している Azure Ubuntu Linux 仮想マシン。 Azure に Linux VM をデプロイするには、「Linux VM の作成と管理」を参照してください。
最初に AKS クラスターをデプロイすると、Azure Ubuntu VM をデプロイするときに Azure によって仮想ネットワーク設定が自動的に設定され、Ubuntu VM が同じ VNet に関連付けられます。 代わりにピアリングされたネットワークを使いたい場合は、上記のドキュメントを参照してください。
仮想マシンへの NFS サーバーのデプロイ
NFS サーバーを Azure Ubuntu 仮想マシンにデプロイするには、次の Bash スクリプトをコピーしてローカル コンピューターに保存します。 変数 AKS_SUBNET の値を AKS クラスターの正しい値に置き換えます。そうでない場合は、指定された既定値により、すべてのポートと接続に対して NFS サーバーが開きます。 この記事では、ファイルの名前を
nfs-server-setup.sh
と指定します。#!/bin/bash # This script should be executed on Linux Ubuntu Virtual Machine EXPORT_DIRECTORY=${1:-/export/data} DATA_DIRECTORY=${2:-/data} AKS_SUBNET=${3:-*} echo "Updating packages" apt-get -y update echo "Installing NFS kernel server" apt-get -y install nfs-kernel-server echo "Making data directory ${DATA_DIRECTORY}" mkdir -p ${DATA_DIRECTORY} echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}" mkdir -p ${EXPORT_DIRECTORY} echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}" mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY} echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory" chmod 777 ${EXPORT_DIRECTORY} parentdir="$(dirname "$EXPORT_DIRECTORY")" echo "Giving 777 permissions to parent: ${parentdir} directory" chmod 777 $parentdir echo "Appending bound directories into fstab" echo "${DATA_DIRECTORY} ${EXPORT_DIRECTORY} none bind 0 0" >> /etc/fstab echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file" echo "/export ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports echo "/export localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports nohup service nfs-kernel-server restart
スクリプトによって NFS サーバーの再起動が開始され、その後、AKS クラスターから NFS サーバーへの接続を続行できます。
Linux VM を作成した後、次のコマンドを使用して、前の手順で作成したファイルをローカル コンピューターから VM にコピーします。
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
ファイルがコピーされたら、VM への Secure Shell (SSH) 接続を開き、次のコマンドを実行します。
sudo ./nfs-server-setup.sh
アクセス却下エラーで実行できなかった場合、次のコマンドを実行して、すべての実行アクセス許可を設定します。
chmod +x ~/nfs-server-setup.sh
AKS クラスターを NFS サーバーに接続する
AKS クラスターから NFS サーバーに接続するには、永続ボリュームと、ボリュームへのアクセス方法を指定する永続ボリューム要求をプロビジョニングします。 同じ仮想ネットワークまたはピアリングされた仮想ネットワーク内の 2 つのリソースを接続する必要があります。 同じ VNet にクラスターを設定する方法については、「既存の VNet での AKS クラスターの作成」を参照してください。
同じ仮想 VNet またはピアリングされた VNet 上に両方のリソースを配置したら、AKS クラスターで永続ボリュームと永続ボリューム要求をプロビジョニングします。 その後、コンテナーでは、NFS ドライブをそのローカル ディレクトリにマウントできます。
pv-azurefilesnfs.yaml という名前の YAML マニフェストを作成して PersistentVolume を指定します。 次に例を示します。
apiVersion: v1 kind: PersistentVolume metadata: name: NFS_NAME labels: type: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: NFS_INTERNAL_IP path: NFS_EXPORT_FILE_PATH
NFS_INTERNAL_IP、NFS_NAME、NFS_EXPORT_FILE_PATHの値を、NFS サーバーの実際の設定に置き換えます。
pvc-azurefilesnfs.yaml という名前の YAML マニフェストを作成して、PersistentVolume を使用する PersistentVolumeClaim を指定します。 次に例を示します。
重要
storageClassName 値は空の文字列にする必要があります。空ではないと、要求は機能しません。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: NFS_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1Gi selector: matchLabels: type: nfs
NFS_NAMEの値を NFS サーバーの実際の設定に置き換えます。
トラブルシューティング
AKS クラスターからサーバーに接続できない場合は、エクスポートされたディレクトリまたはその親に NFS サーバー VM にアクセスするための十分なアクセス許可がないことが問題である可能性があります。
エクスポート ディレクトリとその親ディレクトリの両方にアクセス許可 777 が付与されていることを確認してください。
次のコマンドを実行することでアクセス許可を確認できます。ディレクトリに 'drwxrwxrwx' というアクセス許可が与えられている必要があります。
ls -l
次のステップ
- 関連するベスト プラクティスについては、AKS のストレージとバックアップに関するベスト プラクティスに関する記事を参照してください。
- NFS サーバーのセットアップの詳細、または問題のデバッグについては、Ubuntu コミュニティのチュートリアルから次の NFS チュートリアル を参照してください
Azure Kubernetes Service