自作仮想化基盤 「n0stack」の紹介
-
Upload
takeshi-take -
Category
Internet
-
view
1.329 -
download
0
Transcript of 自作仮想化基盤 「n0stack」の紹介
![Page 1: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/1.jpg)
自作仮想化基盤
「n0stack」の紹介
ぱろっく
hnron
h-otter
kyontan
法政大学
日本工学院八王子専門学校
電気通信大学
電気通信大学
![Page 2: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/2.jpg)
- ContainerSIG (Special Interest Group)
- But...
- No
- No
- No Jail
Attention!
![Page 3: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/3.jpg)
- ContainerSIG (Special Interest Group)
- But...
- We use
Attention!
![Page 4: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/4.jpg)
自己紹介 (@hnron)
- 日本工学院八王子専門学校
- ITスペシャリスト科 4年
- ICTSC (第3-6回参加) (第7-9回運営)
- 自宅ラック勢
- OpenStack
- 自宅にBGPフルルートが来てたり
![Page 5: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/5.jpg)
自己紹介 (@h-otter)
- 電気通信大学総合情報学科3年
セキュリティコース
- ICTSC運営 (第6 ~ 9回)
- アルバイト@
- 自宅ラック勢
- openstack on k8s
![Page 6: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/6.jpg)
自己紹介 (ぱろっく)
- @porisuteru
- 法政大学理工学部4年知的情報処理研究室
- ICTSC運営委員(第5 - 9回)
- アルバイト@
- インターン@
- 機械学習✖️セキュリティを研究
![Page 7: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/7.jpg)
- @sukukyon
- https://monora.me
- 電気通信大学情報理工学部 3年
- 元 ICTSC 運営委員 (第5 - 8回)
- アルバイト@ &
- 就活中 (?)
自己紹介 (@kyontan)
自宅サーバ群 (FreeBSD, CoreOS, ...)
![Page 8: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/8.jpg)
ICTトラブルシューティングコンテスト
- 通称 ICTSC (ICT Trouble Shooting Contest)
- https://icttoracon.net
- 学生によるインフラ技術を中心に出題される
トラブルシューティング大会
- 次回は第9回@さくらインターネット株式会社大阪本社
![Page 9: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/9.jpg)
![Page 10: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/10.jpg)
開発の動機- これまでは CloudStackや OpenStackを用いていた
- CloudStackはネットワークの構造等の自由度が低く、
ICTSC に用いるのが難しかった
- OpenStackは比較的自由度が高かったが、ICTSC で使う際に
毎回特殊な構築の仕方を取る必要があった
- どちらを用いた場合でも、学習コストや不具合が発生した時の
デバッグのコストがとても高かった
- クラウドを理解するためにクラウドを作ってみる
![Page 11: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/11.jpg)
We introduce …
![Page 12: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/12.jpg)
全体の構成
- 各コンポーネントやエージェントを分割して開発
- リソースをそれぞれ抽象化するエージェントを作る
- IaaSとしてコンポーネントをまとめる
- Compute, Network, Volume の依存は比較的大きい
- ex. Nova と Neutron と Cinder
→ OpenStackやKubernetesの構造を参考にしながら粒度を調整
![Page 13: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/13.jpg)
インターフェイス (OpenStack)
- VMを作るには…
- Neutron でネットワークを作って
- Neutron でサブネット・ポートを作って
- Nova で VM を立てて…
- Cinder でディスクをつくって
- いろいろアタッチして…
- Heat…? Murano…?
![Page 14: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/14.jpg)
インターフェイス (Kubernetes)
- サービスを提供するには…
- PersistentVolumeつくって
- Deploymentを作って
- Service作って
- いろいろ制約を追加して…
- いろいろタグでアタッチして…
![Page 15: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/15.jpg)
しんどい
![Page 16: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/16.jpg)
インターフェイス (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」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/17.jpg)
- RESTful API
- 全ては HTTP でやる
- デバッグのしやすさを重視
- 疎結合
- agent 同士の依存を減らす
- マイクロサービスに近い
- agent は比較的密結合である
- 破綻
Architecture (0.1)
![Page 18: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/18.jpg)
- MQ を導入
- 到達性を重視
- 容易にリトライが可能
- Scheduler / Conductor
- agent 間の調整 / 管理
- データフローを一方向に
Architecture (0.2)
![Page 19: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/19.jpg)
Architecture (0.2)
- API Gateway
- HTTP / MQ の変換
- n0auth, n0image
- HTTP 依存部は外部へ
![Page 20: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/20.jpg)
メッセージの流れ
- Scheduler が
必要な agent へ命令
Architecture (0.2)
![Page 21: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/21.jpg)
メッセージの流れ
- エラーがあれば
Conductor → Scheduler で
再スケジューリング
Architecture (0.2)
![Page 22: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/22.jpg)
Architecture (0.2)
- 依存関係があると……
- Scheduler
→ Agent
→ Conductor
→ Scheduler
→ Agent
→ ...
![Page 23: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/23.jpg)
- 依存関係があると……
- Scheduler
→ Agent
→ Conductor
→ Scheduler
→ Agent
→ ...
必要ないのでは?
Architecture (0.2)
![Page 24: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/24.jpg)
全体の構成 (Latest)
依存関係の通知を
Agent から直接 Agent へ
- VM に必要なディスク
... ポート
- ポート ... ネットワーク
![Page 25: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/25.jpg)
全体の構成 (Latest)
依存関係の通知を
Agent から直接 Agent へ
- VM に必要なディスク
... ポート
- ポート ... ネットワーク
![Page 26: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/26.jpg)
n0core
- Core Component
全体の構成 (Latest)
![Page 27: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/27.jpg)
Messaging
- 全てのメッセージは N0stackMessage である
- Protobuf はそれ自身の型情報を持たない
N0stackMessage
Request Procedure Notification
Simple
Notification
Create
VMRequests..
Create
Network
Delete
VM
![Page 28: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/28.jpg)
Pulsar
- Yahoo! が日米で開発した MQ (メッセージングキュー)
- レイテンシの低さがウリ
- メッセージは ZooKeeper / BookKeeper で伝達/保持
- (acknowledgement を返すまでメッセージを保持できる)
- 今は Apache Incubator の配下で開発続行中
- n0stack の MQ として採用
- MQ の扱いになれておらず色々苦労中
![Page 29: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/29.jpg)
Messaging
- Protobuf (Protocol buffer) 3 を全体で採用
- agent 間でのスキーマの統一
- 文字列/数値等の最低限の型は保証できる
- 列挙型もある
- Protobuf 3 では全てのフィールドが optional (なくてもよい)
- シリアライズできたからといってエラーが起きないわけではない
![Page 30: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/30.jpg)
- API Gateway
- クライアント (WebUI, CLI) からのリクエストのルーティング
- Authentication, Authorization
- Kong, Traefik などを使いたい (未検証)
- 未着手
n0gateway
![Page 31: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/31.jpg)
api
Clients
MQ
api
- HTTP - MQ の橋渡し
YAML, JSON, ...
Protobuf
![Page 32: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/32.jpg)
scheduler
- ホストのリソースを元にVMのスケジューリング
- filter / weight
- APIから送られてくるprocedureの分割
- 各コンポーネントへリソースの作成リクエストを送る
![Page 33: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/33.jpg)
networker
- 外部ネットワークから
VMへの疎通を確保
- n0stack側から外部の
router/switch を操作
- NAPALM
- BGPで外部のrouterに
VMのIPを/32で広報
- GoBGP
![Page 34: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/34.jpg)
porter
- VMのnetworkを抽象化
- ブリッジの作成 &
DHCPによる IPアドレスの割当
- 複数のタイプに対応
- flat
- vlan
- ...
![Page 35: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/35.jpg)
volumer
- VMイメージ等の管理
- リソースプールの作成
- 作成
- 削除
- ダウンロード
- マイグレーション
![Page 36: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/36.jpg)
compute
- VMの管理
- 作成
- 起動
- 停止
- 複製
- デバイス追加
- スペック変更
- マイグレーション
![Page 37: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/37.jpg)
compute
- ハイパーバイザにKVMを使用
- libvirtを用いてKVMを管理
![Page 38: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/38.jpg)
libvirt
- RedHat が主体となって開発している OSS
- KVM や Xen などのハイパーバイザを管理する抽象化ライブラリ
- C / Python / Java などから API を利用可能
![Page 39: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/39.jpg)
libvirtを使う理由
- 将来的に様々なハイパーバイザに対応させやすい
- Linux Containers (LXC) もサポートしている
- コンテナの管理も可能に(?)
![Page 40: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/40.jpg)
進捗
着手し始めた部分
- Scheduler
- Compute
- Volumer
- Porter
- Networker
: Procedure 設計
: ほぼ完成
: Attach 以外ほぼ完成
: MQと結合以外は完成
: gobgp 検証中
![Page 41: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/41.jpg)
- 0.1 Release (Soon)
- 色が濃い部分の基本動作
- (0.2, ...)
- 1.0: 全体の完成
- ICTSC9 (2018/3/3, 4)
- 導入判断は 2017/12 😂
- 間に合わせたい
Schedule
![Page 42: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/42.jpg)
様々な形でのサポートを
お願いします!! 🙏
![Page 43: 自作仮想化基盤 「n0stack」の紹介](https://reader034.fdocument.pub/reader034/viewer/2022050614/5a6477567f8b9afc4d8b474b/html5/thumbnails/43.jpg)
Thanks / Check it out!