Slide 1

Slide 1 text

YAML に書いた宣言的な定義から VM を作ってみた  〜一般のご家庭向け ver 〜 power of orchestration openSUSE-ja hashimotosyuta @syuta_openSUSE

Slide 2

Slide 2 text

イントロダクション ● MicroOS ● Combustion ● Bash ● Ansible ● SaltStack ● k3s KVM

Slide 3

Slide 3 text

宣言的とは 「どうやるか」では無く、 「どんな結果が欲しいか」に 主眼を置く方法論 – ここでは、欲しい VM のスペック を設定ファイル( YAML )に書く ことで実現する方法を指します。

Slide 4

Slide 4 text

こんなことがありませんか? ● ホストに余計なものを入れたくない – 極力ホストは欲しい物、必要な物だけにしたい ● 検証用の使い捨てVMが欲しい – コンテナなどサーバー技術をちょっと使ってみた い ● SaltStackやKubernetesを試したい 何なら使いたい – 複数マシンのコラボレーションを体感したい

Slide 5

Slide 5 text

検証用 VM あるある ● 自宅サービス提供 VM の横で検証 – 自宅サービスが煽りをくって止まる ● 実は前のソフトの検証時に、今回必 要なパッケージが一部入っていた – 今回の手順だけだと動かない

Slide 6

Slide 6 text

SaltStack SaltStack Master の指示により、 Minion が各種設定を行う SaltStack Master SaltStack Minion Virtual Machine Virtual Machine 各種設定 SaltStack Minion Virtual Machine 各種設定 Virtual Machine SaltStack Minion Virtual Machine 各種設定 Virtual Machine

Slide 7

Slide 7 text

Kubernetes Master Node の指示により、 Worker Node がコンテナを動 かす ※概略です Master Node Worker Node コンテナ Worker Node コンテナ Worker Node コンテナ コンテナ

Slide 8

Slide 8 text

宣言的 KVM SCRIPT YAML

Slide 9

Slide 9 text

構成要素 YAML サービス Virtual Machine ネットワークなどの基本設定 スクリプト MicroOS Ansible SaltStack Combustion KVM

Slide 10

Slide 10 text

ハードウェアとソフトウェア VM VM VM サービス B サービス B VM サービス A

Slide 11

Slide 11 text

YAML ハードウェア domainname: k3s_master type: microos hostname: k3s-master enp2s0: ip: 192.168.254.150 subnet: 24 vcpus: 2 ansible: - { role: saltmaster } vm: - "saltstack_master" - "k3s_master" - "k3s_worker1" - "k3s_worker2" playbook: - "saltmaster" - "saltminion" メイン / ソフトウェア

Slide 12

Slide 12 text

レイヤー間の連携 ハードウェア設定 YAML ansible: - { role: saltmaster } インベントリ ファイル playbook 書き込む 参照する [saltmaster] 192.168.xxx.yyy hosts:saltmaster

Slide 13

Slide 13 text

MicroOS & Combustion ● MicroOS – イミュータブル – コンテナ最適化 – 軽量 ● Combustion – MicroOS 初期設定スクリプト

Slide 14

Slide 14 text

Combustion による設定 YAML MicroOS ホストネームなどの 基本設定 スクリプト 設定ファイル 雛形 設定ファイル Combustion 設定ファイル 初期化スクリプト 作成 設定 配置

Slide 15

Slide 15 text

k3s

Slide 16

Slide 16 text

解決済課題 ● ネットワーク設定 – NetworkManagerにいつの間にか変わっていた ● VM 並列作成 – インベントリファイル同時に書き込んじゃう問題 ● 初回SSHログイン確認ダイアログ – ssh-keyscanでknown hostsに追記することで回避 ● ストレージアタッチメント – 永続ボリュームは必須

Slide 17

Slide 17 text

ストレージアタッチメント VM ホスト コンテナ LVM ハードウェア設定 YAML playbook

Slide 18

Slide 18 text

解決したい課題 ● フロントエンドからの制御 – YAML編集やスクリプト実行を制御 ● VM生成中の中断、クリーンアップ – ホスト起動時に自動実行とかした場合、即シャットダ ウンする可能性がある ● MicroOSプリメイドイメージの自動アップデート – 検証用アップデートと簡単なテスト ● pythonで書き直したい – bashは悪くないけれどちょっと辛い

Slide 19

Slide 19 text

Thank you