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

自作仮想化基盤 「n0stack」の紹介

Embed Size (px)

Citation preview

Page 1: 自作仮想化基盤 「n0stack」の紹介

自作仮想化基盤

「n0stack」の紹介

ぱろっく

hnron

h-otter

kyontan

法政大学

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

電気通信大学

電気通信大学

Page 2: 自作仮想化基盤 「n0stack」の紹介

- ContainerSIG (Special Interest Group)

- But...

- No

- No

- No Jail

Attention!

Page 3: 自作仮想化基盤 「n0stack」の紹介

- ContainerSIG (Special Interest Group)

- But...

- We use

Attention!

Page 4: 自作仮想化基盤 「n0stack」の紹介

自己紹介 (@hnron)

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

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

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

- 自宅ラック勢

- OpenStack

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

Page 5: 自作仮想化基盤 「n0stack」の紹介

自己紹介 (@h-otter)

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

セキュリティコース

- ICTSC運営 (第6 ~ 9回)

- アルバイト@

- 自宅ラック勢

- openstack on k8s

Page 6: 自作仮想化基盤 「n0stack」の紹介

自己紹介 (ぱろっく)

- @porisuteru

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

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

- アルバイト@

- インターン@

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

Page 7: 自作仮想化基盤 「n0stack」の紹介

- @sukukyon

- https://monora.me

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

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

- アルバイト@ &

- 就活中 (?)

自己紹介 (@kyontan)

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

Page 8: 自作仮想化基盤 「n0stack」の紹介

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

- 通称 ICTSC (ICT Trouble Shooting Contest)

- https://icttoracon.net

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

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

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

Page 9: 自作仮想化基盤 「n0stack」の紹介
Page 10: 自作仮想化基盤 「n0stack」の紹介

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

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

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

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

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

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

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

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

Page 11: 自作仮想化基盤 「n0stack」の紹介

We introduce …

Page 12: 自作仮想化基盤 「n0stack」の紹介

全体の構成

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

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

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

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

- ex. Nova と Neutron と Cinder

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

Page 13: 自作仮想化基盤 「n0stack」の紹介

インターフェイス (OpenStack)

- VMを作るには…

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

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

- Nova で VM を立てて…

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

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

- Heat…? Murano…?

Page 14: 自作仮想化基盤 「n0stack」の紹介

インターフェイス (Kubernetes)

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

- PersistentVolumeつくって

- Deploymentを作って

- Service作って

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

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

Page 15: 自作仮想化基盤 「n0stack」の紹介

しんどい

Page 16: 自作仮想化基盤 「n0stack」の紹介

インターフェイス (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: 自作仮想化基盤 「n0stack」の紹介

- RESTful API

- 全ては HTTP でやる

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

- 疎結合

- agent 同士の依存を減らす

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

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

- 破綻

Architecture (0.1)

Page 18: 自作仮想化基盤 「n0stack」の紹介

- MQ を導入

- 到達性を重視

- 容易にリトライが可能

- Scheduler / Conductor

- agent 間の調整 / 管理

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

Architecture (0.2)

Page 19: 自作仮想化基盤 「n0stack」の紹介

Architecture (0.2)

- API Gateway

- HTTP / MQ の変換

- n0auth, n0image

- HTTP 依存部は外部へ

Page 20: 自作仮想化基盤 「n0stack」の紹介

メッセージの流れ

- Scheduler が

必要な agent へ命令

Architecture (0.2)

Page 21: 自作仮想化基盤 「n0stack」の紹介

メッセージの流れ

- エラーがあれば

Conductor → Scheduler で

再スケジューリング

Architecture (0.2)

Page 22: 自作仮想化基盤 「n0stack」の紹介

Architecture (0.2)

- 依存関係があると……

- Scheduler

→ Agent

→ Conductor

→ Scheduler

→ Agent

→ ...

Page 23: 自作仮想化基盤 「n0stack」の紹介

- 依存関係があると……

- Scheduler

→ Agent

→ Conductor

→ Scheduler

→ Agent

→ ...

必要ないのでは?

Architecture (0.2)

Page 24: 自作仮想化基盤 「n0stack」の紹介

全体の構成 (Latest)

依存関係の通知を

Agent から直接 Agent へ

- VM に必要なディスク

... ポート

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

Page 25: 自作仮想化基盤 「n0stack」の紹介

全体の構成 (Latest)

依存関係の通知を

Agent から直接 Agent へ

- VM に必要なディスク

... ポート

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

Page 26: 自作仮想化基盤 「n0stack」の紹介

n0core

- Core Component

全体の構成 (Latest)

Page 27: 自作仮想化基盤 「n0stack」の紹介

Messaging

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

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

N0stackMessage

Request Procedure Notification

Simple

Notification

Create

VMRequests..

Create

Network

Delete

VM

Page 28: 自作仮想化基盤 「n0stack」の紹介

Pulsar

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

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

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

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

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

- n0stack の MQ として採用

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

Page 29: 自作仮想化基盤 「n0stack」の紹介

Messaging

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

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

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

- 列挙型もある

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

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

Page 30: 自作仮想化基盤 「n0stack」の紹介

- API Gateway

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

- Authentication, Authorization

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

- 未着手

n0gateway

Page 31: 自作仮想化基盤 「n0stack」の紹介

api

Clients

MQ

api

- HTTP - MQ の橋渡し

YAML, JSON, ...

Protobuf

Page 32: 自作仮想化基盤 「n0stack」の紹介

scheduler

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

- filter / weight

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

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

Page 33: 自作仮想化基盤 「n0stack」の紹介

networker

- 外部ネットワークから

VMへの疎通を確保

- n0stack側から外部の

router/switch を操作

- NAPALM

- BGPで外部のrouterに

VMのIPを/32で広報

- GoBGP

Page 34: 自作仮想化基盤 「n0stack」の紹介

porter

- VMのnetworkを抽象化

- ブリッジの作成 &

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

- 複数のタイプに対応

- flat

- vlan

- ...

Page 35: 自作仮想化基盤 「n0stack」の紹介

volumer

- VMイメージ等の管理

- リソースプールの作成

- 作成

- 削除

- ダウンロード

- マイグレーション

Page 36: 自作仮想化基盤 「n0stack」の紹介

compute

- VMの管理

- 作成

- 起動

- 停止

- 複製

- デバイス追加

- スペック変更

- マイグレーション

Page 37: 自作仮想化基盤 「n0stack」の紹介

compute

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

- libvirtを用いてKVMを管理

Page 38: 自作仮想化基盤 「n0stack」の紹介

libvirt

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

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

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

Page 39: 自作仮想化基盤 「n0stack」の紹介

libvirtを使う理由

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

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

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

Page 40: 自作仮想化基盤 「n0stack」の紹介

進捗

着手し始めた部分

- Scheduler

- Compute

- Volumer

- Porter

- Networker

: Procedure 設計

: ほぼ完成

: Attach 以外ほぼ完成

: MQと結合以外は完成

: gobgp 検証中

Page 41: 自作仮想化基盤 「n0stack」の紹介

- 0.1 Release (Soon)

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

- (0.2, ...)

- 1.0: 全体の完成

- ICTSC9 (2018/3/3, 4)

- 導入判断は 2017/12 😂

- 間に合わせたい

Schedule

Page 42: 自作仮想化基盤 「n0stack」の紹介

様々な形でのサポートを

お願いします!! 🙏

Page 43: 自作仮想化基盤 「n0stack」の紹介

Thanks / Check it out!