Top Banner
Confidential and proprietary コンテナで作る モバイルバックエンド Google Cloud Platform Sales Engineer 福田
50

Google for Mobile: コンテナで作るモバイル バックエンド - 福田 潔

Jan 08, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary

コンテナで作るモバイルバックエンド

Google Cloud Platform Sales Engineer福田 潔

Page 2: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary Google for Mobile

Kiyoshi Fukudaグーグル株式会社

Google for Work

Google Cloud Platform Sales Engineer

Page 3: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary

contents

Google for Mobile

モバイルバックエンドの選択肢

コンテナとは?なぜコンテナなのか

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

Kubernetes と Google Container Engine

Page 4: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

モバイルバックエンド

?

Page 5: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

モバイルバックエンド

Page 6: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary

なぜコンテナなのか?

Page 7: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Copyright 2015 Google Inc

Googleでは10年間に渡り、すべてのサービスをコンテナで動かしてきた毎週20億以上のコンテナを立ち上げている

Images by Connie Zhou

Page 8: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

コンテナ イメージ

依存性

アプリケーション コード

コンテナはアプリケーションコードとその依存性を一つの

ユニットとしてまとめる

これにより、アプリケーションとインフラを疎結合にするこ

とができる

• 伝統的なIT環境において、インフラエンジニアはアプリケーションの実

行環境を正しく整えることが重要

• コンテナはアプリケーションとその依存性がまとまっているので、例え

ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易になる

• オンプレミス、プライベートクラウド、パブリッククラウド等異なる実行環

境間の移動が容易になる

コンテナとは?

Page 9: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

軽量仮想マシンに比べて

軽量でシンプル。数十ミリ秒で起動

ポータブル様々な実行環境に対応し、

デプロイメントが容易

効率性リソース使用量が少なく、コンピュートリソースを細分化して効率的に利用可能

コンテナのメリット

Page 10: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔
Page 11: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Copyright 2015 Google Inc

コンテナ運用の課題

ノード ノード

クラスタ

ノード

???

● 複数のノードに対するコンテナのデプロイは?

● ノード障害が発生した場合は?

● コンテナ障害が発生した場合は?

● アプリケーションのアップグレードはどうやって管理する?

Page 12: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔
Page 13: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Kubernetes κυβερνήτης: Greek for “pilot” or “helmsman of a ship”

the open source cluster manager from Google

Page 14: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Kubernetesのエコシステム

Page 15: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary

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

Page 16: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary Google for Mobile

Google Trends: Microservices

Page 17: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary Google for Mobile

モノリシックアプリケーション

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

http://martinfowler.com/articles/microservices.html

Page 18: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary Google for Mobile

http://martinfowler.com/articles/microservices.htmlモノリシック マイクロサービス

Page 19: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービスアーキテクチャのメリット

● 複数人での開発が用意

○ ビルドの単位を小さくできる

● バージョンアップが用意になる

○ サービス単位でアップグレード

● 実装方法の柔軟性が高まる

○ マルチプログラミング言語

○ マルチDB

○ インタフェースレベルで統一されていれば良い

Page 20: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Confidential and proprietary

どうやって動かすか?

Page 21: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Kubernetesのクラスタを構築する

Page 22: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Container EngineGoogle Cloud Platform

Page 23: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Container EngineGoogle Cloud Platform

Page 24: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔
Page 25: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔
Page 26: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

アプリケーション(コンテナ)をデプロイする

Page 27: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

App A

Page 28: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

App Aポッド

Page 29: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

レプリケーションコントローラ

App A

Page 30: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

App A

App A

App A

App A

レプリケーションコントローラ

Page 31: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

サービス Service A

App A

App A

App A

App A

Page 32: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービス A

Page 33: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

これだけでおしまい!

Page 34: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービス A

マイクロサービス C マイクロサービス D

マイクロサービス B

Page 35: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービス A

マイクロサービス Cマイクロサービス D

マイクロサービス B

Page 36: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービス A

マイクロサービス Cマイクロサービス D

マイクロサービス B

Page 37: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

マイクロサービス A

マイクロサービス C

マイクロサービス D (2.0)

マイクロサービス B

Page 38: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

作ってみましょう

Page 39: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

JavaScript

var http = require('http');

var server = http.createServer(function (request, response) {

response.writeHead(200, {"Content-Type": "text/plain"});

response.end("Hello Service A v1\n");

});

server.listen(8080);

アプリケーション

Page 40: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Bash

$ docker build -t gcr.io/<project>/servicea:v1

$ gcloud docker push gcr.io/<project>/servicea:v1

コンテナをビルドする

Page 41: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

YAML

apiVersion: v1

kind: ReplicationController

metadata:

name: frontend

labels:

name: frontend

name: frontend

spec:

replicas: 2

selector:

name: frontend

レプリケーションコントローラ

template:

metadata:

labels:

name: frontend

spec:

containers:

- image: gcr.io/project-id/frontend:1.0

name: frontend

ports:

- containerPort: 8080

name: http-server

Page 42: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Bash

$ kubectl create -f servicea-controller.yaml

レプリケーションコントローラを起動する

Page 43: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

YAML

apiVersion: v1

kind: Service

metadata:

name: frontend

labels:

name: frontend

spec:

type: LoadBalancer

フロントエンドサービス

ports:

- port: 80

targetPort: 3000

protocol: TCP

selector:

name: frontend

Page 44: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Bash

$ kubectl create -f servicea-service.yaml

サービスを起動する

Page 45: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Bash

$ kubectl scale rc servicea-controller --replicas=10

スケール

Page 46: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Bash

$ kubectl rolling-update servicea-v1 -f servicea-

controller-v2.yaml

バージョンアップ

Page 47: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

まとめ

● コンテナおよびマイクロサービスアーキテクチャによりアプリケーションの作り方と運

用方法が変わってくる

● Google の社内運用をベースにした作成されたオープンソースのコンテナマネージャ → Kubenetes

● KubernetesのマネージドサービスであるGoogle Container Engineを使うと簡単

● さあ、始めてみましょう!

Page 48: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

無料セミナーのお知らせ

● Google Cloud Platform を始めてみよう

○ ハンズオン

○ Google Compute Engine / BigQuery / Google Container Engine (coming soon…)

○ 次回日程:BigQuery編 12月15日 @グーグル 六本木オフィス

申し込みフォーム:https://goo.gl/N0g4No

Page 49: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

無料セミナーのお知らせ

● Google Cloud Platform を知ってみよう

○ 概要紹介、顧客事例

○ 質疑応答

○ 次回日程:12月15日 @グーグル 六本木オフィス

申し込みフォーム:https://goo.gl/vFL2hO

Page 50: Google for Mobile:  コンテナで作るモバイル バックエンド - 福田 潔

Thank You

Google Cloud Platform 50