第2章. コンテナの作成と実行
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Kubernetesは、分散アプリケーションを作成、デプロイ、管理するためのプラットフォームだ。これらのアプリケーションにはさまざまな形やサイズがあるが、最終的にはすべて、個々のマシン上で実行される1つ以上のプログラミングで構成されている。これらのプログラムは入力を受け付け、データを操作し、結果を返す。分散システムの構築を検討する前に、まず、これらのプログラムを含むアプリケーションコンテナ・イメージをどのように構築し、分散システムの断片を構成するかを検討しなければならない。
アプリケーション・プログラムは通常、言語ランタイム、ライブラリ、ソース・コードから構成される。多くの場合、アプリケーションはlibc やlibssl などの外部共有ライブラリに依存している。これらの外部ライブラリは、一般に、特定のマシンにインストールされている OS の共有コンポーネントとして出荷されている。
この共有ライブラリへの依存は、プログラマのノートPCで開発されたアプリケーションが、本番OSに展開されたときに利用できない共有ライブラリに依存している場合に問題を引き起こす。開発環境と本番環境がまったく同じバージョンのOSを共有している場合でも、開発者が本番環境にデプロイするパッケージ内に依存するアセットファイルをインクルードし忘れると、問題が発生することがある。
1台のマシン上で複数のプログラミングを実行する従来のメソッドでは、すべてのプログラムがシステム上で同じバージョンの共有ライブラリを共有する必要がある。異なるプログラムが異なるチームや組織によって開発されている場合、このような共有依存関係は、これらのチーム間に不必要な複雑さとカップリングを追加する。
プログラミングがうまく実行できるのは、実行すべきマシンに確実にデプロイできる場合だけだ。デプロイ技術の現状では、命令型のスクリプトを実行することが多いが、このスクリプトには、どうしても曲がりくねった複雑な失敗ケースがある。このため、分散システムの全部または一部の新バージョンをロールアウトする作業は、労働集約的で困難な作業となる。
第1章では、不変性のあるイメージとインフラの価値を強く主張した。この不変性こそ、コンテナ・イメージが提供するものである。 これから説明するように、コンテナ・イメージは、依存関係の管理とカプセル化に関するすべての問題を簡単に解決する。
アプリケーションを扱うとき、他の人と簡単に共有できるようにパッケージ化しておくと便利なことが多い。Dockerはコンテナ用のデフォルト・ツールであり、実行ファイルを簡単にパッケージ化し、リモート・レジストリにプッシュすることができる。本稿執筆時点では、コンテナレジストリは主要なパブリッククラウドのすべてで利用可能で、クラウド上でイメージを構築するサービスも多くのクラウドで利用できる。また、オープンソースや商用システムを使って独自のレジストリを運営することもできる。これらのレジストリによって、ユーザはプライベート・イメージを簡単に管理・デプロイできるようになり、イメージ・ビルダー・サービスは継続的デリバリ・システムとのインテグレーションを容易にする。
この章とこの本の残りの部分では、このワークフローを実際に見せるために作った簡単なサンプル・アプリケーションを扱う。このアプリケーションはGitHubで ...