世界各地の企業で、複雑なアプリケーションのデプロイや管理にかかる負担を和らげるため、コンテナ テクノロジーを導入する動きが進んでいます。 コンテナとは、必要なすべての依存関係を 1 つのパッケージにグループ化するテクノロジーです。 持ち運び可能で高速かつセキュアであり、スケーラブルで管理しやすいことから、従来の仮想マシンをしのぐ高い人気を集めています。 しかし、コンテナをスケーリングするには、複数のコンテナを管理するためのフレームワークであるコンテナ オーケストレーション ツールが必要になります。

現在、主力のコンテナ オーケストレーション プラットフォームは、Docker SwarmKubernetes です。 それぞれにメリットとデメリットがあり、適した用途も異なります。 この記事では、これら 2 つのコンテナ オーケストレーション ツールを比較し、みなさまの組織にどちらが合っているのかを解説します。

Docker Swarm とは?

Docker Swarm は、Docker が開発および管理しているオープンソースのコンテナ オーケストレーション ツールです。 複数の Docker インスタンスを単一の仮想ホストにまとめる役割を果たします。 一般的な Docker Swarm クラスタは次の 3 要素で構成されます。

  1. ノード
  2. サービスとタスク
  3. ロード バランサー

ノードとは Docker エンジンの個々のインスタンスを指します。クラスタを制御し、サービスとタスクの実行に使用するコンテナを管理します。 Docker Swarm クラスタには、ノード間のリクエストをルーティングするロード バランシング機能も含まれています。

Docker Swarm のメリット

Docker Swam は、特にコンテナ オーケストレーション初心者にとっては、インストールが簡単です。 軽量で使いやすく、 他の複雑なオーケストレーション ツールよりも短時間で習得できます。 Docker コンテナ内の負荷分散が自動で行われるというメリットもあります。Docker Swarm 以外のコンテナ オーケストレーション ツールでは、手動で対応しなければなりません。

Docker Swarm は Docker CLI に対応しているため、ツール独自の新しい CLI をインストールしたり覚えたりする手間もありません。 さらに、Docker Compose などの既存の Docker ツールともシームレスに連携します。

Docker 内で既にシステムを実行しているのであれば、構成を変えることなく Docker Swarm の使用を始められます。

Docker Swarm のデメリット

上述のようにメリットの多い Docker Swarm ですが、使用の際に注意が必要な点もいくつかあります。

まず、Docker Swarm は軽量かつ Docker API に依存しているため、Kubernetes と比較すると機能が限定的です。 さらに、Docker Swarm の自動化機能には、Kubernetes ほどの堅牢性はありません。

Kubernetes

Kubernetes は、Google が自社のコンテナを管理するために開発したオープンソースのコンテナ アプリケーション プラットフォームです。 Kubernetes のクラスタ構成は Docker Swarm よりも複雑です。 1 つのビルダー ノードと複数のワーカー ノードで構成されるアーキテクチャが一般的であり、これがさらに Pod、名前空間、構成マップなどに分割されています。

Kubernetes のメリット

Kubernetes は、以下のように、堅牢なコンテナ オーケストレーション ツールが必要なチームに適したさまざまなメリットを備えています。

  • Google がサポートする大規模なオープンソース コミュニティを利用できる
  • あらゆるオペレーティング システムに対応している
  • 大規模なアーキテクチャや複雑なワークロードを維持、管理できる
  • 自動化機能が組み込まれており、自動スケーリングに対応した自己修復機能も備えている
  • 組み込みのモニタリング機能やさまざまな連携機能を備えている
  • 3 大クラウド プロバイダー (Google、Azure、AWS) 全社が対応サービスを展開している

Kubernetes は幅広いコミュニティによるサポートと、非常に複雑なデプロイ シナリオにも対応できる機能を備えているため、マイクロサービスベースのアプリケーションを管理するほとんどの大企業の開発チームにとって最適な選択肢です。

Kubernetes のデメリット

Kubernetes の機能は包括的ですが、次のような欠点があります。

  • インストール プロセスが複雑で、習得に時間がかかる
  • 個別の CLI ツールをインストールし、それぞれについて学ぶ必要がある
  • Docker Swarm から Kubernetes への移行は複雑で、対応しきれない場合もある

状況によっては、Kubernetes は複雑すぎて生産性の低下につながるケースもあります。

Docker Swarm と Kubernetes: 類似点と相違点

ここまでは、各プラットフォームが抱えるメリットとデメリットについて、大まかに説明してきました。 次は、それぞれの主な相違点と類似点について分析してみましょう。 Docker Swarm と Kubernetes を、セットアップの手間、アプリケーション デプロイ機能、可用性とスケーラビリティ、モニタリング機能、セキュリティ、負荷分散の観点で比較します。

インストール、構成、習得

Docker Swarm は Kubernetes に比べてインストールが簡単であり、通常は OS 全体でインスタンスの一貫性が維持されます。 クラスタの構成も、Docker Swarm の方が Kubernetes よりも簡単です。 また、Docker Swarm は Kubernetes よりも覚えやすく、既存の CLI に対応しています。

Kubernetes は Docker Swarm と比較してインストールが複雑であり、手作業も必要になります。 インストール手順は OS ごとに異なる場合があります。 習得が困難で、個別の CLI ツールを使用します。

アプリケーションのデプロイ

Docker Swarm アプリケーションは、YAML ファイルや Docker Compose を使用してサービスまたはマイクロサービスとしてデプロイできます。

Kubernetes では、名前空間、Pod、デプロイなどを組み合わせてさまざまな形でデプロイできます。

可用性とスケーラビリティ

Docker Swarm では、Docker Swarm 内でマイクロサービスを手早く複製して高可用性を実現できます。 さらに、Kubernetes に比べて短時間でデプロイを完了できます。 その一方で、Docker Swarm は自動スケーリング機能を備えていません。

Kubernetes は元から可用性が高く、障害耐性と自己修復機能を備えています。 自動スケーリング機能も備えており、Pod で障害が生じても必要に応じて交換できます。

モニタリング

Docker Swarm は、サードパーティ製アプリケーションによるモニタリングにのみ対応しており、 組み込みのモニタリング機能は備えていません。

一方、Kubernetes にはモニタリング機能が組み込まれており、サードパーティ製アプリケーションとの連携も可能です。

セキュリティ

セキュリティやアクセス制御に関するタスクについて、Docker Swarm の選択肢は Transport Layer Security (TLS) のみです。

Kubernetes は、RBAC、SSL/TLS、シークレット管理、ポリシーなど、複数のセキュリティ プロトコルに対応しています。

負荷分散

Docker Swarm は自動ロード バランシングに対応しており、DNS を内蔵しています。

Kubernetes は自動ロード バランシング機能を備えていません。 ただし、クラスタ内の各サービスに対して、Nginx Ingress をロード バランサーとして活用できます。

第 3 の選択肢: K3s

結論として、両プラットフォームの一番の違いは、Docker Swarm が軽量で初心者にも使いやすいのに対して、Kubernetes は大型で複雑であることです。 中間的なツールをお探しであれば、新しいプラットフォームの K3s も検討候補に加えることをお勧めします。 K3s は、Kubernetes から複雑性を排除した軽量で使いやすいツールです。

K3s は、Kubernetes API を丸ごと実装した小さいバイナリです。 不要なパッケージを省くことで軽量化に成功しており、 機能はサードパーティ製のアドオンで簡単に追加できます。 軽量で使いやすく、Cloud Native Computing Foundation (CNCF) から認定を受けています。

Docker Swarm を導入済みで、Kubernetes への切り替えに迷っているなら、K3s がおすすめです。 K3s は今後、大型で扱いづらい Kubernetes に代わる理想的なツールとなるかもしれません。

どちらのプラットフォームを選ぶべき?

Kubernetes と Docker Swarm は、それぞれに適したユースケースがあります。 どちらが最適であるかは、みなさんの組織のニーズによります。

初心者の観点で見れば、Docker Swarm は大規模なコンテナを管理できる、シンプルで使いやすいツールです。 コンテナ環境への移行途中で、まだ複雑なワークロードを管理する必要がない場合、Docker Swarm がベストです。

開発しているアプリケーションが複雑で、モニタリング機能やセキュリティ機能、自己修復機能、高可用性、傑出した柔軟性などを備えた包括的なパッケージが必要な場合は、Kubernetes が最適です。

Kubernetes のすべての機能を必要としているものの、覚えづらさから躊躇しているのなら、K3s が選択肢となります。

まとめ

この記事では、コンテナ業界の 2 大オーケストレーション ツールである Kubernetes と Docker Swarm について解説しました。 Docker Swarm は、軽量で使いやすいオーケストレーション ツールですが、Kubernetes と比べると機能が限定的です。 一方、Kubernetes は複雑ですが強力な機能を備え、自動修復機能や自動スケーリング機能が組み込まれています。 習得の手間なく Kubernetes ならではのメリットを手に入れたいなら、CNCF による認定を受けた軽量版 Kubernetes である K3s が最適な選択肢となるでしょう。

どのオーケストレーション ツールが適しているかは、みなさんのビジネス ニーズ次第です。 チームの目標や経験を慎重に検討して、どのツールを選ぶか判断してください。 Docker Swarm、Kubernetes、K3s のどれを選んだとしても、コンテナ化されたアプリケーションのスケーリングや管理が行いやすくなることは、間違いありません。

関連記事