container microservices
TRANSCRIPT
コンテナが導くマイクロサービスへの道~最新技術が変える技術者の未来~佐藤 直生日本マイクロソフト エバンジェリスト牛尾 剛米マイクロソフト エバンジェリスト
Agendaマイクロサービスとコンテナの重要性スケールとデプロイ戦略Azure Container Service, Windows Container, そして Service Fabric
マイクロサービスとコンテナの重要性
マイクロサービス
Microservices is a software architecture style, in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs.
Wikipedia - Microservices
マイクロサービスは、ソフトウェアアーキテクチャのスタイルの一種。複雑なアプリケーションを小さく組み合わされた、独立したプロセスからなり言語非依存の API を経由してお互いコミュニケーションする形態のアーキテクチャのことである
モノリス• 一般的なアプリケーションの例
Browser Loadbalancer Database
http://www.slideshare.net/chris.e.richardson/developing-apps-with-a-microservice-architecture-svforum-microservices-meetupDeveloping applications with a microservice architecture / Chris Richardson
StoreFrontUI
ProductService
Recommendation
ServiceReviewServiceOrder
Service
マイクロサービス• マイクロサービスアーキテクチャの例
Browser APIGateway
http://www.slideshare.net/chris.e.richardson/developing-apps-with-a-microservice-architecture-svforum-microservices-meetupDeveloping applications with a microservice architecture / Chris Richardson
REST
ProductService
Recommendation
ServiceReviewServiceOrder
Service
REST
REST
REST
Webapplicatio
n
DBDBDBDB
マイクロサービスのトレードオフうれしい• シンプルで小さい• スケーラブル• 耐障害性が高い• 独立性• 複数のフレームワーク
きびしい• 分散システムの開発の難しさ• 複数のデータベース• トランザクション管理• デバッグ/テスト• デプロイと運用
DevOps
アジャイル
Development Development Development Development
1~2週DEV
実際のアジャイル
Development Development Development Development
6ヶ月
エンドゲーム
DEV
QA
進化したアジャイルプロジェクト
Development Development Development Development
3ヶ月
インフラ引き渡し
DEVQA
OPS
10 deploys per day1. 自動化されたインフラ2. 共有されたバージョン管理3. ワンステップビルドとデプロイ4. フューチャフラグ5. 共有されたメトリクス6. IRC と IM ボット1. 尊敬2. 信頼3. 健康的な態度4. 非難を避ける
http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
DevOps
DEV
OPSQA
Dev / Ops 経営 / セキュリティ / 営業
ビジネス・ DEV ・ OPS が協力し、ソフトウェアライフサイクルを改善し、ビジネス価値の創出を改善する活動10デプロイ/日を可能に
全米2位!リテール Target 社の DevOps Journey
change agent(s)
http://www.slideshare.net/hmmickman/rebuilding-an-engineering-culture-dev-opstgt?qid=ce0b1941-ea67-4de5-bc60-6533ce831dd8&v=qf1&b=&from_search=1
(re)building an engineering culture: DevOps@TGT
grassroots
tops down
scale
80 deploys per week10 incident per month他にも GE, Bank of America, Disney, Nation wide insurance 等
Microservices が変えるエンタープライズ革新
マイクロサービス
マイクロサービス
マイクロサービス
マイクロサービス
Microservices によって、大きな企業でも、 DevOps プラクティスが実践可能に!
Container
Docker
Immutable Delivery
Manual
インフラ構築 デプロイ
Infrastructure as CodeContinuous Delivery
プロビジョニング自動テスト
コード
デプロイ自動テスト
Docker
イメージ( インフラ+アプリ )
Dockerfile
バイナリをバージョン管理に入れデプロイする
http://blogs.technet.com/b/livedevopsinjapan/archive/2015/11/13/devops-enterprise-2015-2.aspx
【 DevOps Enterprise 2015 参加レポート】第 2 回 – Docker による DevOps ソフトウェアサプライチェーンの改善
DockerHub
Docker動作環境
仮想マシンとコンテナの違い
Hypervisor (Type 2)
Host OS
GuestOS
Server
AppA
GuestOS
GuestOS
Binary /Libs
Binary /Libs
Binary /Libs
AppA’
AppB
Docker Engine
Host OS
Server
AppA
Binary / Libs Binary / Libs
AppB
AppA’
AppB’
AppB’
AppB’
AppB’
• コンテナは母艦のリソースを共有する• コンテナは軽量である• Linux コンテナと Windows コンテナは共存しない
Microsoft の Docker への貢献Docker Machine, CLI for Windows
etc… Docker Engine For Windows
デモ1. Docker の基本を体験 docker machine
• オススメの構築方法Docker 動作環境の構築
Docker MachineAzure Resource Manager Visual Studio Docker Pluginhttps://github.com/Microsoft/DockerToolsDocs
Demo01. Docker Machine Nginx を動作させる準備作業1. Docker Toolkit をインストールする2. Azure CLI をインストールする ( あったら便利 )
3. リポジトリからサンプルをクローン4. 証明書とキーファイルを作成
5. Azure に証明書をアップロード Azure Portal の SETTINGS > MAGAGEMENT CERTIFICATES を選択 mycert.cer をアップロード
https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/
https://www.docker.com/docker-toolbox
$ git clone https://github.com/TsuyoshiUshio/aservice.git$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem $ openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate”$ openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer
Demo01. Docker Machine Nginx を動作させるHTML imag
e
Azure VM
Container
Nginx
HTML
docker engine
DockerHub
image
1. docker build
2. docker run –p 80:80
3. docker login4. docker push
docker machine
Demo01. Docker Machine Nginx を動作させるDocker コンテナを動かしてみる1. Docker machine を Azure 上で起動
2. Docker image を作成3. Docker コンテナを実行
4. Azure でエンドポイントを設定5. Docker Hub に push する
$ docker build –t {your DockerHub repository name}/{image name}
$ docker run -d hello-world$ docker run –p 80:80 tsuyoshiushio/aservice
$ docker login$ docker push
docker-machine create -d azure --azure-subscription-id=”{Your subscription id}" --azure-subscription-cert=”/path/to/mycert.pem" {prefered-machine-name}
Azure の subscription id は$ azure login$ azure account list で見れます
デモ2. Windows Containers
デモ3. デプロイとスケール docker swarm + compose
Docker の現在の課題
本番への適用 End to Endセキュリティ
セキュリティ
Docker Trusted Registory
自社向けの Docker イメージリポジトリ
Azure New Portal から Docker で検索して Deploy!
セキュリティ
Docker Content Trust
コンテナへの署名と、有効期間の管理
https://blog.docker.com/2015/08/content-trust-docker-1-8/
DockerCon EU 2015 での Production事例マイクロサービス事例でもある
OXFORD UNIVERSITY PRESS 20th CENTURY FOX
Salesforce 始め多くの企業が Docker を Production 環境で使用中
2. Swarm + Compose によるスケールアウト• Staging / Production にデプロイ• Production はスケールする事 CONTAINER RUN-TIME
swarm-master
staging
production swarmcompose
HAProx
y
Web03
DBWeb02
Web01
:
80 動的 3375
2375
2375
Nodes登録interlock
2. Swarm + Compose によるスケールアウト1. Swarm クラスタへの参加master:~$export TOKEN=$(docker run --rm swarm create)master:~$docker run -d -p 3375:2375 swarm manage token://$TOKENmaster:~$docker run -d swarm join --addr=<node_1_private_ip:2375> token://$TOKEN node-0:~$docker run -d swarm join --addr=<node_2_private_ip:2375> token://$TOKEN
2. Agent ノードのタグ付けと確認 (production / staging両方で実施 )staging$ sudo systemctl enable docker-tcp.socket staging$ sudo systemctl enable docker.socketstaging$ sudo systemctl stop docker staging$ sudo systemctl start docker-tcp.socket staging$ sudo systemctl start dockerz
master$ docker -H tcp://0.0.0.0:3375 info
staging$ sudo vi /etc/systemd/system/docker-tcp.socket [Unit] Description=Docker Socket for the API [Socket] ListenStream=2375 BindIPv6Only=both Service=docker.service [Install] WantedBy=sockets.target
/etc/systemd/system/docker-tcp.socket
2. Swarm + Compose によるスケールアウト3. Swarm クラスタのインスタンス化
http://qiita.com/TsuyoshiUshio@github/items/33be6b54a741c5834253
Docker Orchestration Tools のチュートリアル (詳細の手順が書かれています)
master $ docker-compose -f production.docker-compose.yml -p dockchat_production pull master $ docker-compose -f production.docker-compose.yml -p dockchat_production up -d
4. スケールアップdocker-compose -f production.docker-compose.yml -p dockchat_production scale web=10
5. 確認dockchat.com/haproxy?stats
dockchat.com
2. Swarm + Compose によるスケールアウト# Mongo DBdb: image: mongo expose: - 27017 command: --smallfiles environment: - "constraint:environment==production”# Python Appweb: image: nicolaka/dockchat:v1 ports: - "5000” links: - db:db environment: - “constraint:environment==production - INTERLOCK_DATA={"hostname":"dockchat.com","domain":"dockchat.com”}
interlock: image: ehazlett/interlock:latest ports: - "80:80” volumes: - /var/lib/docker:/etc/docker environment: - "constraint:environment==production” command: "--swarm-url tcp://$DOCKER_HOST --debug --plugin haproxy start"
docker-compose.yml https://github.com/docker/dceu_tutorials/blob/master/2-orchestration.md
デモ4. リリースマネジメント tutum
3. tutum によるリリースマネジメントクラウド非依存のリリースマネージメント基盤
docker-machine と同じような手順で数分で Azure に設定可能
ノードの管理、アプリのデプロイ、スケールなどを管理できる
デモ5. Azure Service Fabric
デプロイメントモデルのまとめ1. マニュアルのデプロイ2. Continuous Delivery スタイルのデプロイ3. コンテナ単体のデプロイ4. オーケストレーションツールのデプロイ5. リリースマネジメントを使ったデプロイ6. データセンタ OS によるデプロイ
INNOVATIONOPENNESS
Docker | Microsoft
マイクロソフトの Docker への取り組みLibswarm support
Docker extensions in Microsoft Azure
Docker client for Windows
Docker VM image in Azure
Orchestration in Azure
Developer tools
Code
yo docker
Windows Server Containers showcase
ASP.NET 5 Preview Docker image
Operations Management Suite
Dockerユーザが言っていたこと
“ 開発者が VM の上じゃなくて一元管理されたところで開発者がログを見たい
と思うわ”
“ コンテナは心配やしパフォーマンスが気になるわ”
“ 私の環境は Public/Private クラウドを使っている。コンテナ
の在庫棚卸必須やな”
コンテナ管理のアプローチOPEN
エージェントのソースコードが GitHub で利用できる軽量でモジュラー化され、証明されたオープンソースコンポーネントでできたエージェントビルドどんなクラウドでも動作する
FLEXIBLE
複数のコンフィグレーションオプションNagios, Zabbix,や SCOM と連携するmms.microsoft.com でトライアル [email protected]までご連絡をどんな種類の Linux もサポート
最新技術が変える技術者の未来
Mesosphere DCOS ( データセンタ OS)クラスターを1台のコンピュータのように扱える
Mesosphere DCOS
デモ6. Azure Container Service (Optional)
Azure Resource Manager ってなに?・新しい Azure のリソース管理機構・リソースをまとめて管理できる
APIリソース
ARM
APIAPIAPI
• コンピュート• ネットワーク• ストレージSD
K
すべては JSON で作ることができる!ネットワーク
カード
サーバ
ルーター ?
ストレージ
内側の IP NSG通信ルール JSON
外の IP
リソース部分を ARM で展開コンテナ使って機能部分を展開組み合わせると・・・
ARM
コンテナ
ARM とコンテナを組み合わせ、リソースの獲得からセットアップまでを一気に実施することができます。
関連コンテンツオープン ソース活用でもっと Azure を使い切ろう !
https://channel9.msdn.com/Events/FEST/2015/CLD-331https://docs.com/microsoftjapan-/6056/cld-331-azure
Special Thanks 吉田パクえさん!
これから始まる楽しい未来• クラウドはどこでも良くなる!• 10 deploys per day はもっと簡単になる!• 自働化好きエンジニアはクラスタを手中に!• 少人数の自己組織化チーム
おすすめの第一歩!
テスト駆動開発 The DevOps逆転だ!Infrastructure as Code
Dev OpsAzure ResourceManager
DockerMachine
DevOps のおすすめステップ!Dev
Ops
Mgr
テスト駆動開発
継続的インテグレー
ション
継続的デリバリ
Infrastructureas
Code
無駄の特定と見える化
運用の改善と自動化
The Phoenix Projectを読む
上位マネジメントへの訴求
推進 WG 設置パートナー選定
試行
One more thing
DevOps interviewエバンジェリスト牛尾の Live DevOps! (Movie) https://channel9.msdn.com/Blogs/livedevopsinjapan
Live DevOps in Japan! (Blog) http://blogs.technet.com/b/livedevopsinjapan/
DevOps interview (Japanese / English)
DevOps ハッカソンDevOps のマインドセットをマイクロソスフトのエバンジェリストとハッカソンで学ぶ2日間
Nov 28th – 29th with JJUG CCCDec 9th – 10th @Shibuya dots.Jan 23rd – 24th @Osaka
Tsuyoshi Ushio Microsoft corporationSenior Technical Evangelist for DevOps
Microsoft 月次イベント
Dev : http://aka.ms/dx1128-dev Ops : http://aka.ms/dx1128-it
© 2015 Microsoft Corporation. All rights reserved.