未完放流

終わりなど無い、有るのは試練だけだ……

VMware Workstation Player から LXC/LXD に乗り換えてみた

VMware Workstation Player を14 にアップグレードしたところ、ゲストイメージが起動しなくなってしまいました。 原因を調べていところ、使用マシンが古過ぎて(Core 2 Duo 世代?)システム要件を満たさなくなっていました。

代わりの仮想環境を検討したところ LXC に落ち着きました。

qiita.com

本稿を書き終わってから気づいたのですが、 Workastation Player はデスクトップで使うのが一般的と思います。 LXC は VMware の製品でいえば vSphere のような使いかたが想定されている思います。

本来クライテリアの異なるものをごっちゃに考えてしまう辺り、かなりずれてますね私。

GUI はないが、古いPCでも速い。CLI に慣れていれば簡単

古いハードウェアですと、仮想マシンのオーバーヘッドが大きいのか体感速度がかなり違います。 (KVM なども試しましたが、I/O周りというかディスクの読み書きが体感で分かるほど遅くなりました。)

基本 CLI での操作し、GUI は標準では使えません。

開発が非常に活発なため、ネットの情報が既に古くなっているものも多いようです。 バージョンが異なると、コマンドがサブコマンドを使う記法になっていたり、ファイル・ディレクトリ構造が異なる場合もあるようです。

今回、確認したバージョンは LXC/LXD *1 ともに 2.21 です。

私見では、LXC が個別の仮想マシン、LXD がコンテナを管理するソフトに相当すると思います。

仮想マシンではなくコンテナ

似非エンジニアな私は両者とも厳密には理解しておりません。 intel-VT が具体的に何をしているか分かりませんし、コンテナがユーザーランドを分けていて別のマシンがあるように見えるぐらいの認識です。

Docker の方がメジャーじゃないの?

もちろん検討しましたが、以下のような点が気なるので見送りました。

  • データ保持に、「永続コンテナ」が必要?
  • 本来は単体アプリケーションの可搬性を考えている
  • 成功事例がSNSゲームのようにリソースの変動が激しい用途が多い。

何はともあれ、Ubuntu をゲスト起動

LXC/LXD/LXCFS 共に Canonical 支援のもと開発しているようなので、稼働確認は Ubuntu が無難かと思われます。 Host に Linux Mint を使っておりますが、Ubuntu の派生ディストリビューションなので現在のところ問題に遭遇しておりません。 こちらも Linux Mint 18.3 は Ubuntu 16.04 に相当します。

インストールから起動まで数個のコマンドで行えます。 初期設定は公式ページ *2 をはじめ詳しく書かれたページが幾らでもありますので、 要所のみコメントします。

$ apt install lxd
$ lxd init

ここ以外で lxd のコマンドを使ったことがないです。 wizard が始まりますが、お試しならば、ほぼデフォルト設定で大丈夫かと ストレージは zfs を使う必要はあまりないと思います。

$ lxc launch ubuntu:16.04 first
$ lxc shell first
root@first ~ $

LXD の利点として、iso image (CD/DVD image) を用意する必要がありません。 最初の1度だけ、イメージのダウンロードに時間がかかります。 first というホスト名で ubuntu server 16.04 のマシンが起動します。

これまでにインストール・稼働確認を取ったアプリケーション

以下のソフトウェアに関しては、PPA登録、snap などは通常と同じように使えました。

Application Source Comment
Jupyter Hub github npm + pip (system base)
NextCloud snap お手軽。dropbox clone
GitLab 公開PPA 意外と時間がかかる。構成管理ツールで設定されている。
R 公開PPA 問題なし
Ansible system base Python2 複数ゲストを使い分けたりする際に威力を発揮する。イメージを保持コピーできるので、複数同時構築の方が効率が悪い場合もある。

VMware Workstation Player と異なるところ

仮想マシンを使っていて便利だった機能をコンテナでも使おうと思って戸惑ったものです。

共有フォルダ

Workstation Player などにはホストとゲストがフォルダを共有する機能が標準で提供されます。 コンテナはホストの一部で間借りして占有スペースを作っているので共有というより本来は開放?

uid, gid の編集と仮想的に disk を追加することで似たような機能の再現はできます。

gihyo.jp

以下の事例は、host-guset 間でホームディレクトリを共有する例 insights.ubuntu.com

ネットワーク周り

NICの設定などに関しては VMware Player ですと、(やや語弊があるかもしれませんが)ほぼ独立したものを用意してくれます。 ゲストに対する隔離の考え方、コンセプトの違いもあると思いますが大分戸惑いました。 逆に LinuxNIC を設定するコマンドが豊富(過ぎる)なことが分かりました。

soft options
VMware Player ブリッジ、NAT、ホストオンリー
LXC (lxc.net.[i].type) macvlan, phys, veth, vlan

Linux Containers - LXC - Man ページ - lxc.container.conf.5