Virtual Azure Community Day 日本語トラックで「Azure Kubernetes Services活用事例」を解説
2020年7月28日に開催されたVirtual Azure Community Day。コミュニティに参加するAzureエキスパートが最新技術を解説する日本語トラックでは、サイオステクノロジーのシニアアーキテクトの1人、武井宜行(たけい のりゆき)がウェビナーに登壇しました。
テクノロジー2020年8月 7日
2つのブログサイトをKubernetesクラスターに移行
サイオステクノロジーが運用している技術系ブログには、技術情報全般を扱う「SIOS Tech.lab 」(https://tech-lab.sios.jp/)と、Microsoft Azureの話題に特化した「OSS on Azure」(https://azure.sios.jp/)がある。これらは従来、別々の仮想マシン(以下、VM)上で稼働していた。
これらを統合すれば重複したインフラ投資や運用負荷の軽減が見込まれる。そこで、2つのブログを、「Azure Kubernetes Services」(以下、AKS)を用いて構築したKubernetes(クーバネティス)*1クラスター上に移行することにした。
〔参考情報〕新システムの全体像はこちら → SIOS Tech.lab ブログ記事(武井執筆)
AKSは、オープンソースのコンテナオーケストレーションツールであるKubernetesをフルマネージド化して提供するMicrosoft Azureのサービス。マスターサーバーやNode(ノード)*2サーバーの構築を不要とするサーバーレス環境の実現により、DevOps*3といわれる開発および運用フェーズの連携の円滑化を可能にする。
今回、武井は、2つのブログを支える各種機能を、KubernetesのPod(ポッド)*4と呼ばれる複数のコンテナアプリケーションや機能をまとめたものを利用して再構成した。
「まず、AKS上で、WordPressのフロントエンド用(ブログページ)とバックエンド用(管理画面)でノードを分けました。前者は主に静的HTML参照を処理し、後者はブログ記事の編集・発行など比較的負荷の高い処理を担います。各ノードにはSIOS Tech.labとOSS on Azureそれぞれの処理を行うPodが稼働しています」(武井)
各ノードへの振り分けはNGINX IngressのPodが実行している。
Kubernetes移行後の全体イメージを説明する武井宜行(たけい のりゆき)
結果的に、月額35,000円程度で稼働するシステムに統合できたが、WordPressをKubernetesで本格的に運用した事例はあまりなく、稼働開始まで多くの試行錯誤を重ねた。
例えば、WordPressの画像やプラグインを格納するストレージは、VM上に立てたNFS Server(NFS Server on VM)だが、当初選んでいたのはマネージドなファイルサーバーAzure Filesであった。
「ただAzure Filesではページ読み込み時のレスポンスがなぜかとても遅くなりました。NFS Serverに変えたところレスポンスが劇的に改善したのです。一方、その頃、東日本リージョンで使用可能になった、マネージドなストレージサービスであるAzure NetApp Filesも試して良好なレスポンスを得たのですが、こちらはコストが折り合わず断念しました。Azure NetApp Filesを用いれば、システムは文字通り"フルマネージド"な環境になります」(武井)
他にも武井は、ストレージにマウントする際に毎回WordPressのいくつかのプラグインやPHPファイルを上書きしてしまう事象を回避する工夫、またKubernetesのRollingUpdate(無停止更新)を円滑に行えるように、プロセスを停止するシグナルの送信タイミングをずらすマニフェスト(リソースを管理するファイル)の記述例、さらにDBのヘルスチェックを行う自作スクリプトなど、構築の勘所を紹介した。
「どんなサービスでも実際に使ってみないとわからないことが多く、今回もその意味で多くの収穫がありました」と手応えを語った。
さて技術ブログサイトを2019年8月にリニューアルしてから間もなく1年が経つ。
「この間、新しいサービスも続々と発表されています。今ならフルマネージド、サーバーレスなクラウド環境でコンテナを実行できるACI(Azure Container Instances)へのリプレースも可能でしょう。Azure Blob Storageにも興味があります」と武井。ウェビナーを通じて、さらなる技術の探求に意欲を見せた。
*1 Kubernetes(クーバネティス):Linux コンテナの操作を自動化するオープンソース・プラットフォームのこと。
*2 Node(ノード):Kubernetesクラスター上のコンテナが動作する物理サーバーもしくは仮想サーバーをあらわす。
*3 DevOps:開発者と運用者が相互に協力して新機能の円滑なリリース、システムの安定運用を実現し、最終的には顧客の利益の最大化を目指すという開発手法のこと。
*4 Pod(ポッド):Kubernetesの中でDockerコンテナを管理するための最小単位で、Podは複数のコンテナの集合体をあらわす。