Slide 1

Slide 1 text

学生サークルで開発する VMプロビジョニングツール @cyokozai

Slide 2

Slide 2 text

井上 裕介 a.k.a cyokozai 千葉工業大学 情報科学部 情報工学科 B4 ❏ ネットワークコンテンツ研究会 Nekko Cloud Team ❏ 株式会社スリーシェイク sreake事業部 学生インターン生 :~$ YAML, Shell Script, Python, Go :~$ 本屋巡り、ダンス、サカナクション 自己紹介

Slide 3

Slide 3 text

● マルチリージョンプライベートクラウド Nekko Cloud ● Nekko Cloud IaaS基盤の開発における課題 ● サークル内のトイルと向き合う方法 ● Infrastructure as Codeという選択 ● プロビジョニングツール Terrakko 車輪をあえて再発明するという選択 アジェンダ

Slide 4

Slide 4 text

マルチリージョン プライベートクラウド Nekko Cloud

Slide 5

Slide 5 text

Nekko Cloud ● メンバーの所有するサーバを VPNでつないでプライベート クラウドを制作 ● クラウドの設計・開発・運用を 通してクラウド技術を学ぼう! ● Proxmox VEクラスタを用いた IaaS基盤

Slide 6

Slide 6 text

Nekko Cloud 浦和リージョン ちょこざい宅

Slide 7

Slide 7 text

Nekko Cloud 幕張リージョン いるまる(部長)宅

Slide 8

Slide 8 text

Nekko Cloud 津田沼リージョン たけのこ宅

Slide 9

Slide 9 text

リージョン構成 NGN網内折り返し+WireGuardで拠点間を接続 (ping 約 5 ms) NGN網内折り返し WireGuard VPN ちょっとフリーメイソンっぽい...w

Slide 10

Slide 10 text

Proxmox VEクラスタ

Slide 11

Slide 11 text

Proxmox VEクラスタ

Slide 12

Slide 12 text

Nekko Cloud IaaS基盤の 開発における課題

Slide 13

Slide 13 text

VM作るのがめんどくさい!!!

Slide 14

Slide 14 text

VMの設定にかかる工程 工程 作業内容 VM作成 Nekko Cloud上で最適に動作するように毎回 各種パラメーターを大量入力&コマンド入力 OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール

Slide 15

Slide 15 text

VM設定を簡略化 工程 作業内容 解決策 VM作成 Nekko Cloud上で最適に動作するように毎回 各種パラメーターを大量入力&コマンド入力 テンプレートの作成 OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール Cloud-Initで自動化

Slide 16

Slide 16 text

VM設定を簡略化 工程 作業内容 解決策 VM作成 Nekko Cloud上で最適に動作するように毎回 各種パラメーターを大量入力&コマンド入力 テンプレートで簡略化 OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール Cloud-Initで簡略化 部長いるまるが12月の JPmoxs勉強会で登壇予定

Slide 17

Slide 17 text

Nekko Cloudの開発を行う中で どうしても避けられない課題が見えてきた

Slide 18

Slide 18 text

そ れ で も VM作るのがめんどくさい!!!

Slide 19

Slide 19 text

VM作るのめんどくせーなー ● Webコンソールを開いて操作に慣れていないと大変 ● 勉強や開発のためにVMを使ってくれない ● 複数のVM立てる時はかなり面倒くさい ● もっと気軽にVMを建てたい Discordでコメントする感覚で....

Slide 20

Slide 20 text

VM作るのめんどくせーなー ● Webコンソールを開いて操作に慣れていないと大変 ● 勉強や開発のためにVMを使ってくれない ● 複数のVM立てる時はかなり面倒くさい ● もっと気軽にVMを建てたい Discordでコメントする感覚で.... この課題は後で再定義します

Slide 21

Slide 21 text

Terrakko - DiscordからVMを作成! ● Discordから直感的な操作でVMの作成・削除・起動が可能 ● VMの複数同時生成に対応 ● 事前にユーザ情報やSSHキーを登録することで約10秒で VM作成が可能!

Slide 22

Slide 22 text

Terrakko開発の裏話

Slide 23

Slide 23 text

サークル内のトイルと向き合う方法

Slide 24

Slide 24 text

と い る ってご存知ですか?

Slide 25

Slide 25 text

トイル (Toil) とは ● toil: 苦労、骨が折れる ● トイル≠面倒で苦労のかかる仕事 ● 工学におけるトイルには明確な定義が存在する

Slide 26

Slide 26 text

トイル (Toil) の定義 ● 手作業で行う工程が多い ● 頻繁に割り込みで発生する作業 ● 繰り返し発生する作業 ● 非生産的な作業 ● 開発の規模に比例して工程が増加する ● 工程と作業の自動化が可能

Slide 27

Slide 27 text

トイル (Toil) の定義 ● 手作業で行う工程が多い ● 頻繁に割り込みで発生する作業 ● 繰り返し発生する作業 ● 非生産的な作業 ● 開発の規模に比例して工程が増加する ● 工程と作業の自動化が可能

Slide 28

Slide 28 text

「VM作るのめんどくさい」はトイルか? ● 手作業でWebコンソールを操作 → 工数が非常に多い ● 数十台のVMを必要とした場合 → 手作業は相当厳しい ● IaCツールを導入することで自動化が可能

Slide 29

Slide 29 text

トイルを排除したい 何について調べますか? お前を消す方法

Slide 30

Slide 30 text

トイルを排除する工学的手法 ● SRE (Site Reliability Engineering) システムの信頼性の維持と向上 システムの監視と自動化 ● Platform Engineering 開発チームの認知負荷を下げ生産性の最適化 開発効率を上げるプラットフォームの設計

Slide 31

Slide 31 text

SRE or Platform Engineering ● どちらの手法が良いか → あなたが所属するチーム次第 ● 問題の分析、原因の明確化、文化や習慣 etc…

Slide 32

Slide 32 text

Nekko Cloud Teamに必要なのはどっち? Platform Engineeringを選択 ● プラットフォームそのものを開発するチームである → 開発チームの生産性を上げることに関心がある ● 開発メンバーがもっと楽にVMを使える環境を目指す ● 開発メンバーの認知負荷を下げる

Slide 33

Slide 33 text

Infrastructure as Codeという選択

Slide 34

Slide 34 text

IaC (Infrastructure as Code) ● インフラリソースをソースコードで定義する ● 手動で行っていた手順をコード化する ● 冪等性の確保 (何度やっても同じ結果になる) ● Gitによるバージョン管理が可能

Slide 35

Slide 35 text

代表的なIaCツール ● Terraform ● Ansible ● Pulumi

Slide 36

Slide 36 text

代表的なIaCツール ● Terraform ● Ansible ● Pulumi

Slide 37

Slide 37 text

Terraformの優れているところ ● 複雑なインフラ構成を独自の構造言語で記述 ● 各クラウドプロバイダでの利用実績 ● 豊富なプロバイダに対応 ● プロビジョニングツールのデファクトスタンダード

Slide 38

Slide 38 text

Terraformを使ったVM作成 工程 作業内容 解決策 VM作成 Nekko Cloud上で最適に動作するように毎回 各種パラメーターを大量入力&コマンド入力 Terraformコマンドを実行 → 遠隔からテンプレート を自動でクローン OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール Cloud-Initで簡略化

Slide 39

Slide 39 text

Terraformを使って見えてきた課題 ● テンプレートのCloud-init設定をTerraformが上書きしてしまう ● Terraform側でもCloud-initと全く同じ設定を維持する ● VMを作るだけなのにわざわざTerraformに入門するのか?

Slide 40

Slide 40 text

Terraformを使って見えてきた課題 ● テンプレートのCloud-init設定をTerraformが上書きしてしまう ● Terraform側でもCloud-initと全く同じ設定を維持する ● VMを作るだけなのにわざわざTerraformに入門するのか?

Slide 41

Slide 41 text

テンプレートのCloud-init設定をTerraformが 上書きしてしまう ● 既に完成したテンプレートを単にクローンしたい ● tffileで未定義の部分はクローン時にテンプレートの構成 をTerraform Providerの初期値で上書きされてしまう 手動でクローン Terraformでクローン

Slide 42

Slide 42 text

Terraformを使って見えてきた課題 ● テンプレートのCloud-init設定をTerraformが上書きしてしまう ● Terraform側でもCloud-initと全く同じ設定を維持する ● VMを作るだけなのにわざわざTerraformに入門するのか?

Slide 43

Slide 43 text

Terraform側でもCloud-initと全く同じ設定を維持する ● テンプレートの設定を変更したときにTerraformの設定も 変更する必要があり管理コストが倍になってしまう 別々のフォーマットで書かれた設定ファイルから 同じテンプレートが作成できなければならない

Slide 44

Slide 44 text

Terraformを使って見えてきた課題 ● テンプレートのCloud-init設定をTerraformが上書きしてしまう ● Terraform側でもCloud-initと全く同じ設定を維持する必要 ● VMを作るだけなのにわざわざTerraformに入門するのか?

Slide 45

Slide 45 text

VMを作るだけなのに わざわざTerraformに入門するのか? ● tfvars, tfstateの管理に注意が必要 → 使いこなすにはある程度知識が不可欠 ● かえって認知負荷の増加になっているのでは? Terraformで定義した変数の内、センシティブなものを 定義するファイル、Terraform版 .env Terraformでプロビジョニングしたインフラリソースの状態を 保存するファイル

Slide 46

Slide 46 text

Nekko Cloudに欲しいのはもっと単純な機能

Slide 47

Slide 47 text

プロビジョニングツール Terrakko 車輪をあえて再発明するという選択

Slide 48

Slide 48 text

● メリット ○ 既にTerraformを使えばVMの作成自体は可能 ○ 工数の削減、複数VM作成の自動化は達成できた ● デメリット ○ Terraform導入後の管理コストが大きい ○ VM作成に対する学習コストが高い Terraformを採択するか・手放すか

Slide 49

Slide 49 text

我々はTerraformを手放した

Slide 50

Slide 50 text

車輪の再発明 ● TerraformはProxmox VE APIを叩いて処理を行う ● APIを叩くアプリ → どこからAPIを叩くのが良いか?

Slide 51

Slide 51 text

「Proxmox VE APIをDiscord Botが叩く」 というアイデア ● Pythonのライブラリproxmoxerとdiscord.pyを使用 ● 普段からサークル活動で使っているDiscordサーバーからVMを作成 ● 技術にまだ慣れない新入生でも簡単にVMを作成できる

Slide 52

Slide 52 text

Nekko Cloud IaaSプロビジョニングツール Terrakko ● DiscordからVMの作成・削除・起動 ● VMの複数同時生成に対応 ● 約10秒でVM作成が可能!

Slide 53

Slide 53 text

● クラウドを作るサークルならではの問題と向き合った ● 開発チームにかかる負荷を見直す良い機会が得られた ● トイルを明確にしていたことで、開発の方針を考え直す ことができた ● ベータテスト→ FBを集めver1.0リリースを目指す まとめ

Slide 54

Slide 54 text

● SREにおけるトイルの判断と切り分け方 https://sreake.com/blog/sre-toil-select/external_link ● Infrastructure as Code (IaC) とは何ですか? https://aws.amazon.com/jp/what-is/iac/ ● Proxmox VE API https://pve.proxmox.com/wiki/Proxmox_VE_API 参考資料

Slide 55

Slide 55 text

Thank you for listening!