SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Sys::Virt と Sys::Guestfs
 で仮想マシンを操ってみた
          2012/8/18
      id:hogem / @hogem
自己紹介
•   Kenichi Morimoto
•   id:hogem / @hogem
     •   http//d.hatena.ne.jp/hogem/
•   Infra, Server, Network Engineer
•   某鉄道系グループ企業
     •   ISP 事業 , サーバホスティング等
Perl 使っているところ
•   CMTS, CATV Modem(Docsis)
•   Log Rotate, File Backup
•   ネットワーク機器設定 , 管理
     •   Net::Telnet(::Cisco), Net::SSH
     •   Net::Snmp
•   ログ検索、業務系管理用 Web App
     •   CGI, CGI::Application, Plack
     •   cgi-lib.pl (!?)
仮想化
仮想化でサーバ構築が楽に?
•   大量のサーバクローン、起動、停止
•   クローン後の単純作業が結構ある
    •   IP, MAC, hostname
    •   uuid,
    •その他 app ごとの設定
•   この辺りを楽に運用したい!
KVM と libvirt
•   KVM
     •   仮想化ハイパーバイザ : Linux Kernel
•   libvirt
     •   仮想化 API
          •   virsh ( コマンドライン )
          •   virt-manager (GUI: python)
          •   Sys::Virt (perl)
Sys::Virt
•   libvirt perl binding
•   OS の libvirt に依存するので cpan ではな
    く、 yum/apt での install が楽


$uri = "qemu///system";
$vmm = Sys::Virt->new(uri => $uri);
@domains = $vmm->list_domains();
$dom = $vmm->get_domain_by_name($name);
Sys::Virt::Domain
•   Sys::Virt::list_domain() で返される配
    列の要素 # 個々の仮想マシンオブジェクト
•   $dom->destroy()   # 強制停止
•   $dom->create()    # 起動
•   $dom->shutdown() # 停止
     •   仮想マシン上で acpid の起動が必要
停止状態の仮想マシンを起動
use Sys::Virt;
my $uri = "qemu+ssh://$host/system";
$vmm = Sys::Virt->new(uri => $uri);

for my $dom ($vmm->list_defined_domains) {
  if ($dom->get_info->{state} ==
    Sys::Virt::Domain::STATE_SHUTOFF) {
    $dom->create();
    print $dom->get_name, " createdn";
  }
}
Sys::Virt デモ
•   https://github.com/hogem/libvirt_webapp
•   KVM 操作簡易 web app
     •   仮想マシン起動 , 停止 , VNC 接続
•   VNC コンソール接続 ( 非 Sys::Virt)
     •   VNC Client : TightVNC (java)
     •   ssh port forwarding to vnc port
仮想マシンクローン後の作業
•   Hostname 変更
•   IP, MAC アドレス変更
     •   /etc/sysconfig/network
     •   ifcfg-ethX
     •   /etc/udev/rules.d/70-persistent-
         net.rules
•   起動時 daemon の変更 (chkconfig)
•   その他 各 app ごとの設定など
Sys::Guestfs
•   libguestfs の perl binding
•   guestfish コマンド
•   cpan にないので yum で
     •   yum install perl-Sys-Guestfs
•   libguestfs
     •   仮想マシンの Disk イメージを操作
     •   ファイル参照 (cat),export(copy-out)
     • ファイル書込 (vi),import(copy-in)
     • コマンド実行
Sys::Guestfs sample
use Sys::Guestfs;
my $h = Sys::Guestfs->new();
$h->add_drive_opts(
  'disk.img', format => 'qcow2'
);
$h->launch();
$h->mount_options('', '/dev/vda1', '/');
$output = $h->command(
  [qw(chkconfig nginx off)]
);
$h->sync();
$h->close();
Sys::Guestfs デモ
まとめ
•   Sys::Virt(libvirt api) で仮想マシンの起
    動、停止等ができる
•   Sys::Guestfs で仮想マシンの disk イメー
    ジを mount して、ファイル読み書き、コマン
    ド実行ができる
•   大量の仮想マシン操作のお供にどうぞ
質問?
ご静聴ありがとう
 ございました
libvirt memo
●   (Sys::Virt に限らず ) NFS で共有している
    領域に disk image を置く場合、複数のハイ
    パーバイザで同時起動しないように注意す
    る。 File system が壊れてしまう
●   remote の hypervisor を操作する場
    合、 ssh passphrase なしの公開鍵を作成
    しておくとログインが楽になる
guestfish memo
●   起動中の image に書き込みを加えると file
    system が壊れる。変更の必要がなければ -
    ro を推奨。

●   # guestfish -ro -a disk.img
●   > run
●   > list-filesystems
●   > mount /dev/vda1 /

Contenu connexe

Tendances

Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016Kohei Hoshi
 
ピクシブの自作インフラ事情
ピクシブの自作インフラ事情ピクシブの自作インフラ事情
ピクシブの自作インフラ事情Ryuta Kamizono
 
An idea of bios emulation on b hy ve
An idea of bios emulation on b hy veAn idea of bios emulation on b hy ve
An idea of bios emulation on b hy veTakuya ASADA
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜furandon_pig
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migrationspg_games
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingTakuya ASADA
 
コマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱うコマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱うYusuke Kawakami
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Kamimura Taichi
 
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)tokuhy
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOpsshokiri
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallTakuya ASADA
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境Katsutoshi Nagaoka
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 

Tendances (19)

Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
ピクシブの自作インフラ事情
ピクシブの自作インフラ事情ピクシブの自作インフラ事情
ピクシブの自作インフラ事情
 
An idea of bios emulation on b hy ve
An idea of bios emulation on b hy veAn idea of bios emulation on b hy ve
An idea of bios emulation on b hy ve
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migration
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meeting
 
PowerShell de Azure
PowerShell de AzurePowerShell de Azure
PowerShell de Azure
 
コマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱うコマンドラインからplistファイルを扱う
コマンドラインからplistファイルを扱う
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
 
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOps
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 

Similaire à Kyoto.pm 20120818-hogem

Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話Masaki Kobayashi
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方Yoichi Toyota
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth LINE Corporation
 
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理gu4
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code readingTakuya ASADA
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話Tsuyoshi Torii
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 

Similaire à Kyoto.pm 20120818-hogem (20)

130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth
 
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code reading
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 

Kyoto.pm 20120818-hogem

  • 1. Sys::Virt と Sys::Guestfs で仮想マシンを操ってみた 2012/8/18 id:hogem / @hogem
  • 2. 自己紹介 • Kenichi Morimoto • id:hogem / @hogem • http//d.hatena.ne.jp/hogem/ • Infra, Server, Network Engineer • 某鉄道系グループ企業 • ISP 事業 , サーバホスティング等
  • 3.
  • 4. Perl 使っているところ • CMTS, CATV Modem(Docsis) • Log Rotate, File Backup • ネットワーク機器設定 , 管理 • Net::Telnet(::Cisco), Net::SSH • Net::Snmp • ログ検索、業務系管理用 Web App • CGI, CGI::Application, Plack • cgi-lib.pl (!?)
  • 6. 仮想化でサーバ構築が楽に? • 大量のサーバクローン、起動、停止 • クローン後の単純作業が結構ある • IP, MAC, hostname • uuid, •その他 app ごとの設定 • この辺りを楽に運用したい!
  • 7. KVM と libvirt • KVM • 仮想化ハイパーバイザ : Linux Kernel • libvirt • 仮想化 API • virsh ( コマンドライン ) • virt-manager (GUI: python) • Sys::Virt (perl)
  • 8. Sys::Virt • libvirt perl binding • OS の libvirt に依存するので cpan ではな く、 yum/apt での install が楽 $uri = "qemu///system"; $vmm = Sys::Virt->new(uri => $uri); @domains = $vmm->list_domains(); $dom = $vmm->get_domain_by_name($name);
  • 9. Sys::Virt::Domain • Sys::Virt::list_domain() で返される配 列の要素 # 個々の仮想マシンオブジェクト • $dom->destroy() # 強制停止 • $dom->create() # 起動 • $dom->shutdown() # 停止 • 仮想マシン上で acpid の起動が必要
  • 10. 停止状態の仮想マシンを起動 use Sys::Virt; my $uri = "qemu+ssh://$host/system"; $vmm = Sys::Virt->new(uri => $uri); for my $dom ($vmm->list_defined_domains) { if ($dom->get_info->{state} == Sys::Virt::Domain::STATE_SHUTOFF) { $dom->create(); print $dom->get_name, " createdn"; } }
  • 11. Sys::Virt デモ • https://github.com/hogem/libvirt_webapp • KVM 操作簡易 web app • 仮想マシン起動 , 停止 , VNC 接続 • VNC コンソール接続 ( 非 Sys::Virt) • VNC Client : TightVNC (java) • ssh port forwarding to vnc port
  • 12. 仮想マシンクローン後の作業 • Hostname 変更 • IP, MAC アドレス変更 • /etc/sysconfig/network • ifcfg-ethX • /etc/udev/rules.d/70-persistent- net.rules • 起動時 daemon の変更 (chkconfig) • その他 各 app ごとの設定など
  • 13. Sys::Guestfs • libguestfs の perl binding • guestfish コマンド • cpan にないので yum で • yum install perl-Sys-Guestfs • libguestfs • 仮想マシンの Disk イメージを操作 • ファイル参照 (cat),export(copy-out) • ファイル書込 (vi),import(copy-in) • コマンド実行
  • 14. Sys::Guestfs sample use Sys::Guestfs; my $h = Sys::Guestfs->new(); $h->add_drive_opts( 'disk.img', format => 'qcow2' ); $h->launch(); $h->mount_options('', '/dev/vda1', '/'); $output = $h->command( [qw(chkconfig nginx off)] ); $h->sync(); $h->close();
  • 16. まとめ • Sys::Virt(libvirt api) で仮想マシンの起 動、停止等ができる • Sys::Guestfs で仮想マシンの disk イメー ジを mount して、ファイル読み書き、コマン ド実行ができる • 大量の仮想マシン操作のお供にどうぞ
  • 19. libvirt memo ● (Sys::Virt に限らず ) NFS で共有している 領域に disk image を置く場合、複数のハイ パーバイザで同時起動しないように注意す る。 File system が壊れてしまう ● remote の hypervisor を操作する場 合、 ssh passphrase なしの公開鍵を作成 しておくとログインが楽になる
  • 20. guestfish memo ● 起動中の image に書き込みを加えると file system が壊れる。変更の必要がなければ - ro を推奨。 ● # guestfish -ro -a disk.img ● > run ● > list-filesystems ● > mount /dev/vda1 /