SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

freee、マジ価値開発の現場から

AWSにおけるKubernetes――OSSを活用した、マイクロサービスアーキテクチャの課題を解決する取り組みとは

freee、マジ価値開発の現場から 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

「マイクロサービスにおけるRails」としてのKubernetes――それをAWSで。

 freeeでも徐々にそのような課題が見え始めてきたため、打ち手の一つとしてKubernetes on AWSの導入を進めています。

 Kubernetesは一般的に「コンテナオーケストレーション」を実現するためのシステムであり、OSSです。代表的なユースケースでは、人間が「どのような条件を満たすDockerコンテナがいくつ必要か」という意思(Declarative Specといいます)をYAMLファイルに定義し、それを渡すことでKubernetesがその意思に基づき、コンテナをよしなにデプロイします。

 仮にKubernetesが管理するサーバーが障害などによって停止した場合は、余剰リソースを使うか、足りなければサーバーを追加してコンテナを自動的に復旧します。サーバー障害の有無にかかわらず人間の「こんなコンテナがほしい」という意思は変わらないため、Kubernetesがそれを尊重するように自発的に動く、といったデザインです。

 Kubernetesと類似のシステムはRancher、DC/OS、Docker Swarm、Hashicorp Nomad、Kontena、AWS ECSなど例を挙げればキリがありません。こうしたツールのどれを採用するかは状況次第なので、正解はありません。

 freeeでKubernetesを採用した代表的な理由は以下の通りです。

  • マイクロサービスアーキテクチャの基盤が欲しかったため
  • 「kube-aws」というKubernetesクラスタをAWS上に構築するツールのメンテナーがいるため
  • AWSそのものの利用に長けたエンジニアが多数いるため
  • マイクロサービス数が増える一方であるため
  • インフラチームはなく、SREチームがあり、人力よりエンジニアリングで組織をスケールさせる方向性を持っているため
  • Kubernetes(on AWS)や周辺ツールが成熟してきたため

 いくつかピックアップして説明していきます。

注意

 ここまでKubernetes on AWSを軸とした打ち手について紹介しましたが「Kubernetes on AWSで課題が解決する」と言っていないところには注意してください。

 Kubernetes on AWSは実装詳細であり、開発・運用の自動化、という目的を達成することができれば実装は何でもいいでしょう。私は「kube-aws」というOSS(後ほど説明します)のメンテナーをしているので、そのOSSコミュニティと技術、ソフトウェアについては愛情がありますが、それを企業で採用することの是非は全く別問題です。

マイクロサービスアーキテクチャの基盤

 私はKubenetesのことをよく「マイクロサービスアーキテクチャのためのRails」と説明しています。

 Kubernetesの特徴は、多くの機能にしっかりデザインされたAPIでアクセスでき、主要なプログラミング言語向けのライブラリが公式にメンテナンスされていることです。

 Railsの利点の一つはフレームワークによってアプリケーションを構造化し再利用可能にできること、と書きました。同じことがKubernetesにもいえます。Kubernetesはありとあらゆる機能をAPIで提供し、そのAPIを使うと「Kubernetes上で動く(分散)システム」を(少なくともフルスクラッチよりは楽に)実装することができます。結果的に、KubernetesのAPIで実現できるタスクはちょっとしたスクリプトによって自動化できます。これは、まさにわれわれがRailsでWebアプリケーションを実装することによって得られていた恩恵のマイクロサービス版です。

 また、マイクロサービスを開発・運用する課題が多岐にわたることも前述の通りですが、KubernetesはAPIを中心にさまざまな機能を追加・拡張できるため、そうした課題を少ない手数で解決することができます。

 例えば、分散ロギングのためにはFluentdやtd-agentをKubernetesへデプロイすることで、Kubernetes上で起動したコンテナのすべてのログをFluentdで集約する方法が確立されています。Fluentdにロックインされているわけではなく、Elasticsearchで著名なElastic Stackに含まれるFilebeatといったログエージェントを利用することも可能です。

 分散トレーシングのためには、DatadogやNew Relicのような著名なSaaSのほか、ZipkinやJaegerといったOSSを組み込む手段も確立されています。

 このように、KubernetesはHerokuのようなPaaSではなく、あくまでよくデザインされたAPIを軸としたフレームワークです。フレームワーク上でどのようなマイクロサービスプラットフォームを実装するか、われわれが選ぶことができるのが、Kubernetesの特徴といえます。

 freeeでKubernetesを利用する目的の一つは、自社にとって必要十分なPaaSをできるだけ現実的な工数でつくりたいからです。freeeでは、増え続けるマイクロサービスの運用を楽にしていくために、アプリケーション開発者ができるだけビジネスに直結する開発に集中できるような環境づくりを進めています。それを中長期的に見て低コストで行うための手段が自動化であり、それを突き詰めた先には、例えばHerokuのような汎用的で多機能なPaaSほどではないにしろ、freeeにとって必要十分なPaaSがある、と考えています。

次のページ
Kubernetes (on AWS)や周辺ツールの成熟

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
freee、マジ価値開発の現場から連載記事一覧

もっと読む

この記事の著者

九岡 佑介(freee株式会社)(クオカ ユウスケ)

 freee株式会社 プロダクト基盤本部 SRE, OSS Developer MO/MMO 廃人、自然言語処理、エクセラー……とジョブチェンジを重ねていたら、いつの間にかここに。現在は freeeのSRE、ChatWorkの技術顧問、kube-awsのメンテナーという3足のわらじを履いて、世界中に...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10817 2018/05/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング