自作仮想化基盤...全体の構成 -...

63
自作仮想化基盤 n0stack」の紹介 ぱろっく hnron h-otter kyontan 法政大学 日本工学院八王子専門学校 電気通信大学 電気通信大学

Upload: others

Post on 21-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

自作仮想化基盤

「n0stack」の紹介

ぱろっく

hnron

h-otter

kyontan

法政大学

日本工学院八王子専門学校

電気通信大学

電気通信大学

Page 2: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- ContainerSIG (Special Interest Group)

- But...

- No

- No

- No Jail

Attention!

Page 3: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- ContainerSIG (Special Interest Group)

- But...

- We use

Attention!

Page 4: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

自己紹介 (@hnron)

- 日本工学院八王子専門学校

- ITスペシャリスト科 4年

- ICTSC (第3-6回参加) (第7-9回運営)

- 自宅ラック勢

- OpenStack

- 自宅にBGPフルルートが来てたり

Page 5: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

自己紹介 (@h-otter)

- 電気通信大学総合情報学科3年

セキュリティコース

- ICTSC運営 (第6 ~ 9回)

- アルバイト@

- 自宅ラック勢

- openstack on k8s

Page 6: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

自己紹介 (ぱろっく)

- @porisuteru

- 法政大学理工学部4年知的情報処理研究室

- ICTSC運営委員(第5 - 9回)

- アルバイト@

- インターン@

- 機械学習✖️セキュリティを研究

Page 7: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- @sukukyon

- https://monora.me

- 電気通信大学情報理工学部 3年

- 元 ICTSC 運営委員 (第5 - 8回)

- アルバイト@ &

- 就活中 (?)

自己紹介 (@kyontan)

自宅サーバ群 (FreeBSD, CoreOS, ...)

Page 8: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

ICTトラブルシューティングコンテスト

- 通称 ICTSC (ICT Trouble Shooting Contest)

- https://icttoracon.net

- 学生によるインフラ技術を中心に出題される

トラブルシューティング大会

- 次回は第9回@さくらインターネット株式会社大阪本社

Page 9: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る
Page 10: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

開発の動機- これまでは CloudStackや OpenStackを用いていた

- CloudStackはネットワークの構造等の自由度が低く、

ICTSC に用いるのが難しかった

- OpenStackは比較的自由度が高かったが、ICTSC で使う際に

毎回特殊な構築の仕方を取る必要があった

- どちらを用いた場合でも、学習コストや不具合が発生した時の

デバッグのコストがとても高かった

- クラウドを理解するためにクラウドを作ってみる

Page 11: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

We introduce …

Page 12: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

全体の構成

- 各コンポーネントやエージェントを分割して開発

- リソースをそれぞれ抽象化するエージェントを作る

- IaaSとしてコンポーネントをまとめる

- Compute, Network, Volume の依存は比較的大きい

- ex. Nova と Neutron と Cinder

→ OpenStackやKubernetesの構造を参考にしながら粒度を調整

Page 13: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

インターフェイス (OpenStack)

- VMを作るには…

- Neutron でネットワークを作って

- Neutron でサブネット・ポートを作って

- Nova で VM を立てて…

- Cinder でディスクをつくって

- いろいろアタッチして…

- Heat…? Murano…?

Page 14: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

インターフェイス (Kubernetes)

- サービスを提供するには…

- PersistentVolumeつくって

- Deploymentを作って

- Service作って

- いろいろ制約を追加して…

- いろいろタグでアタッチして…

Page 15: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

しんどい

Page 16: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

インターフェイス (n0core)

- VMを作るには…

- procedure という

1つのリクエストを投げるだけ

- リソースの依存関係を解決

- 効率的なスケジューリング

- resource: vm

name: hello_vm

power_state: started

attachments:

- resource: volume

size: 10G

- resource: port

network:

type: vlan

vlan_id: 10

subnets:

- cidr: 10.0.1.0/24

Page 17: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- RESTful API

- 全ては HTTP でやる

- デバッグのしやすさを重視

- 疎結合

- agent 同士の依存を減らす

- マイクロサービスに近い

- agent は比較的密結合である

- 破綻

Architecture (0.1)

Page 18: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- MQ を導入

- 到達性を重視

- 容易にリトライが可能

- Scheduler / Conductor

- agent 間の調整 / 管理

- データフローを一方向に

Architecture (0.2)

Page 19: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Architecture (0.2)

- API Gateway

- HTTP / MQ の変換

- n0auth, n0image

- HTTP 依存部は外部へ

Page 20: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

メッセージの流れ

- Scheduler が

必要な agent へ命令

Architecture (0.2)

Page 21: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

メッセージの流れ

- エラーがあれば

Conductor → Scheduler で

再スケジューリング

Architecture (0.2)

Page 22: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Architecture (0.2)

- 依存関係があると……

- Scheduler

→ Agent

→ Conductor

→ Scheduler

→ Agent

→ ...

Page 23: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- 依存関係があると……

- Scheduler

→ Agent

→ Conductor

→ Scheduler

→ Agent

→ ...

必要ないのでは?

Architecture (0.2)

Page 24: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

全体の構成 (Latest)

依存関係の通知を

Agent から直接 Agent へ

- VM に必要なディスク

... ポート

- ポート ... ネットワーク

Page 25: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

全体の構成 (Latest)

依存関係の通知を

Agent から直接 Agent へ

- VM に必要なディスク

... ポート

- ポート ... ネットワーク

Page 26: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

n0core

- Core Component

全体の構成 (Latest)

Page 27: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Messaging

- 全てのメッセージは N0stackMessage である

- Protobuf はそれ自身の型情報を持たない

N0stackMessage

Request Procedure Notification

Simple

Notification

Create

VMRequests..

Create

Network

Delete

VM

Page 28: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Pulsar

- Yahoo! が日米で開発した MQ (メッセージングキュー)

- レイテンシの低さがウリ

- メッセージは ZooKeeper / BookKeeper で伝達/保持

- (acknowledgement を返すまでメッセージを保持できる)

- 今は Apache Incubator の配下で開発続行中

- n0stack の MQ として採用

- MQ の扱いになれておらず色々苦労中

Page 29: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Messaging

- Protobuf (Protocol buffer) 3 を全体で採用

- agent 間でのスキーマの統一

- 文字列/数値等の最低限の型は保証できる

- 列挙型もある

- Protobuf 3 では全てのフィールドが optional (なくてもよい)

- シリアライズできたからといってエラーが起きないわけではない

Page 30: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- API Gateway

- クライアント (WebUI, CLI) からのリクエストのルーティング

- Authentication, Authorization

- Kong, Traefik などを使いたい (未検証)

- 未着手

n0gateway

Page 31: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

api

Clients

MQ

api

- HTTP - MQ の橋渡し

YAML, JSON, ...

Protobuf

Page 32: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

scheduler

- ホストのリソースを元にVMのスケジューリング

- filter / weight

- APIから送られてくるprocedureの分割

- 各コンポーネントへリソースの作成リクエストを送る

Page 33: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

networker

- 外部ネットワークから

VMへの疎通を確保

- n0stack側から外部の

router/switch を操作

- NAPALM

- BGPで外部のrouterに

VMのIPを/32で広報

- GoBGP

Page 34: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

porter

- VMのnetworkを抽象化

- ブリッジの作成 &

DHCPによる IPアドレスの割当

- 複数のタイプに対応

- flat

- vlan

- ...

Page 35: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

volumer

- VMイメージ等の管理

- リソースプールの作成

- 作成

- 削除

- ダウンロード

- マイグレーション

Page 36: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

compute

- VMの管理

- 作成

- 起動

- 停止

- 複製

- デバイス追加

- スペック変更

- マイグレーション

Page 37: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

compute

- ハイパーバイザにKVMを使用

- libvirtを用いてKVMを管理

Page 38: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

libvirt

- RedHat が主体となって開発している OSS

- KVM や Xen などのハイパーバイザを管理する抽象化ライブラリ

- C / Python / Java などから API を利用可能

Page 39: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

libvirtを使う理由

- 将来的に様々なハイパーバイザに対応させやすい

- Linux Containers (LXC) もサポートしている

- コンテナの管理も可能に(?)

Page 40: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

進捗

着手し始めた部分

- Scheduler

- Compute

- Volumer

- Porter

- Networker

: Procedure 設計

: ほぼ完成

: Attach 以外ほぼ完成

: MQと結合以外は完成

: gobgp 検証中

Page 41: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

- 0.1 Release (Soon)

- 色が濃い部分の基本動作

- (0.2, ...)

- 1.0: 全体の完成

- ICTSC9 (2018/3/3, 4)

- 導入判断は 2017/12 😂

- 間に合わせたい

Schedule

Page 42: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

様々な形でのサポートを

お願いします!! 🙏

Page 43: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Thanks / Check it out!

Page 44: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Docker on Heroku Heroku Docker

[email protected] Abe @ Platform Specialist

Page 45: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Forward-Looking Statements

Statement under the Private Securities Litigation Reform Act of 1995:

This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.

The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.comproducts, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site.

Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.

Page 46: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

自 己 紹介

(Takashi Abe)Platform Specialist (@sho7650)

à HW àà IT à

: Perfume/BABYMETAL/ /

Page 47: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Heroku

Page 48: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Platform as a Service

DBMS

OS

DBMS

OS

IaaS(Infrastructure as a Service)

DBMS

OS

SaaS(Software as a Service)

/

DBMS

OS

PaaS(Platform as a Service)

24 /365

IaaS

Page 49: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Dyno Dyno

Data

Add-onsPaymentsEmailSMSSearchAnalyticsMonitoringLogging

RubyNode.jsJavaPythonPHPScalaClojure

PostgresRedisKafka

Heroku

The Twelve Factor App

Page 50: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

→ CI/CD

• Git / Github

• Pipeline > >

• Fork

Page 51: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

/

項⽬ 説明

Private Spaces • DynoやDataなど、Herokuのアプリ実⾏環境をネットワーク的に分離された環境に構築

• ⽇本国内のデータセンター利⽤も可能

エンタープライズサポート

• 技術的な質問やトラブル時のサポートチケットに対して、重要度に応じた応答時間のSLAを提供

• ⽇本語でのサポート対応を提供• 導⼊時のアーキテクチャデザインやAdd-on選定といった

ご相談に⽇本⼈技術者が対応

Heroku Connect • Salesforceのオブジェクトとの双⽅向データ同期機能を提供

Private Spaces

Heroku Connect

PostgresHeroku Salesforce

Page 52: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Container Registry & RuntimeHeroku Docker Registry Heroku Docker !!

Page 53: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Docker Heroku

1. Heroku 2. Heroku CLI 3. docker

buildpack ではなく、docker イメージでランタイムやミドルウェアを開発者が準備できるので、これまでdocker を利⽤していた開発者でも容易にデプロイが!

Page 54: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Heroku Docker Heroku !!

起動確認デプロイアドオン追加Herokuアプリ追加Docker アプリ準備

アプリ開発

git clone

アプリ準備 heroku create

データベース

ログ出⼒

監視ツール

ファイル保管

などなど

:

container:push heroku logs

170以上!?

Page 55: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

“heroku container:push”

※ https://blog.heroku.com/introducing_heroku_docker_release_build_deploy_heroku_apps_with_docker

heroku login

heroku container:login

起動確認デプロイアドオン追加Herokuアプリ追加事前準備

heroku create

heroku addons:create

heroku container:push

heroku open

heroku アプリの作成とアドオン追加は、⼀度の実⾏でOK

Heroku のアドオンもDocker から利⽤可能

‘heroku-docker’ “heroku docker”

Page 56: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Dockerfile

• $PORT Listen • Network link • Default working directory ‘/’ ‘WORKDIR’ • ‘CMD’ ENTRYPOINT • ‘VOLUME’ ‘EXPOSE’ ‘STOPSIGNAL’ ‘SHELL’ ‘HEALTHCHECK’

$PORT Web

Page 57: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Heroku

• Dyno 24 +α• 24•

• Web 30• Worker Dyno

• Twelve Factor App(https://12factor.net/ja/)

Heroku

詳しくはこちらへどうぞ!!https://devcenter.heroku.com/articles/limits

Page 58: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

DEMO

Page 59: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Japan Heroku User Group https://herokujp.doorkeeper.jp/

Page 60: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

次のステップへ...Trailhead

Heroku Enterpriseの基礎

Heroku Enterpriseをいつどのように使⽤するかに

ついての基礎を学習します

SalesforceとHerokuのインテグレーション

HerokuのアプリケーションをSalesforceに統合するためのパターンと⽅法を学びます

https://trailhead.salesforce.com/ja

Page 61: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

AppendixHeroku References

Page 62: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る

Heroku

• Heroku Heroku CLI

• Heroku – Heroku Dev Center

• Heroku

• Heroku (Heroku Getting Started )• Node.js Heroku

• Ruby Heroku

• Heroku - Java

• PHP Heroku

• Python Heroku

• Heroku CI/CD

Page 63: 自作仮想化基盤...全体の構成 - 各コンポーネントやエージェントを分割して開発 - リソースをそれぞれ抽象化するエージェントを作る