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