Swarmモードで運用してみた
自己紹介
• 新居田 晃史(にいだ あきふみ)
• 所属
– JBアドバンスト・テクノロジー株式会社
– 先進技術研究所
• 日本最速ITエンジニア(自称)
– フルマラソン 2:29:56
• 好きなAWSサービス
Twitter @nid777
Facebook Akifumi Niida
Amazon
Route 53
Swarm モードとは
• Docker Engineにクラスタ管理を統合
• 分散化の設計
• 宣言型サービスモデル
• スケーリング
• 期待状態の調整
• マルチホスト・ネットワーク
• サービス・ディスカバリ
• 負荷分散
• 暗号化
• ローリングアップデート
http://docs.docker.jp/engine/swarm/index.html
管理するコンポーネントが少ないのが良い
manager managermanager
cworker worker worker
Overlay Network
Dockerイメージの作成
Packer + Ansible
Packer
ビルダー:Docker builder https://www.packer.io/docs/builders/docker.html
"builders": [{
"type": "docker",
"image": "{{user `docker_repo`}}",
"commit": true,
"run_command": ["-itd", "-u", "root", "--name", "default", "{{.Image}}", "/bin/sh"],
"changes": ["ENTRYPOINT /docker-entrypoint"]
}],
プロビジョナー:Ansible Provisioner https://www.packer.io/docs/provisioners/ansible.html
"provisioners": [{
"type": "shell",
"inline": [
"apk --no-cache add python-dev"
]
},{
"type": "ansible",
"playbook_file": "../ansible/fluentd.yml",
"ansible_env_vars": ["ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_SCP_IF_SSH=True"],
"extra_arguments" : [
"--extra-vars",
"ansible_host=default ansible_connection=docker"
]
},{
"type": "shell",
"inline": [
"apk del python-dev"
]
}],
Ansibleを動かすために、python-devをインストール
Docker connection pluginを使用
クリーニング
ENTRYPOINTの変更
ベースのDockerイメージはここで指定 (alpine-linux)
Packer
イメージのプッシュ
"post-processors": [[
{
"type": "docker-tag",
"repository": "{{user `ecr_url`}}/{{user `ecr_repo`}}",
"tag": "{{user `tag`}}"
},
{
"type": "docker-push",
"ecr_login": true,
"login_server": "{{user `ecr_url`}}"
}
]]
ECRへのログイン+PUSH
イメージへタグ付け
Ansible
• 基本的には既存資産の使い回しでOK
• 主な変更箇所
– Alpine-linuxをベースにしているので、
yum→apkの変換が必要
– イメージを小さくするために不要なパッケー
ジを削除 (ruby-dev,gcc,make,git等)
– ENTRYPOINTに使用するシェルのコピー
構成
Amazon ECR
ELB
Swarm
Manager
Swarm
Worker
GlusterFS
ElastiCache
EFS早く使いたい
監視
https://github.com/monitoringartist/zabbix-docker-monitoringzabbix-docker-monitoring
• Docker監視用zabbixモジュール
1. zabbix_module_docker.soをdockerホスト入れて、zabbix-agent.confで指定
2. テンプレートファイルをzabbix-serverから読み込み
• 導入の2ステップ
• できること
• LLD機能でコンテナを自動的に監視対象へ追加
• コンテナごとのCPU使用量、メモリ使用量、NWトラフィック、状態を監視
• 注意点
権限エラーが出るので、zabbixユーザーの権限を適切に設定する
スケール
• トリガー:CPU、メモリ
– Zabbixでホストのメモリ使用量を監視し、少なくなってきたらスケー
ルするアクションを実行
ホストのスケール
• Swarmモードに任せる
コンテナのスケール
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
ロギング
• Fluentd logging driver
https://docs.docker.com/engine/admin/logging/fluentd/
• 各dockerホストにfluentdをインストールしておく
• ログをローカルのfluentdに送るようにコンテナを起動
• アグリゲーション用のfluentdへforward
docker service create … --log-driver=fluentd --log-opt fluentd-address=localhost:24224

Swarm mode運用してみた