イベント

ヤフーのサービス開発を支える社内“Kubernetes as a Service”

Yahoo! JAPAN Tech Conference 2019レポート

 ヤフー株式会社(Yahoo! JAPAN)の技術カンファレンス「Yahoo! JAPAN Tech Conference 2019」が、1月26日に東京ミッドタウンホールで開催された。

 セッション「Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~100以上のクラスタを少人数で運用する秘訣~」では、サービス開発を支える社内KaaS(Kubernetes as a Service)を解説。

 KaaSを作った側である、ゼットラボ株式会社の稲津和磨氏と、Yahoo! JAPAN側であるヤフー株式会社 プラットフォーム開発本部の勝田広樹氏が、それぞれの立場から語った。なお、ゼットラボはヤフー株式会社の100%子会社で、インフラ基盤の開発および技術研究をしている。

開発外作業を減らすためにKaaSを構築

 最初に勝田氏が、Yahoo! JAPANでKaaSが求められた背景を説明した。

 Yahoo! JAPANでは、開発・生産性の向上を考えるうえで、開発外作業をいかに減らすかが課題となっていた。開発外作業には、リリース・脆弱性対応や、スケーリング、障害対応、監視・可視化などが含まれる。この問題を解決する方法を検討して、ゼットラボに相談したという。

ヤフー株式会社 プラットフォーム開発本部の勝田広樹氏
開発外作業をいかに減らすかが課題

 それを受けて、ゼットラボ側の対応を稲津氏が解説した。同社では開発に集中できるようにするために、「12 Factor App」に代表されるクラウドネイティブなアプリケーションの作り方と、そのためのマイクロサービス構成を考えた。

 これを実現するのが、コンテナ技術と、コンテナオーケストレーション基盤のKubernetesだ。Kubernetesにより、複数のサーバーからなるクラスタで指定したコンテナを起動すると、障害などでノードがダウンしても必要数のコンテナ実行を自動的に維持してくれ、負荷に合わせてコンテナ数を水平スケールすることもできる。

ゼットラボ株式会社の稲津和磨氏
クラウドネイティブなアプリケーションの作り方
マイクロサービス
Kubernetesによりクラスタでコンテナを起動して管理する

 ただし、Kubernetesそのものの管理は必要になる。障害を起こしたマシン自体の復旧やKubernetes自身のアップグレード、多数のクラスタの管理などだ。

 そこでKaaSを開発することによって、サービス側でKubernetesを管理する必要をなくした。

 例えば、クラスタを作成するときには、KaaSがOpenStackを呼び出して必要な数のサーバーを用意して構成してくれる。クラスタを構成するノードに障害があったときも、OpenStackから代替ノードを用意して対応する。

 Kubernetes自身のアップグレードも、新バージョンのノードを新たに追加し、旧バージョンのノードからコンテナを移していくことで、無停止で行えるという。

 KaaSではそのほか、マシンの監視やログ収集など共通に必要になるものをアドオンとしまとめ、アプリケーションのひな型にプリインストールしていることも紹介された。

Kubernetes自身の管理が必要
KaaS(Kubernetes as a Service)を構築
KaaSではOpenStackによってノードを管理し、クラスタ作成や自動復旧、アップグレードに対応する
マシンの監視やログ収集などをアドオンとして共通化してプリインストール

アプリケーションチームには開発メンバーだけでよい

 KaaSの利用については、再び勝田氏が解説した。

 KaaSで動くアプリケーションのリリースは、クラスタ作成、アプリケーション開発、デプロイの3段階からなる。このうち、クラスタ作成は1コマンドでできる。

 アプリケーションを作成するときは、コンテナイメージのDockerfileも用意する。そして社内のGitHubにプッシュすると、CI/CDツールのScrewdriver.cd(米Yahoo!開発)が自動でアプリケーションとコンテナイメージをビルドし、Dockerレジストリに登録される。そのほか、デプロイ用のKubernetesマニフェストも用意する。

 ここまでできれば、デプロイもkubectlコマンドの1つで実行できる。このように、クラスタ作成とデプロイがそれぞれ1コマンドで済むため、アプリケーション開発チームは開発作業そのものに注力できるわけだ。

 アプリケーションの安定した稼働のための仕組みとしては、Kubernetesのダッシュボードでの可視化や、システムのGrafanaによる可視化、Sprunkへのログ収集などがデフォルトで組み込まれている。また、スケール変更や脆弱性対応のためのKubernetesのアップデートも、1コマンドでできるようになっている。

アプリケーションのリリースまでの流れ
クラスタ作成は1コマンドで
開発したアプリケーションはCI/CDツールで自動的にコンテナイメージに
デプロイも1コマンドで

 KaaSの利用は1年前から急増。現在、利用サービス数が50以上で、クラスタ数が200以上だという。

 アプリケーション側のチームもKaaSによる変化があった。最も変わったのは少人数チームでも持続可能になったこと。運用がKaaSの管理チームに集約され、アプリケーション側では基本的に開発メンバーだけいればよいようになった。なお、そのKaaSの管理チームも10人程度だという。

 最後に勝田氏は、KaaSの今後の展望も語った。まずは、コマンドを使わなくても管理画面を操作できるようにすること。また、機械学習などの高性能大規模クラスタに対応して、使えるシーンを増やすこと。そして、データを中に持つようなステートフルなアプリケーションに対応することが語られた。

KaaSの利用は、50サービス以上、200クラスタ以上に
アプリケーション側では基本的に開発メンバーだけいればよいように
KaaS管理チームも10人程度
KaaSの今後