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

こんにちは、サイオステクノロジー技術部 武井です。今年最後の日に書くブログでは、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^)

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です