Azure Kubernetes Serviceでの共有ストレージ(Azure Files編)

◆ 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で利用できる共有ストレージの中で、Azure Filesを試してみました。

AKSで利用できる共有ストレージ

公式マニュアルでは、Azure Kubernetes Serviceで利用できる共有ストレージは以下の3つがあります。

  • Azure Files
  • 仮想マシンに立てたNFSサーバー
  • Azure Netapp Files

今回はAzure Filesを試してみることにします。

Azure Filesとは?

Azureで利用できるマネージドなファイルサーバーであり、SMBプロトコルを介して通信できます。なので、Windowsからでも簡単にマウント出来て非常に便利です。マネージドなので、仮想マシンにsambaサーバー立てたときのように、面倒くさい管理も不要です(*´▽`*)

AKSからAzure Filesを使ってみる

KubernetesはAKSに限らずPodは基本的にステートレスであるべきなので、データを永続化したい場合は何らかの手段を考える必要があります。その一つが、今回利用するAzure Filesになります。ほぼほぼ、公式のマニュアルどおりでOKでした。設定はマジで簡単でした。

まずストレージクラスを作成します。AKSに固有な設定は2つあります。一つは、provisionerにkubernetes.io/azure-fileを指定します。これはAzure Filesのストレージを表すリソースです。もう一つはparameter.skuNameです。Azure FilesにはStandardとPremiumの2つのプランがあり、前者はStandard_LRS、後者はPremium_LRSと指定します。LRSの部分はストレージのレプリケーション方式を表しており、この場合はローカル冗長を表します。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azurefile
provisioner: kubernetes.io/azure-file
reclaimPolicy: Retain
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=www-data
  - gid=www-data
  - mfsymlinks
  - nobrl
  - noperm
parameters:
  skuName: Premium_LRS

 

次にPersistentVolumeClaimのマニフェストを以下のように作成します。100Gのストレージを要求する例です。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azurefiles-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: azurefile
  resources:
    requests:
      storage: 100Gi

 

これをPodからマウントするための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: azurefiles-vlm
            # マウントしたいパスを指定します。
            mountPath: /var/www/html
      volumes:
      - name: azurefiles-vlm
        persistentVolumeClaim:
          # 先ほど作成したpersistentVolumeClaimのmetadata.nameを指定します。
          claimName: azurefiles-pvc

 

上記のマニフェストを実行すると、/var/www/html以下にAzure Filesのストレージがマウントされます。非常に簡単ですね。

まとめと注意

非常に簡単で便利なAzure Filesですが、一個ハマったところがあります。WordpressをAzure Kubernetes Serviceに移行する際、wp-contentというディレクトリをAzure Filesにマウントしました。このディレクトリは、ブログにアップロードした画像やプラグインのPHPファイル、テーマのCSSやJava Script、HTMLファイルが格納されているのですが、この設定をしたら、Wordpressが激遅になりました。

WordPressは実行するたびに大量のプラグインのPHPをrequireするのですが、Azure Filesではどうやらおそらく細かいたくさんのファイルを読み込むのが遅いようです。大きい単一のファイル(画像や動画)なら、そこそこのスピードが出ていました。もしくは先のWordpressはLinux上で動作していたのですが、LinuxとSMBプロトコルの相性が悪いのかもしれません。

なので、このAzure Filesをやめて、冒頭にご紹介した「仮想マシンに立てたNFSサーバー」に変えてみたら、激速くなりました。なので、まぁ、原因はAzure Filesにあることは間違いなさそうです。

ということで上記のようなこともありますが、やっぱりAzure Filesは便利ですので、適材適所でどんどん使ってみたいと思います(^o^)

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

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

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


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



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

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる