Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
nekko cloudにおけるProxmox VE利用事例
Search
Irumaru
December 11, 2024
Programming
3
430
nekko cloudにおけるProxmox VE利用事例
Irumaru
December 11, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
120
Refactor your code - refactor yourself
xosofox
1
260
103 Early Hints
sugi_0000
1
230
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
2
470
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
770
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
130
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
270
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
良いユニットテストを書こう
mototakatsu
7
2.1k
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
2
220
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Agile that works and the tools we love
rasmusluckow
328
21k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Thoughts on Productivity
jonyablonski
67
4.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
Designing for humans not robots
tammielis
250
25k
Into the Great Unknown - MozCon
thekraken
33
1.5k
GitHub's CSS Performance
jonrohan
1030
460k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Transcript
Ansibleで構築する Cloud-init対応の 最強VMテンプレート いるまる JPmoxs勉強会 #5 2024.12.11 ネットワークコンテンツ研究会 Nekko Cloud
Team 1
自己紹介 菊池 兼矢 a.k.a いるまる 技術 • Kubernetes, Proxmox VE
• Docker, ArgoCD • PHP, Go 所属 • ネットワークコンテンツ研究会 Nekko Cloud Team創設者 • 千葉工業大学 情報ネットワーク学科 学部4年 趣味 • アニメ, 電子工作, 電車の電気設備 GitHub: https://github.com/irumaru 2
目次 • Nekko Cloud Teamの紹介 • Nekko CloudでのProxmox VE利用事例 •
最強VM TemplateをAnsibleで構築する • VM作るの大変 • Ansible Playbookで構築 • 工夫した話 • これ公開しました! 3
Nekko Cloudの紹介 4
Nekko Cloudの紹介 • 大学生が主要のサークル ネットワークコンテンツ研究会のクラウドチーム • メンバーの自宅を使ってマルチリージョンプライベートクラウドを制作 • クラウドの設計・開発・運用を通してクラウド技術を学ぼう! Nekko
Cloud Teamとは? 5
Nekko Cloudの紹介 Nekko Cloud幕張リージョン いるまる宅 6
Nekko Cloudの紹介 Nekko Cloud浦和リージョン ちょこざい宅 7
Nekko Cloudの紹介 Nekko Cloud津田沼リージョン たけのこ宅 8
Nekko Cloudの紹介 NGN網内折り返し+WireGuardで 拠点間を接続 (ping 約 5 ms) NGN網内折り返し WireGuard
VPN 3つのリージョンを接続 9
Nekko Cloudの紹介 Nekko Cloudの基盤構成 完成 完成 開発中 未着手 今回はProxmox VEで
開発した IaaS基盤の話をします! 10
Nekko Cloudでの Proxmox VEの利用事例 11
Nekko CloudでのProxmox VEの利用事例 • サークルメンバーが自由に開発・検証に使える(dev環境) • Kubernetesの検証, VyOSの検証, 一般的な開発機(VSCode RemoteSSH)
→ VMが欲しい → ダッシュボードから簡単にVMを、作って、使って、壊したい 要件(こんなシステムが欲しい!) → Proxmox VEよさそう! 12
Nekko CloudでのProxmox VEの利用事例 • サークル内で使用するサービスを動かせる(prod環境) • Growi, Nextcloud, Keycloak, …
→ 外からのアクセス, 自動デプロイ, ノード障害時の冗長性 → コンテナ化して、VM上のKubernetesで動かしたい 13 要件(こんなシステムが欲しい!) → Proxmox VEよさそう!!
Nekko CloudでのProxmox VEの利用事例 • お金がないので.... • 複数拠点で、負荷(処理、お金、AZ)をサークルメンバーで分散 • 各拠点の物理サーバー台数は減らしたい •
devとprodで権限を分けて1クラスター内で運用 (誤削除事故防止のため) 14 要件(こんなシステムが欲しい!) → Proxmox VEよさそう!!!
Nekko CloudでのProxmox VEの利用事例 構成/物理 15
Nekko CloudでのProxmox VEの利用事例 構成/論理 • 誤操作防止用 リソースプール ごとの アカウント分離 16
Nekko CloudでのProxmox VEの利用事例 処理能力 17
Nekko CloudでのProxmox VEの利用事例 処理能力 18
最強VM Templateを Ansibleで構築する 19
最強VM TemplateをAnsibleで構築する 工程 作業内容 VM作成 たくさん入力したり、選択したり… OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール
VM設定にかかる工程 20
最強VM TemplateをAnsibleで構築する 工程 作業内容 解決策 VM作成 たくさん入力したり、選択したり… + Cloud-initが動くようにコマンド実行 VM
Templateの使用 OSインストール IPアドレス・ユーザー名・SSH鍵・ qemu agentインストール Cloud-Initで自動化 VM設定の簡略化 Cloud-init: Linuxシステムの初回起動時に設定を自動化するためのツール。 インスタンスのユーザーデータを元にネットワーク設定やパッケージインストールなどを行う。 VM Template: 仮想マシンの構成を保存したテンプレート。新しいVM作成時にテンプレートを基にクローンを 作成することで、効率的かつ一貫性のあるデプロイが可能。 21
最強VM TemplateをAnsibleで構築する VM設定の簡略化 VMの作り方 1. VM Templateをクローン 2. (オプション)ハードウェアを変更 メモリ量,
CPU数, … 3. (オプション)Cloud-initを変更 ssh鍵, ユーザー名, … 4. VM起動 22
最強VM TemplateをAnsibleで構築する Cloud-init対応VMのVM Templateを作るのもなかなか大変 2. コマンドを実行する 1. ファイルを準備する (ubuntu-cloud-img.iso, ci-vendor.yaml)
23
最強VM TemplateをAnsibleで構築する サークル内では同じReadmeを見て作っているはずなのに、 なぜか毎回違うVM Templateができる... 面倒くさい Ansible Playbookで解決 24 Cloud-init対応VMのVM
Templateを作るのもなかなか大変 手作業でqmコマンドを打つのは
最強VM TemplateをAnsibleで構築する Ansible Playbookって何? • システムの設定やアプリケーションのデプロイを自動化するための 設定ファイル • YAML形式で記述され、各タスクを順に実行 図:
cyokozai 25
最強VM TemplateをAnsibleで構築する Ansible Playbookを使うと何がうれしいか? • 設定ファイルを元に、サーバーに対して操作を自動で行う • → サーバーに対して、何台でも、1かカ月後でも、同じ操作を実行 •
→ git管理できる 26
最強VM TemplateをAnsibleで構築する Ansible Playbookで複数台のクラスターへVM Templateを1コマンド展開 1. 環境構築 2. 複数のサーバーへデプロイ 環境ごとに異なる値を記述
例: VM ID, ノードIP, … OSごとに異なる値を記述 Ubuntu22.04, Debian12.8, … 27
最強VM TemplateをAnsibleで構築する 構築の様子 https://www.youtube.com/watch?v=w3doTLcGAc0 28 ※時間の都合上、5分ほどかかる構築を30秒にしています
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成 自動デプロイの内容 1. ci-vendor.yamlをダウンロード 2. ubuntu-cloud-imgをダウンロード 3.
VMを作成 4. VMにubuntu-cloud-imgを起動ディスクとしてインポート 5. 起動ディスクにdiscard=onオプションを追加 6. 起動ディスクサイズを拡張 2GiB → 32GiB 7. Cloud-initをセットアップ(ci-vendor.yamlの設定等) 8. VMをテンプレートへ変換 初回のみ実行 • ファイアーウォールの有効化 • 22/tcpのみ開放 • qemu-guest-agentのインストール • qemu-guest-agentの有効化 • apt upgradeの実行 29
最強VM TemplateをAnsibleで構築する VM Templateの構成/工夫した部分その1 システムディスクのオプション、discard=onについて 30
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成/discard=onオプション • ゲストOSがTrimコマンドを発行できるようにするオプション o ゲストOSでファイルを削除して容量が空いた際に ホスト側でも容量を空ける ※lvmthin限定の話です
31
計測前の処理内容 ディスク使用量の計測 オプションなし discard=onの場合 VMを作成 VM: 5.3%, Node: 6.16GB VM:
1.7GB, Node: 14.04GB 2.4GBのファイルをダウンロード VM: 14%, Node: 8.72GB VM: 4.3GB, Node: 16.8GB 2.4GBのファイルを削除 VM: 6%, Node: 8.72GB VM: 1.7GB, Node: 14.04GB 最強VM TemplateをAnsibleで構築する 減る 変化なし 32 Ansible Playbookの構成/discard=onオプション
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成/discard=onオプション lvmthinボリュームを作成する際の挙動 • LVMは通常、ボリュームの作成時にブロックを割り当てる • LVMのシンプールは、代わりに書き込み時にブロックを割り当てる https://pve.proxmox.com/wiki/Storage:_LVM_Thin
ファイル作成時の挙動 1. ゲストのファイルシステムがファイルを作成する際、ブロックデバイスの ブロックを使用する 2. ホストのブロックデバイスのブロックが使用される 33
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成/discard=onオプション discard=onの場合のファイル削除時の挙動 1. ゲストのファイルシステムがファイルを削除して、ブロックを未使用としてマークする 2. コントローラーがこの情報をストレージに伝える 3.
ストレージはそれに応じてディスクイメージを縮小する → ゲストでファイルを削除した際、ホストの空き容量を増やせる discard=onオプションなしの場合ファイル削除時の挙動 1. ゲストのファイルシステムがファイルを削除して、ブロックを未使用としてマークする 2. ホスト側はなにもしない → ゲストでファイルを削除しても、ホストの空き容量は増えない https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_hard_disk_discard https://dustymabe.com/2013/06/11/recover-space-from-vm-disk-images-by-using-discardfstrim/34
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成/discard=onオプション Nekko Cloudでは、discard=onオプションを有効にしています 理由 • SSDを効率的に使いたい •
SSDの寿命を延ばしたい • テストの結果、データが消える、パフォーマンスが落ちる といった問題が生じない 35
最強VM TemplateをAnsibleで構築する Ansible Playbookの構成/discard=onオプション 有効にする条件 • discard=onオプションをつける • ストレージがシンプロビジョニングをサポートしている •
Linux5.0以上のバージョン (一部のOSではSSDエミュレーションを有効化する必要がある) https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_hard_disk_discard 36
最強VM TemplateをAnsibleで構築する VM Templateの構成/工夫した部分その2 qemu-guest-agentについて ci-vendorにて実行 37
最強VM TemplateをAnsibleで構築する qemu-guest-agentのインストールと有効化 qemu-guest-agentを使用する理由 • VMのIPアドレスをProxmox VEのダッシュボードから確認したい • 今のところ、有効にしたことによる問題は起きていない https://pve.proxmox.com/wiki/Qemu-guest-agent
38
最強VM TemplateをAnsibleで構築する VM Templateの構成/工夫した部分その3 apt upgradeについて(ci-vendorにて実行) 39
最強VM TemplateをAnsibleで構築する apt upgradeの実行 Q. ci-configでもapt upgradeできるのに なぜci-vendorのshellでapt upgradeするのか? A.
初回起動時のみ自動でapt upgradeしたい • ci-configは起動時に毎回実行される • apt upgradeをセットアップ後のサーバーに対して自動で行うと 予期せぬことが起こりそう...という恐怖 40
VM Template構築用 Ansible Playbookを オープンソースで公開しました 41
VM Template構築用Ansible PlaybookをOSSで公開中 公開する目的 • より良いVM Template構築ツールを作りたい! • コミュニティへの貢献 VM
Template構築用Ansible Playbookをオープンソースで公開しました https://github.com/nekko-lab/proxmoxve-cloud-init-vm-template 懇親会での質問, Issue, Pull request お待ちしております!!! (主要メンバーの多数が卒業研究が修羅場のため、返答が遅くなったらごめんなさい ) 42
Thank you for watching! 43