こんにちは、サイオステクノロジー技術部 武井です。今回は、Azure Kubernetes Serviceで利用できる共有ストレージの中で、Virtual Machine上にNFS Serverを立ててみるのを試してみました。
Azure Kubernetes Serviceで利用できる共有ストレージ
公式マニュアルでは、Azure Kubernetes Serviceで利用できる共有ストレージは以下の3つがあります。
- Azure Files
- Virtual Machine上に立てたNFSサーバー
- Azure Netapp Files
今回はVirtual Machine上に立てたNFSサーバーを試してみることにします。
早速実践!!
以下のマイクロソフトのサイトに記載の手順に従っています。
https://docs.microsoft.com/ja-jp/azure/aks/azure-nfs-volume
まずUbuntu Serverの仮想マシンを構築して以下のスクリプトを実行して 、NFS Serverをインストールします。 基本的に以下のコマンドを実行すると、NFS Serverが一発でインストール出来ます。引数を3つ取ります が、3つ目の引数はNFSサーバーを公開するサブネットを指定し ます。特に指定しなければ、 全てのサブネットに対して公開されますが、絞りたい場合は、AK Sのノードが配置されているサブネットを指定して下さい。
#!/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
次にPersistentVolumeを作成します。
apiVersion: v1 kind: PersistentVolumemetadata: name: nfs-pv labels: type: nfs spec: capacity: storage: 20Gi accessModes: - ReadWriteMany nfs: # 先程構築したNFSサーバーのIPアドレスを指定します。 server: 10.240.0.7 # 先のスクリプトで指定した3つ目の引数のDATA_DIRECTORYを指定します。 path: /data
次にPersistentVolumeClaimを指定します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany # storageClassNameは必ず空にします。 storageClassName: "" resources: requests: storage: 10Gi selector: matchLabels: type: nfs
最後にボリュームをマウントするためのDeploymentリソ
apiVersion: apps/v1beta1 kind: Deployment metadata: name: hoge spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: httpsd:2.4.41 ports: - containerPort: 80 # マウントするための設定です。 volumeMounts: # spec.template.sec.volumes.nameで定義した値を指定します。 - name: nfs-vlm # マウントしたいパスを指定します。 mountPath: /var/www/html volumes: - name: nfs-vlm persistentVolumeClaim: # 先ほど作成したpersistentVolumeClaimのmetadata.nameを指定します。 claimName: nfs-pvc
これで完了です。簡単ですね。
まとめ
Kuberbetesでデータを永続化したい場合は必ず何らかの