はじめに
近年のアプリケーション開発では、マイクロサービスアーキテクチャを採用するケースが増えています。小さなサービスを組み合わせてシステムを構築するため、スケーラビリティや障害分離がしやすい一方で、本番環境でのデプロイや運用には複雑な仕組みが必要になります。
この記事では、Ansibleによる構成管理をベースに、Docker Swarm/Kubernetesを利用してマイクロサービスを本番運用するための方法を解説します。
マイクロサービス運用における課題
マイクロサービスを本番運用する際の代表的な課題は以下の通りです。
- サービス数が多いためデプロイ手順が複雑化
- 各サービスのスケーリングや負荷分散が必要
- ネットワーク設定やセキュリティを統一的に管理する必要がある
- サービスごとにログやモニタリングを適切に行う必要がある
これらを解決するために、構成管理ツール(Ansible)+オーケストレーションツール(Docker Swarm/Kubernetes)を組み合わせて使うのが効果的です。
Ansibleでの基盤自動化
Ansibleは「宣言的に環境構築を自動化できるツール」です。マイクロサービス運用では、まず以下のような基盤部分をAnsibleで自動化すると効率的です。
- OSパッケージのインストール(Docker / kubeadm など)
- ファイアウォールやセキュリティ設定
- ユーザーやSSH鍵の配布
- SwarmクラスタやKubernetesクラスタの初期セットアップ
サンプル:Dockerを各サーバーにインストールするPlaybook
- hosts: all
become: yes
tasks:
- name: Install required packages
apt:
name: ['apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common']
state: present
update_cache: yes
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker repository
apt_repository:
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
state: present
- name: Install Docker
apt:
name: docker-ce
state: latest
update_cache: yes
Docker Swarmでのマイクロサービス運用
特徴
- Docker標準のオーケストレーションツール
- 比較的シンプルにクラスタ構築が可能
docker stack deploy
コマンドでComposeファイルを展開できる
運用の流れ
AnsibleでSwarmクラスタを初期化
docker swarm init
を自動実行- workerノードを
docker swarm join
で登録
サービス定義(docker-compose.yml)を準備
version: "3"
services:
web:
image: nginx:latest
ports:
- "80:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
Ansibleでデプロイ
- hosts: manager
tasks:
- name: Deploy stack
shell: docker stack deploy -c /path/to/docker-compose.yml myapp
Kubernetesでのマイクロサービス運用
特徴
- 大規模システム向けに最も採用されているオーケストレーション基盤
- 自動リソース管理、セルフヒーリング、ローリングアップデートに対応
- Helmなどを使えばさらに効率的に管理可能
運用の流れ
AnsibleでKubernetesクラスタを構築
kubeadm, kubelet, kubectlのインストールkubeadm init
によるマスターノード初期化
workerノードのjoinを自動化
デプロイメントの定義(例:nginx-deployment.yml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Ansibleでkubectl applyを実行
- hosts: master
tasks:
- name: Apply nginx deployment
shell: kubectl apply -f /path/to/nginx-deployment.yml
監視・ログ管理の統合
本番運用では「監視とログ管理」も必須です。代表的な選択肢は以下の通りです。
- Prometheus+Grafana:メトリクス監視
- ELK Stack(Elasticsearch, Logstash, Kibana):ログ集中管理
- Loki+Grafana:軽量なログ収集基盤
Ansibleを使えば、これらのツールもクラスタ全体に自動インストールして運用できます。
まとめ
- Ansibleを使うことで、サーバー構築やクラスタ初期設定を自動化できる
- Docker Swarmはシンプルにマイクロサービスを運用できる
- Kubernetesは大規模環境に適しており、本番運用の標準的選択肢
- 監視・ログ基盤も含めてAnsibleで一元管理するのがベスト
マイクロサービスの本番運用では「自動化と標準化」が成功の鍵になります。
最初はSwarmで小規模に始め、スケールに応じてKubernetesへ移行するのも現実的なアプローチです。