
コンテナとマイクロサービスは、エンタープライズビジネスにおいて今や寵児となっているテクノロジーです。特に、CI/CDやDevOpsソリューションを導入している企業や、競争が激化する中でよりアジャイルな対応を目指している企業にとって、これはまさに当てはまります。
コンテナ化の世界に目を向けると、KubernetesとDockerがトップに躍り出ています。これらのDevOpsツールはそれぞれ異なる方向性を辿っていますが、KubernetesとDockerはコンテナ化のトレンドの最前線であり、皆さんもどちらか、あるいは両方を既に使用している、あるいは使用中、あるいは今後使用する可能性が高いでしょう。
コンテナは企業に次のようなメリットをもたらします。
- アジャイルアプリケーション開発と展開
- CI/CD
- DevOpsソフトウェア
- 可観測性
- クラウドとOSの移植性
- アプリケーション中心の管理
- 真のリソース分離
Kubernetes と Docker のうち、あなたの会社のニーズと DevOps ワークフローを満たすのに最適な DevOps ツールはどれでしょうか? 早速見ていきましょう。
参照: 採用キット: バックエンド開発者 (TechRepublic Premium)
ジャンプ先:
- Kubernetes とは何ですか?
- Dockerとは何ですか?
- KubernetesとDockerの直接比較
- コンテナ管理
- コントローラーとノード
- 開発者ツール
- クラスター
- 永続ボリューム
- コンテナとポッド
- ネットワーキング
- 機能比較: Kubernetes vs. Docker
- KubernetesとDockerの選択
Kubernetes とは何ですか?
Kubernetesは、コンテナ化されたアプリケーションやマイクロサービスの管理、自動化、スケーリングを可能にするオープンソースのコンテナオーケストレーションプラットフォームです。Kubernetesは元々Googleによって設計され、現在はCloud Native Computing Foundationによってメンテナンスされています。
Kubernetesは、単一のコンテナではなく、大規模なコンテナ化されたデプロイメントをオーケストレーションするためのものです。Kubernetesは、データセンター内のベアメタルサーバーまたはサードパーティのクラウドプロバイダーのクラスターにデプロイでき、コントローラーと連携してクラスターに参加しているノードのリソースを管理します。クラスターは、コントローラーと1つのノード、またはコントローラーと最大5,000個のノードで構成できますが、クラスターあたり500個を超えるノードの処理には最適化されていません。
かつてKubernetesはDockerをランタイムエンジンとして使用していました。しかし現在はそうではなく、KubernetesはPodmanやcontainerdなどのランタイムエンジンをサポートしています。
Dockerとは何ですか?
Dockerは、単一のコンテナをスタンドアロンホストまたはDocker Swarmと呼ばれるクラスターにデプロイするためによく使用されます。これは、Dockerが大規模なデプロイメントに対応できないという意味ではありません。Swarmモードのおかげで、Dockerノードのクラスターをデプロイし、コンテナ化されたアプリケーションやマイクロサービスを大規模にデプロイすることが可能です。
Dockerの重要な特徴の一つは、Kubernetesに比べて学習曲線がはるかに緩やかなことです。コンテナの世界に飛び込みたい方は、まずDockerから始めて、徐々にKubernetesへと移行していくのが良いでしょう。
KubernetesとDockerの直接比較
コンテナ管理
KubernetesとDockerは、コンテナのデプロイと管理に使用されます。Kubernetesはデフォルトでノードのクラスタとして動作し、コンテナ化されたアプリケーションを必要に応じてスケールできます。Dockerはコンテナランタイムエンジンであり、単一のコンテナを単一のノードにデプロイすることも、フルスタックアプリケーションをクラスタ(Docker Swarmと呼ばれる)にデプロイすることも容易です。
Docker の主な焦点は個々のコンテナの開発、共有、実行ですが、Kubernetes は大規模なコンテナ化されたアプリケーションに重点を置いています。
コントローラーとノード
Docker ではコントローラーとノードのデプロイメントは必要ありませんが、Docker Swarm を使用する予定の場合は、コントローラーと複数のノードを使用する必要があります。
Kubernetes ではコントローラーとノードの使用が必須です。これらのコントローラーとノードは、データセンター内の既製のサーバー、または AWS、Azure、Google Cloud、Rackspace、Linode などのサードパーティのクラウドベンダーがホストするサーバーのいずれかを使用できます。
開発者ツール
KubernetesとDockerには、コンテナ化されたアプリケーションの開発に必要なすべてのツールが含まれています。どちらのDevOpsソリューションも、イメージレジストリ(Docker Hubなどでホストされているものなど)に依存し、JSON形式のマニフェストを使用して、移植可能なコンテナ化されたアプリケーションをレイアウトします。KubernetesとDockerは、開発用のコマンドラインインターフェースツールに加え、サードパーティ製のGUIツールも提供しています。
Kubernetes と Docker は、お気に入りの IDE や git などのバージョン管理システムなど、現在の開発ツールに統合できます。
クラスター
KubernetesとDockerはどちらもクラスタを利用できます。Kubernetesにはクラスタが必須であるのに対し、Docker Swarmはオプションであるという違いがあります。これはKubernetesとDockerの最大の違いでもあります。KubernetesはDockerよりもはるかに容易に、そして大規模にスケールできます。
永続ボリューム
コンテナ化されたアプリケーションをデプロイする場合、保存されたデータに依存する可能性が高くなります。幸いなことに、KubernetesとDockerは永続ボリュームを利用できます。これらのボリュームはデータをコンテナの外部に保存するため、実行中のコンテナに何か問題が発生した場合でも、データは専用の永続ボリュームに保存されます。
永続ボリュームを使用すると、コンテナ間でデータを共有することもできます。例えば、永続ボリュームを使用してMySQLコンテナをデプロイし、複数のコンテナからそのデータベースに接続することができます。
コンテナとポッド
Dockerはコンテナ(コンテナ化されたアプリケーションやマイクロサービス)をデプロイします。Kubernetesは実際にはコンテナをポッドにラップします。ポッドは、同じリソースを共有する複数のコンテナを収容できる高レベル構造です。1つのポッドにデプロイするコンテナの数が多くなりすぎないように注意が必要です。これらのコンテナは同時にスケーリングする必要があり、リソースの無駄が生じる可能性があります。
Docker はポッドでは動作しませんが、個別の相互接続されたコンテナを介してフルスタック アプリケーションをデプロイすることは可能です。
ネットワーキング
Dockerが真価を発揮する領域の一つはネットワークです。Dockerを使えばコンテナを簡単にデプロイでき、ネットワークからすぐにアクセスできるようになります。
Kubernetesはポッドを外部から分離します。そのため、クラスタ外部からコンテナ化されたアプリケーションにアクセスするには、Ingressコントローラまたはロードバランサーを追加する必要があります。
機能比較: Kubernetes vs. Docker
特徴 | Kubernetes | ドッカー |
---|---|---|
インストール | 挑戦的 | 単純 |
学習曲線 | 急な | 浅い |
スケーリング | 自動 | マニュアル |
監視 | 内蔵 | サードパーティのツールが必要 |
負荷分散 | マニュアル | 自動 |
CLIツール | 内蔵 | 内蔵 |
ランタイムエンジン | サードパーティのツールが必要 | 内蔵 |
クラスタリング | 内蔵 | クラスターモード(Docker Swarm)でデプロイする必要がある |
推奨ノードサイズ | 最大500ノード | スウォームには最大7つのマネージャーノードを推奨 |
KubernetesとDockerの選択
コンテナ化されたアプリケーションやマイクロサービスに初めて取り組むなら、Docker から始めるのが確実です。また、単一のノードまたは小規模なクラスターに単一のコンテナをデプロイするだけであれば、Docker が最適な選択肢です。一方、大規模な企業でコンテナ化されたアプリケーションを大規模にデプロイしたい場合は、Kubernetes が最適です。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。