I explain my home VM solution by premade MicroOS.
YAML に書いた宣言的な定義からVM を作ってみた 〜一般のご家庭向け ver 〜power of orchestrationopenSUSE-jahashimotosyuta@syuta_openSUSE
View Slide
イントロダクション●MicroOS●Combustion●Bash●Ansible●SaltStack●k3sKVM
宣言的とは「どうやるか」では無く、「どんな結果が欲しいか」に主眼を置く方法論– ここでは、欲しい VM のスペックを設定ファイル( YAML )に書くことで実現する方法を指します。
こんなことがありませんか?●ホストに余計なものを入れたくない– 極力ホストは欲しい物、必要な物だけにしたい●検証用の使い捨てVMが欲しい– コンテナなどサーバー技術をちょっと使ってみたい●SaltStackやKubernetesを試したい何なら使いたい– 複数マシンのコラボレーションを体感したい
検証用 VM あるある●自宅サービス提供 VM の横で検証– 自宅サービスが煽りをくって止まる●実は前のソフトの検証時に、今回必要なパッケージが一部入っていた– 今回の手順だけだと動かない
SaltStackSaltStack Master の指示により、Minion が各種設定を行うSaltStack MasterSaltStack MinionVirtual MachineVirtual Machine各種設定SaltStack MinionVirtual Machine各種設定Virtual MachineSaltStack MinionVirtual Machine各種設定Virtual Machine
KubernetesMaster Node の指示により、Worker Node がコンテナを動かす※概略ですMaster NodeWorker NodeコンテナWorker NodeコンテナWorker Nodeコンテナコンテナ
宣言的 KVMSCRIPTYAML
構成要素YAMLサービスVirtual Machineネットワークなどの基本設定スクリプトMicroOSAnsibleSaltStackCombustionKVM
ハードウェアとソフトウェアVM VM VMサービス B サービス BVMサービス A
YAMLハードウェアdomainname: k3s_mastertype: microoshostname: k3s-masterenp2s0:ip: 192.168.254.150subnet: 24vcpus: 2ansible:- { role: saltmaster }vm:- "saltstack_master"- "k3s_master"- "k3s_worker1"- "k3s_worker2"playbook:- "saltmaster"- "saltminion"メイン / ソフトウェア
レイヤー間の連携ハードウェア設定 YAMLansible:- { role: saltmaster }インベントリファイルplaybook書き込む参照する[saltmaster]192.168.xxx.yyyhosts:saltmaster
MicroOS & Combustion●MicroOS– イミュータブル– コンテナ最適化– 軽量●Combustion– MicroOS 初期設定スクリプト
Combustion による設定YAMLMicroOSホストネームなどの基本設定スクリプト設定ファイル雛形設定ファイルCombustion設定ファイル初期化スクリプト作成設定 配置
k3s
解決済課題●ネットワーク設定– NetworkManagerにいつの間にか変わっていた●VM 並列作成– インベントリファイル同時に書き込んじゃう問題●初回SSHログイン確認ダイアログ– ssh-keyscanでknown hostsに追記することで回避●ストレージアタッチメント– 永続ボリュームは必須
ストレージアタッチメントVMホストコンテナLVMハードウェア設定 YAMLplaybook
解決したい課題●フロントエンドからの制御– YAML編集やスクリプト実行を制御●VM生成中の中断、クリーンアップ– ホスト起動時に自動実行とかした場合、即シャットダウンする可能性がある●MicroOSプリメイドイメージの自動アップデート– 検証用アップデートと簡単なテスト●pythonで書き直したい– bashは悪くないけれどちょっと辛い
Thank you