🍣

だから私はDocker Swarmを選ぶ【vs Kubernetes】

2024/09/05に公開

はじめに

自社サービスをコンテナ化するにあたって、負荷分散のためのマルチホスト運用について考えた時、コンテナオーケストレータの概念を知りました。

オーケストレータは、たとえ個々のコンテナや時にはホストさえもがクラッシュした場合でも、コンテナ化されたワークロード同士が互いに適切に通信し、円滑に動作し続けるよう調整します。アプリケーションをコンテナ形式で提供することでシステムがコンテナベースのデプロイメントを迅速に複製し、高い可用性と回復力を得られるためです。
https://www.creationline.com/tech-blog/cloudnative/mirantis/57830

本番環境ではコンテナオーケストレータ運用は必須と考えたため、自社で運用するにあたって、ツール選定と決定の判断をどのように行ったのか、まとめます。

前提条件

  • 開発要員は一人(わたし)
  • Docker歴は1か月(知識浅)
  • 自社サービスはVPSで動かしている
  • アプリケーションのコンテナ化は終わっている
  • 判断基準は、なるべくはやく、なるべくやすく

ツール選定

元々VPS上でDockerを使っていたこともあり、公式ドキュメントを読んでいく過程でDocker Swarmからコンテナオーケストレータの概念を知りました。
が、自社で導入するにあたってDocker Swarmで本当にいいのか?ということを調べるうちに、コンテナオーケストレーションツールのデファクトスタンダートはKubernetesということを知りました(2024年現在)。

Kubernetes(K8s)とは

Kubernetesは、Googleが開発し、現在はCloud Native Computing Foundation(CNCF)が管理しているオープンソースのコンテナオーケストレーションプラットフォームです。Kubernetesは、非常に高い柔軟性と拡張性を提供し、多くのクラウドプロバイダーやオンプレミス環境と連携できるように設計されています。
https://hanlabo.co.jp/memorandum/2862/

「クバネティス」もしくは「クーベネティス」と読むらしい。

Docker Swarmとは

Docker Swarmは、Docker社が開発したコンテナオーケストレーションツールです。Dockerエンジンに組み込まれており、Docker CLIを使用して操作することができます。Docker Swarmは、シンプルで直感的なインターフェースと迅速なセットアップを提供します。
https://hanlabo.co.jp/memorandum/2862/

と、いうわけで候補をこの二つにしてどちらが自社に適しているかを考えてます。

Kubernetes vs Docker Swarm

分かりやすく〇×で表現していますが、×項目もサードパーティーアプリと連携したり、運用を工夫したりすることで〇になると考えてください。
こっちで気にしなくてもいい感じにやってくれるよ=〇、そうじゃないよ=×、という感じです。

Kubernetes Docker Swarm
学習難易度 ×
オートスケーリング[1] ×
ロードバランシング[2] ×
モニタリング ×
セキュリティ ×

だから私はDocker Swarmを選ぶ

結論、自社ではDocker Swarmで運用することにしました。

一番の理由は「現在一人で開発しており、割けるリソースが極めて少ないため、Docker Swarmのほうが学習難易度が低いから」ということです。

Kubernetesのオートスケーリング機能は魅力的ですが、新規開発のためどこまでユーザー数が伸びるかわからない(めちゃくちゃ増やしたいですが)ため、そこまで刺さらず。

モニタリングについても、現在Zabbix[3]で各VPSのメモリやCPUmの監視は行っているため、クラスタ自体の監視はできないというデメリットはあるものの、とりあえずはいいかな、と。

セキュリティは、正直悩ましいのですが…。(つい最近もあったばかりだしね[4]
Kubernetesを一から勉強する気も起きず、運用でどうにかします(根性論)。

実際にDocker Swarmを触ってみて

コンテナオーケストレータの概念自体はじめてだったので、苦戦することもあったのですが、今はコマンドにもなれて難なく使うことができています。
但し、似たコマンドが多いので(docker service, docker stack, docker stack services...)よく使うコマンドはタスクランナー[5]に登録して、思い返す作業を作らないようにしています。なおタスクランナーはTaskfileを使っています。

サービスが爆流行りしてパフォーマンスにあくせくするようになったら、Kubernetesだの、AWSだのにできたらいいな~と思っています。

参考

https://hanlabo.co.jp/memorandum/2862/
https://circleci.com/ja/blog/docker-swarm-vs-kubernetes/
https://www.portainer.io/blog/monitoring-a-swarm-cluster-with-prometheus-and-grafana

脚注
  1. オートスケールとは、サーバー負荷等のトリガーに応じて、自動的にクラウドサーバーの台数を増減させる機能のことです ↩︎

  2. ロードバランシングは、アプリケーションをサポートするリソースのプール全体でネットワークトラフィックを均等に分散させる方法 ↩︎

  3. ZabbixはITインフラストラクチャ・コンポーネントの可用性やパフォーマンスを監視するためのオープンソースのソフトウェア ↩︎

  4. 2024/07/24:Dockerエンジンの認証プラグインに脆弱性 ↩︎

  5. Web構築に必要な処理を自動で行ってくれるプログラムのことでこの変換を自動で行ってくれるツールの事 ↩︎

Discussion