HEARTBEATS

こんにちは。技術開発室の與島です。

2019/01/21〜2019/01/25でMicrosoftの寺田さん(@yoshioterada)にKubernetes(AKS)/Azure DevOpsのワークショップを開催していただきました。
このワークショップでは、弊社が実際に開発とシステム運用を行うアプリケーションのインフラ環境とCI/CDパイプラインをAzure Kubernetes Service(以降AKSと記す)、Azure DevOpsなどを利用して構築しました。

本エントリではその模様についてお話したいと思います。

進め方

ワークショップは次の流れで進めていきました。

  • ゴールを決める
  • 必要なタスクを洗い出して、付箋に書いたものをホワイトボードに貼る
  • タスクに取り組む

まず、今回のワークショップのゴールは「ステージング環境のインフラ環境及びCI/CDパイプラインの構築」としました。

次にこのゴールに向けてタスクの洗い出しを行いました。これですべてではありませんが、次のようなタスクが挙がりました。

  • AKSクラスタ作成
  • Azure Database(PostgreSQL)作成
  • Redis Cache作成
  • アプリケーション(API)のデプロイ
  • アプリケーション(管理画面)のデプロイ
  • Azure DevOpsでコンテナイメージのビルド
  • モニタリング

これらの他にワークショップの途中でも、必要になったり、やりたいタスクが出てきたら随時追加していました。

実際にタスクに取り組む際には、モブプログラミング形式で行いました。
モニタに画面を映しながら、1人が実際に手を動かし(ドライバー)、他の数名(ナビゲーター)がそれを見ながら不明点を調べたりディスカッションしながら行う方式です。ドライバーはタスクごとに切り替えるようにしました。

ms-aks-azure-devops-workshop-whiteboard.jpg

成果

次のような成果を出すことができました。

  1. ステージング環境(AKS, Azure Database(PostgreSQL), Redis Cache)
  2. 環境構築用のTerraform configuration
  3. 環境構築手順(Terraform + 一部手動)
  4. CI/CDパイプライン(Azure DevOps)
  5. Azure Monitor アラーティング機能のアラートルール

1は以下の資料をもとに寺田さんの説明を受けながら、Azure上のリソース作成、Kubernetesの設定ファイルの作成とクラスタへの反映をしていって最終的にできあがったものです。
GitHub - yoshioterada/k8s-Azure-Container-Service-AKS--on-Azure - 9. AKS access to Azure Database for MySQL via VNet

当然スムーズにいかない場面(Podが起動しない、データベースに接続できない、など)も出てくるのですが、その都度デバッグやトラブルシューティングのやり方を教わりながら手を動かしていくことで徐々に理解が深まっていきました。最終的には自力でドキュメントを参照しながらKubernetesのオブジェクトを追加したり、エラーが出てもログを見たりデバッグをして解決することができました。

2、3はKubernetesのアップグレード検証用途として、1で作成したインフラ環境と同じものを簡単に作れるようにしておきたいということで作成しました。
こちらも途中思ったとおりに動かないことがあったのですが、基本的には1を作成した際に実行したAzure CLI(az)のコマンドをオプションを含めてきちんとTerraform Configurationに落とし込んでいくことで、同じ環境を作成できるようになりました。

4については弊社渡辺(@kaz_29)のブログに詳しく載っていますので、そちらをご参照ください。
http://kaz29.hatenablog.com/entry/2019/01/28/101016

5はアプリケーションの本番運用時に、どのように監視ができるかを検証した際の成果物です。
Microsoft AzureのモニタリングサービスであるAzure Monitorにはアラーティング機能があります。これが利用できそうだったため、具体的にどのような条件でアラートルールが定義できるかを確認しました。また、弊社では監視にNagiosを利用しているため、Nagiosとどのように連携できるかについての検証を行いました。
まだ検討段階ですが、Azure APIからアラートやメトリックの情報を取得して、その情報をもとにチェックを行うNagiosプラグインを作る方向で考えています。

感想とまとめ

とても楽しく、有意義な時間でした。これは単純に十分な成果が出せたこと、また、Azure + Kubernetesという技術スタックにおいて、色々と試行錯誤しながらではありますが、今後自走していくための基礎や自信がつけられたことがとても大きかったかなと感じます。
寺田さん、ありがとうございました。

ワークショップで扱ったアプリケーションは、本番運用に向けて準備を進めている段階です。今回はワークショップの取り組みについての紹介でしたが、技術的な内容についても今後お話しできるかと思いますので、また別の機会にご紹介させていただきます。