container microservices

59
コココココココ コココココココココココ コココココココココココココココ ~~ ココ ココ コココココココココ ココココココココ ココ ココココココココ ココココココココ

Upload: tsuyoshi-ushio

Post on 06-Jan-2017

928 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Container microservices

コンテナが導くマイクロサービスへの道~最新技術が変える技術者の未来~佐藤 直生日本マイクロソフト エバンジェリスト牛尾 剛米マイクロソフト エバンジェリスト

Page 2: Container microservices

Agendaマイクロサービスとコンテナの重要性スケールとデプロイ戦略Azure Container Service, Windows Container, そして Service Fabric

Page 3: Container microservices

マイクロサービスとコンテナの重要性

Page 4: Container microservices

マイクロサービス

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 を経由してお互いコミュニケーションする形態のアーキテクチャのことである

Page 5: Container microservices

モノリス• 一般的なアプリケーションの例

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

Page 6: Container microservices

マイクロサービス• マイクロサービスアーキテクチャの例

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

Page 7: Container microservices

マイクロサービスのトレードオフうれしい• シンプルで小さい• スケーラブル• 耐障害性が高い• 独立性• 複数のフレームワーク

きびしい• 分散システムの開発の難しさ• 複数のデータベース• トランザクション管理• デバッグ/テスト• デプロイと運用

Page 8: Container microservices

DevOps

Page 9: Container microservices

アジャイル

Development Development Development Development

1~2週DEV

Page 10: Container microservices

実際のアジャイル

Development Development Development Development

6ヶ月

エンドゲーム

DEV

QA

Page 11: Container microservices

進化したアジャイルプロジェクト

Development Development Development Development

3ヶ月

インフラ引き渡し

DEVQA

OPS

Page 12: Container microservices

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

Page 13: Container microservices

DevOps

DEV

OPSQA

Dev / Ops 経営 / セキュリティ / 営業

ビジネス・ DEV ・ OPS が協力し、ソフトウェアライフサイクルを改善し、ビジネス価値の創出を改善する活動10デプロイ/日を可能に

Page 14: Container microservices

全米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 等

Page 15: Container microservices

Microservices が変えるエンタープライズ革新

マイクロサービス

マイクロサービス

マイクロサービス

マイクロサービス

Microservices によって、大きな企業でも、 DevOps プラクティスが実践可能に!

Page 16: Container microservices

Container

Page 17: Container microservices

Docker

Page 18: Container microservices

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動作環境

Page 19: Container microservices

仮想マシンとコンテナの違い

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 コンテナは共存しない

Page 20: Container microservices

Microsoft の Docker への貢献Docker Machine, CLI for Windows

etc… Docker Engine For Windows

Page 21: Container microservices

デモ1. Docker の基本を体験 docker machine

Page 22: Container microservices

• オススメの構築方法Docker 動作環境の構築

Docker MachineAzure Resource Manager Visual Studio Docker Pluginhttps://github.com/Microsoft/DockerToolsDocs

Page 23: Container microservices

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

Page 24: Container microservices

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

Page 25: Container microservices

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 で見れます

Page 26: Container microservices

デモ2. Windows Containers

Page 27: Container microservices

デモ3. デプロイとスケール docker swarm + compose

Page 28: Container microservices

Docker の現在の課題

本番への適用 End to Endセキュリティ

Page 29: Container microservices

セキュリティ

Docker Trusted Registory

自社向けの Docker イメージリポジトリ

Azure New Portal から Docker で検索して Deploy!

Page 30: Container microservices

セキュリティ

Docker Content Trust

コンテナへの署名と、有効期間の管理

https://blog.docker.com/2015/08/content-trust-docker-1-8/

Page 31: Container microservices

DockerCon EU 2015 での Production事例マイクロサービス事例でもある

OXFORD UNIVERSITY PRESS 20th CENTURY FOX

Salesforce 始め多くの企業が Docker を Production 環境で使用中

Page 32: Container microservices

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

Page 33: Container microservices

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

Page 34: Container microservices

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

Page 35: Container microservices

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

Page 36: Container microservices

デモ4. リリースマネジメント tutum

Page 37: Container microservices

3. tutum によるリリースマネジメントクラウド非依存のリリースマネージメント基盤

docker-machine と同じような手順で数分で Azure に設定可能

ノードの管理、アプリのデプロイ、スケールなどを管理できる

Page 38: Container microservices

デモ5. Azure Service Fabric

Page 39: Container microservices

デプロイメントモデルのまとめ1. マニュアルのデプロイ2. Continuous Delivery スタイルのデプロイ3. コンテナ単体のデプロイ4. オーケストレーションツールのデプロイ5. リリースマネジメントを使ったデプロイ6. データセンタ OS によるデプロイ

Page 40: Container microservices

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

Page 41: Container microservices

Operations Management Suite

Page 42: Container microservices

Dockerユーザが言っていたこと

“ 開発者が VM の上じゃなくて一元管理されたところで開発者がログを見たい

と思うわ”

“ コンテナは心配やしパフォーマンスが気になるわ”

“ 私の環境は Public/Private クラウドを使っている。コンテナ

の在庫棚卸必須やな”

Page 43: Container microservices

コンテナ管理のアプローチOPEN

エージェントのソースコードが GitHub で利用できる軽量でモジュラー化され、証明されたオープンソースコンポーネントでできたエージェントビルドどんなクラウドでも動作する

FLEXIBLE

複数のコンフィグレーションオプションNagios, Zabbix,や SCOM と連携するmms.microsoft.com でトライアル   [email protected]までご連絡をどんな種類の Linux もサポート

Page 44: Container microservices
Page 45: Container microservices
Page 46: Container microservices

最新技術が変える技術者の未来

Page 47: Container microservices

Mesosphere DCOS ( データセンタ OS)クラスターを1台のコンピュータのように扱える

Mesosphere DCOS

Page 48: Container microservices

デモ6. Azure Container Service (Optional)

Page 49: Container microservices

Azure Resource Manager ってなに?・新しい Azure のリソース管理機構・リソースをまとめて管理できる

APIリソース

ARM

APIAPIAPI

• コンピュート• ネットワーク• ストレージSD

K

Page 50: Container microservices

すべては JSON で作ることができる!ネットワーク

カード

サーバ

ルーター ?

ストレージ

内側の IP NSG通信ルール JSON

外の IP

Page 51: Container microservices

リソース部分を ARM で展開コンテナ使って機能部分を展開組み合わせると・・・

ARM

コンテナ

ARM とコンテナを組み合わせ、リソースの獲得からセットアップまでを一気に実施することができます。

Page 52: Container microservices

関連コンテンツオープン ソース活用でもっと Azure を使い切ろう !

https://channel9.msdn.com/Events/FEST/2015/CLD-331https://docs.com/microsoftjapan-/6056/cld-331-azure

Special Thanks 吉田パクえさん!

Page 53: Container microservices

これから始まる楽しい未来• クラウドはどこでも良くなる!• 10 deploys per day はもっと簡単になる!• 自働化好きエンジニアはクラスタを手中に!• 少人数の自己組織化チーム

Page 54: Container microservices

おすすめの第一歩!

テスト駆動開発 The DevOps逆転だ!Infrastructure as Code

Dev OpsAzure ResourceManager

DockerMachine

Page 55: Container microservices

DevOps のおすすめステップ!Dev

Ops

Mgr

テスト駆動開発

継続的インテグレー

ション

継続的デリバリ

Infrastructureas

Code

無駄の特定と見える化

運用の改善と自動化

The Phoenix Projectを読む

上位マネジメントへの訴求

推進 WG 設置パートナー選定

試行

Page 56: Container microservices

One more thing

Page 57: Container microservices

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)

Page 58: Container microservices

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

Page 59: Container microservices

© 2015 Microsoft Corporation. All rights reserved.