Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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!