いよいよコンテナ技術で本番運用する時代へ―そのとき開発者に求められる力とは

コンテナ技術でデプロイの問題が大幅に解消

この数年、Web業界を中心にコンテナ(コンテナ仮想化)という技術が注目されています。その背景を説明しましょう。

一般的にアプリケーションは、言語ランタイムやライブラリなどに依存します。そのため、マシンにインストールされている共有ライブラリやコマンドラインツールのバージョンが、アプリケーションが依存しているバージョンと違っていると、正しく実行できない恐れがあります。

コンテナ技術を使うと、アプリケーションの実行に必要な言語ランタイム、ライブラリ、ソフトウェアなどをコンテナイメージという1つのバイナリのような塊にまとめられます。コンテナイメージにはアプリケーションが依存するすべてが含まれているため、どんな環境でも同じように実行できるのです。これまでデプロイの際によく起こっていた「開発環境では正常に実行できたのに、本番環境ではうまく実行できなかった」という環境の違いによる問題は起きにくくなります。

本番環境でコンテナを使うために必要なこと

コンテナ技術により再現性の高いデプロイが可能になるならば、本番環境へのデプロイもコンテナイメージで実施したい。本番環境のアプリケーションもコンテナイメージで実行したい。そんなニーズが出てくるのは当然でしょう。しかし、いざコンテナで本番サービスを運用しようとすると、いろいろな課題があることに気がつきます。たとえば、次のものが挙げられます。

  • 設定ファイルや環境変数とアプリケーションの分離
  • アプリケーションの安全な更新
  • アプリケーションの耐障害性の向上(冗長化、自動回復)
  • 負荷に応じたアプリケーションのスケーリング
  • アプリケーションのセキュリティの確保
  • ログやメトリクスの監視

このような課題を解決するのが、コンテナオーケストレーションツール「Kubernetes(クーバネティス⁠⁠」です。Kubernetesの登場でコンテナでの運用が現実味を帯びてきました。この数年でWebサービスの構成はがらりと様変わりするかもしれません。

Kubernetesはマイクロサービス時代のエンジニアの必須知識

コンテナやKubernetesは、マイクロサービスを実現するのにも適した技術です。マイクロサービスとは、複数の小さなサービスを組み合わせて1つのアプリケーションを実装する開発手法のことです。開発やデプロイを個別に行え、変化に迅速に対応できます。各サービスの担当チームは少ない人数で編成され、サービスの開発から運用までを同じエンジニアが責任を持って担当するということもあり得ます。

Kubernetesは、仮想マシンやロードバランサ、永続ストレージなどのITインフラを抽象化したAPIオブジェクトを持ち、開発者自身がこのAPIオブジェクトを利用してサービスを構成することができます。マイクロサービスのように、少数チームで開発から運用まで行うといったことも可能になるでしょう。Kubernetesでは、マニフェストと呼ばれる設定ファイルを記述することでサービスを構成します。マイクロサービスに携わるエンジニアには、このマニフェストを使って適切にサービスを構成できる能力が求められるでしょう。

Kubernetes実践入門は、本番運用に耐えうるコンテナ(アプリケーション)の作り方や、サービスの構成の仕方を解説しています。これから必須になる知識、今から学んでおいて損はありません。