Azure Kubernetes Serviceでの共有ストレージ(NFS Server on VM編)

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは、サイオステクノロジー技術部 武井です。今回は、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サーバーを公開するサブネットを指定します。特に指定しなければ、全てのサブネットに対して公開されますが、絞りたい場合は、AKSのノードが配置されているサブネットを指定して下さい。
#!/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でデータを永続化したい場合は必ず何らかの共有ストレージは必須になります。今回ご紹介した方法は仮想マシン上にNFSサーバーを立てるというレガシーな方法です。実はNFSのマネージドサービスのAzure Netapp Filesというのがあるので、次はそれをご紹介します。

アバター画像
About 武井 宜行 267 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる