$30 off During Our Annual Pro Sale. View Details »

swarm modeで始める ゆるふわオーケストレーション / Starting Orches...

tasshi
July 20, 2019

swarm modeで始める ゆるふわオーケストレーション / Starting Orchestration Softly with Swarm Mode

FUKUOKA Engineers Day 2019 ~Summer~の登壇資料。
Dockerの提供するコンテナオーケストレーション機能「swarm mode」の紹介と弊社での活用事例についての発表です。
コンテナオーケストレーションツールはKubernetesが有名ですがミニマムなクラスタ環境であればswarmでも簡単に実現できるという話をしました。
登壇記事はこちら
https://inside.pixiv.blog/tasshi/7374

tasshi

July 20, 2019
Tweet

More Decks by tasshi

Other Decks in Programming

Transcript

  1. Kubernetes (k8s) swarm 機能 高機能(らしい) WebUI標準 clustering, replication, rolling update

    CLIツール (EE版はWebUI有) 構成 3層 node∋pod∋(container | volume) 2層 node∋(container | volume) コンテナ ランタイム containerd, cri-o, rkt, etc. Dockerのみ 開発元 Cloud Native Computing Foundation (作者はGoogle) Docker, Inc 10 ゆるふわ比較:
  2. 19 コンテナ化 enqueue dequeue Job server redis worker サイドカーパターン ・server:メインアプリケーション

    ・worker:サイドカー ・redis:ジョブの記録に使用 ビルドの説明は省略 ・Multi Stage Buildで軽量化とか
  3. 20 で 複数コンテナ管理 docker-compose.yml --- version: "3.4" services: server: image:

    server:${TAG} depends_on: - redis worker: image: worker:${TAG} depends_on: - redis redis: image: redis:alpine3.9 に構成を記述 ・1service 1container 普通の構成なのでスキップ
  4. 21 に変更 server redis worker worker worker manager node worker

    nodes docker swarm cluster 複数インスタンスでクラスタを構築 ・ swarm init でswarm clusterを構築 ・ swarm join でclusterに参加 のデプロイ先を決める ・server, redisは同じノード ・workerを複数ノード上にデプロイ
  5. 22 に キーを追加 docker-compose.yml --- version: "3.4" # version >=

    3 services: server: - image: server:${TAG} + image: ${CONTAINER_REGISTRY}server:${TAG} depends_on: - redis + deploy: + mode: replicated # 複製ポリシー + replicas: 1 # デプロイ時の複製数 + update_config: # 更新ポリシー + parallelism: 1 # 同時更新数 + delay: 10s # 更新間隔 + order: start-first # 更新時の起動・停止の順序 + restart_policy: # 再起動ポリシー + condition: any # 再起動条件 + delay: 5s # 再起動試行間隔 + max_attempts: 3 # 最大試行回数 + window: 30s # 成功判定の遅延時間 + placement: # 起動ノードの指定 + constraints: + - node.role == manager を編集 ・serviceの設定にdeployキーを追加 ・複製ポリシー ・更新・再起動ポリシー ・ ノードの指定, etc… 詳しくは公式ドキュメントを参照 https://docs.docker.com/compose/compose-file/
  6. - image: server:${TAG} # 失敗 + image: ${CONTAINER_REGISTRY}server:${TAG} # 成功

    ハマりどころ 10 指定するコンテナイメージはレジストリサーバにあるものを指定する ・ノード間でコンテナイメージの共有はできないため ・DockerHub以外でもOK (GCP Container Registry 等) ノードへのデプロイが失敗する場合
  7. デプロイ 10 コマンドでサービスをデプロイ # ローカル環境 $ TAG=1.0.0 $ <コンテナのビルド> $

    <コンテナをレジストリにpush> # デプロイ先環境 user@prod:~$ docker stack deploy -c $COMPOSE_FILE $APPLICATION_NAME
  8. # ローカル環境 $ TAG=1.0.1 $ <コンテナのビルド> $ <コンテナをレジストリにpush> # デプロイ先環境

    user@prod:~$ docker stack deploy -c $COMPOSE_FILE $APPLICATION_NAME 10 コンテナのタグを更新してサービスをデプロイし直すだけ! ymlの更新ポリシーにしたがって順次コンテナが入れ替わる