Ansible+Docker Swarm/Kubernetesでマイクロサービスを本番運用する方法

はじめに

近年のアプリケーション開発では、マイクロサービスアーキテクチャを採用するケースが増えています。小さなサービスを組み合わせてシステムを構築するため、スケーラビリティや障害分離がしやすい一方で、本番環境でのデプロイや運用には複雑な仕組みが必要になります。
この記事では、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へ移行するのも現実的なアプローチです。

タイトルとURLをコピーしました