Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

分散環境におけるDocker とオーケストレーション

9,392 views

Published on

Cloud Native から、アプリケーションをスケールする Swarm Mode の機能と役割まで


OSSユーザーのための勉強会 <OSS X Users Meeting> #22 Docker と kubernetes 発表資料

2018年1月30日

Published in: Software

分散環境におけるDocker とオーケストレーション

  1. 1. Dockerとオーケストレーション Cloud Native から、アプリケーションをスケールする Swarm Mode の機能と役割まで さくらインターネット株式会社 技術本部ミドルウェアグループ 前佛 雅人 @zembutsu OSSユーザーのための勉強会 <OSS X Users Meeting> #22 Docker と kubernetes 2018年1月30日 分散環境における
  2. 2. 2 私は誰? @zembutsu 前佛 雅人 ZEMBUTSU Masahito zembutsu @zembutsu Blog: https://pocketstudio.net 仕事 Engineer / Technology Evangelist さくらインターネット株式会社 技術本部ミドルウェアグループ ・エバンジェリストチーム ・クラウドチーム ・VPSチーム ・石狩市小学校プログラミング教育支援プロジェクト Rice Farmer 富山県滑川市, 有機JAS認証米(コシヒカリ)生産者 興味・関心 趣味としての技術検証 運用と監視、自動化が中心 ・ HashiCorp, Docker, Zabbix, Prometheus ほか スライド作成・発表、翻訳、執筆 公開場所発表での発表は3~4回/月間 ・昨年のSlideShare PV数 は 31k 最近感動したこと ・ ドローンすごい 好きなもの・こと ・Factorio(ゲーム) ・きれいな映像作品全般 ・酒
  3. 3. 今日のセッションで共有したいこと 3 いつコンテナ始めるの? 今でしょ! Dockerプロジェクト周辺 動いています CNCF swarm mode オーケストレーション DEMO
  4. 4. CloudNativeと Dockerプロジェクトの現状 4
  5. 5. あの日動かしたコンテナの名前を僕達はまだ知らない 5 Pet vs Cattle、価値観の転換点、そして板挟み 物理サーバ 静的 STATIC 動的 DYNAMIC IPアドレス 覚えて いますか? 仮想化技術 クラウド コンピューティング クラウド ネイティブ スケーラブル 安定性 信頼性 より速く かつ、 安定性 信頼性 柔軟に  メインフレーム  ワークステーション  パーソナルコンピュータ  携帯電話  スマートフォン タブレット端末 ハードウェアとソフトウェアを所有する時代 サービスとしての計算資源を利用する時代 現在の課題 agile DevOps 12 Factor App Microservices SRE コストと速さ・柔軟さが釣り合わない 釣り合う 開発者のみならず エンドユーザも
  6. 6. 6 Netflix Development Patterns for Scale, Performance & Availability (DMG206) | AWS re:Invent 2013 https://www.slideshare.net/AmazonWebServices/dmg206  Service oriented architecture  Redundancy  Statelessness  NoSQL  Eventual consistency 【参考】 https://github.com/cncf/presentations/blob/master/2016-software-circus/what-is-cloud-native/what-is-cloud-native.pdf これらのパターンであり、ソフトウェアが必要  Availability  Automation  Acceleration  Anywhere! 可用性 自動化 加速 どこでも マイクロサービス デプロイ 管理 CI/CD OODA コンテナはどこでも移動 Cloud Native クラウド・ネイティブ
  7. 7. Cloud Native Computing Foundation (CNCF) 7 プロジェクトを支援  コンテナ化  動的なオーケストレーション  マイクロサービス指向 【参考】 CNCF About https://www.cncf.io/about/faq/ 2000年設立。Linuxを中心としたオープンソースの エコシステムを築くため、コンピュータ業界を中心に 自動車業界など、50以上のサブプロジェクトを持つ。 幅広く業界との調整や標準化のために努める非営利 団体。 2015年12月設立 ベンダロックイン無くクラウドを移動できるように オープンソースのソフトウェアを積み重ねて: アプリケーションやプロセス等の各パートをコンテナ内に パッケージ化し、再利用性、透明性、、リソースを分離 コンテナを活発にスケジュールし、 リソース利用率の最適化を管理 アプリケーションをマイクロサービスに分割し、 全体的な敏捷性(agility)とメンテナンス性を極めて向上
  8. 8. CNCFがホストするプロジェクト 8 https://www.cncf.io/
  9. 9. Cloud Native 参照アーキテクチャ 9 Networking Provisioning Runtime Orchestration & Management Application Definition / Development Compute Storage 【参考】 https://github.com/cncf/presentations/blob/master/2016-software-circus/what-is-cloud-native/what-is-cloud-native.pdf マイクロサービス・パターン 分散オーケストレーションと管理 コンテナ化 インフラ ※ CNCFプロジェクトが定義する範囲外
  10. 10. Containerd とは何か? 10【参考】 Tour of containerd https://www.slideshare.net/Docker/online-meetup-why-should-container-system-platform-builders-care-about-containerd-10 コ ン テ ナ ・ デ ィ ー  業界標準のコンテナ・ランタイム  単純さ、堅牢さ、ポータビリティ  OCI ランタイム仕様を完全サポート  2016年12月Docker からプロジェクト独立  2017年3月CNCF参画  2017年12月5日 v1.0.0 リリース simplicity robustness portability
  11. 11. 2018年1月現在のDocker Project界隈 11 2017年で何が変わったの? Docker発表 2013  OSSとして公開  DockerHub 公開 2014 2015 2016 2017 2018 2013/03 Moby Project 移行 2017/04 Docker 1.0 2014/03 DockerCloud発表 2016/03 Tutum買収 2015/10 containerd プロジェクト独立 2016/12 2017/03 containerd を CNCF に移行 Mobyプロジェクトを 委員会方式の運用に 移行 2017/11 Docker for Mac Kubernetes対応 (experimental) 2017/12 runC (libcontainer) OCI に寄贈 2015/6 Docker 1.12 リリース swarm mode 実装 2016/6 Docker EE Beta Kubernetes (experimental) 2018/01 Docker Swarm 1.0 リリース 2015/11 Docker Compose 1.0 リリース 2014/10 Docker EE 初リリース 2016/2
  12. 12. Docker Engine の現行アーキテクチャ 12※ Docker Engine v1.11 以降~現 Docker Community Edition v18.01 ユーザ (docker CLI等) Docker Container Engine dockerd containerd (docker-containerd) shim (docker-containerd-shim) shim (docker-containerd-shim) shim (docker-containerd-shim) runC (runtime-runc) コンテナ Docker Image コンテナ Docker Image コンテナ Docker Image JSON/REST API CNCF/OCI業界標準規格に準拠 runC (runtime-runc) runC (runtime-runc) gRPC エンドポイント Docker Engine トップレベルのデーモン (Moby プロジェクトの成果物) Docker イメージに含むファイルを、 パラメータに従い、コンテナとして実行 コンテナを実際に作成・起動する ランタイムのバイナリ・プログラム コンテナやイメージをはじめとし、 ネットワーク、ストレージを管理する 必要最小限のデーモン ランタイムが実行したコンテナを管理
  13. 13. standalone swarm Docker Swarm vs Docker Swarm mode 13 SwarmKit Docker Engine Docker Engine Swarm マネージャ Swarm エージェント Swarm エージェント KVS リソース・プール 管 理 Docker Host Docker Host Swarm(クラスタ) Docker Engine Docker Engine Docker Engine swarm モード Docker Host Docker Host Docker Host Docker 1.12からクラスタ管理機能を内蔵管理用マネージャ・エージェントや KVS が別途必要
  14. 14. Docker Engine Swarm mode コンセプトと機能 14
  15. 15. Swarm mode の構成要素 15 manager node worker node worker node swarm モード docker service や docker stack 等 クラスタとサービスの 管理コマンドを受け付け タスク (コンテナ) タスク (コンテナ) サービス docker service や docker stack 系コマンドの実行は、 kubectl と互換性を持つ ※ Docker for Mac で Experimental かつ Kubernetes 有効化の場合 Docker Engine Docker Engine Docker Engine swarm SwarmKit SwarmKit SwarmKit docker CLI - ネットワーク Ingress Network Routing Mesh Docker Compose YAML サービス定義 (option) docker コマンドを使い、 分散環境でも簡単に アプリをスケールできる
  16. 16. SwarmKit 16 https://github.com/docker/swarmkit あらゆる規模の分散システムでオーケストレーションするためのツールキット 分散 Distributed 安全 Secure シンプル Simple 処理時には単一障害点に依存しないよう、 Raft合意アルゴリズム(Raft Consensus Algorithm)で調整 ノード間の通信とメンバ管理では、自動的に TLS 通信を行い 通信時に使用する証明書は自動発行・自動ローテーション インフラに依存しないようなシンプルかつ最小に操作でき、 外部のデータベースなどの操作が不要
  17. 17. 従来のオーケストレーション 17【参考】 https://www.slideshare.net/Docker/container-orchestration-from-theory-to-practice/7 クラスタ 一方通行 (Docker Swarm)
  18. 18. 宣言型サービス・モデルのオーケストレーション 18 Declarative service model 【参考】 https://www.slideshare.net/Docker/container-orchestration-from-theory-to-practice/7 OD クラスタ Δ S D = 期待状態 O = オーケストレータ S = 状態 Δ = 状態から期待状態への収束 フィードバック (swarm mode)  レプリカ作成  グローバル・サービス 並列 遅延 変更可能
  19. 19. サービスとタスクの概念 19 「コンテナ」の起動ではない swarm manager 3 つの nginx レプリカ サービス worker node 【参考】 https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#services-tasks-and-containers nginx.2 タスク worker node nginx.1 タスク worker node nginx.3 タスク nginx.latest コンテナ nginx.latest コンテナ nginx.latest コンテナ  期待状態に一致するよう タスク数を常に自動調整 docker service create 1.API命令を受け付けサービス・オブジェクト作成 2.サービスに一致するようタスクの調整 3.タスクに IP アドレス割り当て 4.タスクをノードに割り当て 5.タスクの実行を命令
  20. 20. swarm mode のネットワーク機能 20 Multi Host Networking Worker node Worker node Worker node サービス・ディスカバリ (動的な名前解決) overlay network Ingress network コンテナ PublishPort Routing Mesh 80 443 80 443 80 443 負荷分散
  21. 21. クラスタ初期化と サービス実行DEMO 21
  22. 22. Dockerのセットアップ 22 $ curl https://get.docker.com | head $ curl -fsSL get.docker.com -o get-docker.sh # sh ./get.docker.com # systemctl enable docker # systemctl start docker ※systemd系の場合 ※リポジトリの自動セットアップ ※コマンドの確認 Linuxで検証用途に手軽な方法
  23. 23. クラスタ初期化と join 手順 23 manager $ docker swarm init Swarm initialized: current node (hhzcdnj2r43ywjcmjcwbgvwa7) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-0w2m8k41xh1tbapub….. <IP_ADDR>:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. worker $ docker swarm join ¥ --token SWMTKN-1-0w2m8k41xh1tbapub….. <IP_ADDR>:2377 managerのIPアドレスとポート This node joined a swarm as a worker.
  24. 24. クラスタ join 時のトークン確認 24 manager $ docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-0w2m8k41xh1tbapubwl7sd7j7x….. <IP_ADDR>:2377 manager $ docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-0w2m8k41xh1tbapubwl7sd0m0….. <IP_ADDR>:2377
  25. 25. クラスタ状態確認 25 manager $ docker node ls $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS hhzcdnj2r43ywjcmjcwbgvwa7 * node-01 Ready Active Leader $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS hhzcdnj2r43ywjcmjcwbgvwa7 * node-01 Ready Active Leader znmguxtqwywhja9chkkaa6a7y node-02 Ready Active 2mgqqmgt0dlv9zc932nz9rkat node-03 Ready Active
  26. 26. Compose file でサービス作成・操作 26 manager $ vi docker-compose.yml version: '3' services: web: image: zembutsu/docker-sample-nginx deploy: replicas: 3 resources: limits: cpus: "0.1" restart_policy: condition: on-failure ports: - "80:80" networks: internal: aliases: - web volumes: - /etc/localtime:/etc/localtime:ro networks: internal: $ docker stack deploy -c ./docker-compose.yml demo Creating network demo_internal Creating service demo_web $ docker stack ls $ docker stack ps demo $ docker service scale demo_web=5 $ docker service stop demo $ docker stack rm demo
  27. 27. 詳しい手順は、チュートリアルやドキュメントを 27  Swarm mode overview | Docker Documentation https://docs.docker.com/engine/swarm/  Get Started, Part 3: Services | Docker Documentation https://docs.docker.com/get-started/part3/
  28. 28. まとめ 28 Docker Swarm mode ならスケールも簡単
  29. 29. 私からは以上です、ありがとうございました。

×