KubernetesとDocker:コンテナとオーケストレーションを理解する

ソフトウェア開発の最新のトレンドに追いついている場合、間違いなく何度も遭遇する2つの用語があります。DockerとKubernetesです。これらは、基本的にコンテナー と オーケストレーションの省略形です 。

Dockerコンテナーは、アプリケーションを開発とテストを経て本番環境に移行するプロセスを合理化するのに役立ちました。一方、DockerとKubernetesはどちらも、アプリケーションの構築とデプロイの方法を、モノリシックスタックではなくマイクロサービスのコレクションとして再発明するのに役立ちました。

DockerとKubernetesが重要なのはなぜですか、ソフトウェア開発をどのように変えているのか、そしてその過程でそれぞれがどのような役割を果たしているのでしょうか。以下の質問にお答えします。

Dockerとコンテナー

Linux、Windows、およびその他の最新のオペレーティングシステムでサポートされているコンテナを使用すると、システムの他の部分から分離された自己完結型のミニ環境でソフトウェアを実行できます。コンテナはVMに例えられていますが、VMではありません。コンテナははるかにスリムで、開始と停止が速く、柔軟性と移植性がはるかに高くなっています。コンテナーは数秒でスピンアップまたはスピンダウンしたり、スケールインまたはスケールアウトしたりできるため、クラウドなどの弾力性のある環境でアプリを実行しやすくなります。 

Linuxやその他のオペレーティングシステムは、コンテナ化されたアプリを長年サポートしてきましたが、コンテナの操作は必ずしもユーザーフレンドリーではありませんでした。Dockerは、オープンソースと商用の両方の形で、コンテナーをユーザーフレンドリーで開発者フレンドリーな商品にするソフトウェアです。Dockerは、コンテナーに共通のツールとメタファーのセットを提供するため、アプリをコンテナーイメージにパッケージ化して、自分の組織や他の場所で簡単にデプロイして再利用できます。

つまり、Dockerを使用すると、コンテナーイメージを簡単に作成、バージョン管理、共有、移動し、実行中のコンテナーとしてDocker互換ホストにデプロイできます。

Dockerとコンテナーはいつ使用しますか?

Dockerとコンテナーは、次の1つ以上の品質が必要なワークロードを処理する場合に最適です。

  • 弾力性のあるスケーラビリティ。 需要を満たすために実行する必要のあるアプリのインスタンスの数がわかりません。コンテナー化されたアプリまたはサービスは、コンテナーのインスタンスをより少なくまたはより多く展開することで、需要を満たすようにスケールアウトできます。
  • 隔離。 アプリが他のアプリに干渉しないようにします。APIのさまざまなリビジョンを満たすために、アプリの複数のバージョンを並べて実行する場合があります。または、基盤となるシステムをクリーンに保ちたい場合もあります(常に良い考えです)。
  • 移植性。 このアプリはさまざまな環境で実行する必要があり、各セットアップを再現可能にする必要があります。コンテナーを使用すると、アプリケーションのランタイム環境全体をパッケージ化できるため、Docker互換ホスト(開発者デスクトップ、QAテストマシン、ローカルアイアン、リモートクラウド)が見つかった場所であればどこにでもアプリを簡単にデプロイできます。

Dockerとコンテナーの詳細

  • Dockerとは何ですか?コンテナ革命の火花
  • Dockerとコンテナーを使用する理由
  • Dockerを使い始める
  • Docker forQAの隠れたメリット
  • Dockerをより良くする12のオープンソースツール
  • その他のDockerニュース、分析、ハウツー、レビュー、アドバイス

Kubernetesとコンテナオーケストレーション

コンテナは、主にプロセスまたはアプリケーションを相互に、および基盤となるシステムから分離するように設計されています。個々のコンテナの作成と展開は簡単です。しかし、複数のコンテナー(データベース、Webフロントエンド、計算バックエンドなど)を、デプロイ、接続、管理、これらの各コンテナを個別にスケーリングしますか? すべてのパーツを機能的な全体にオーケストレーションする方法が必要 です。

それがKubernetesの仕事です。コンテナがクルーズの乗客である場合、Kubernetesがクルーズディレクターになります。

Googleで作成されたプロジェクトに基づくKubernetesは、各コンテナを直接管理することなく、複数のホストにわたるマルチコンテナアプリケーションのデプロイと管理を自動化する方法を提供します。開発者は、各コンテナーがネットワークとストレージをどのように使用するかなどの詳細を含め、複数のコンテナーにわたるアプリケーションのレイアウトについて説明します。 Kubernetesは実行時に残りを処理します。また、シークレットやアプリ構成などの厄介な詳細の管理も処理します。

Kubernetesを適切に使用するには、ある程度の専門知識が必要ですが、以前よりもはるかにターンキーソリューションになります。使いやすさの進歩の一部は、一般的なアプリケーション(ヘルムチャート)ですぐに利用できるレシピによるものです。一部は、人気のあるアプリケーションスタックや開発フレームワークと連携して動作する有名ブランド企業(Red Hat、Canonical、Docker)によって作成された豊富なKubernetesディストリビューションによるものです。

Kubernetesとコンテナオーケストレーションはいつ使用しますか?

少数のユーザーにサービスを提供する単純なコンテナ化されたアプリは、通常、Kubernetesはもちろん、オーケストレーションを必要としません。しかし、アプリに些細なレベルの機能や些細な数のユーザーがいる場合、オーケストレーションシステムによって提供される車輪の再発明をしないことは難しくなります。オーケストレーションがいつ画像に入るのかを決定するためのいくつかの経験則があります。

  • アプリは複雑です。 3つ以上のコンテナを含むアプリケーションは、おそらく法案に適合します。とはいえ、少数のユーザーにのみサービスを提供する控えめなアプリは、KubernetesではなくDockerスウォームモードなどのより最小限のソリューションを介して調整される可能性があります。
  • アプリには、スケーリングと復元力に対する高い要求があります。 Kubernetesやその他のオーケストレーターを使用すると、条件の変化に対する反応を手動でコーディングする代わりに、システムの望ましい状態を記述することで、負荷のバランスを取り、コンテナーをスピンアップして需要に宣言的に対応できます。
  • 最新のCI / CD技術を最大限に活用したいと考えています。 オーケストレーションシステムは、ブルー/グリーンデプロイメントまたはローリングアップグレードを使用するアプリのデプロイメントパターンをサポートします。

DockerとKubernetesがさらに親しみやすい抽象化によって覆い隠され、コンテナーを作成および管理するためのよりエレガントな方法に取って代わられる日が来るかもしれません。ただし、今のところ、DockerとKubernetesは知って理解することが重要です。

Kubernetesとオーケストレーションの詳細

  • Kubernetesとは何ですか?次のアプリケーションプラットフォーム
  • Kubernetesを使用する必要がある4つの理由
  • コンテナ革命をリードする10のKubernetesディストリビューション
  • マネージドKubernetes:AWS vs. Azure vs. Google Cloud
  • こんにちはMicroK8s:よりシンプルなKubernetes
  • Kubernetesの新機能
  • その他のKubernetesニュース、ハウツー、レビュー、アドバイス、分析