Raspberry Pi : LXDコンテナ仮想化環境の設定

2019年11月12日火曜日

Raspberry_Pi 仮想化

t f B! P L
ラズパイの初期設定が一通り完了し、サーバーサービスアプリケーションのインストールをしたいところですが、その前にLXDコンテナ仮想化環境を設定したいと思います。

仮想環境を構築する理由は、気軽に仮想マシンを起動して設定を行い、気に入らない場合は気軽に破棄できるからです。 他にも動機としてはスナップショットをとったり、バックアップをとったり、デプロイを自動化するなどありますが自分はそこまで使いこなせていません。

仮想化技術は他にハイパーバイザー型のKVM/QEMUがありますが、ハードウェアをエミュレーションするハイパーバイザー型よりもコンテナ型仮想化のほうがリソースが潤沢ではないラズパイには適していると思います。

ブリッジネットワークの作成


参考:Debian 9: bridgeインターフェースの設定

今回は、ホストマシンと仮想マシンともにDHCPでIPアドレスを設定するブリッジネットワークを作成します。


1.ネットワークデバイス名の確認

ラズパイにSSH接続し、「ip a s」コマンドでネットワークデバイス名を確認します。
ブリッジする有線LANは「eth0」であると確認できました。

2.bridge-utils のインストール

apt コマンドで必要なプログラムをインストールします。
sudo apt install bridge-utils

3.ブリッジ設定

ネットワークの設定ファイルにブリッジの設定を追加します
sudo vi /etc/network/interfaces

ブリッジインターフェース「br0」を作成します。
以下の設定を追記します。
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
      bridge_ports eth0
      bridge_stp off
      bridge_maxwait 0

再起動してネットワーク設定を有効にします。
sudo reboot now


※実はこのときスペルミスで設定不良になり、再起動後にSSH接続できなくなりました。
USBメモリを別PCに接続してファイルを修正し、事なきを得ました。


LXDのインストール


参考:RaspbianにLXDを導入する

1.LXCをインストールします。

sudo apt install lxc


「LXD」は「LXC」コンテナ技術のラッパーインターフェースみたいなものなので両方インストールする必要がありますが、snapインストールで LXDパッケージをインストール指定してもLXCは自動的には追加されません。そのため、事前にインストールする必要があります。
LXCについてはraspbianのaptリポジトリからインストールします。

2.snapdをインストールします。

Debian系であるRaspbianはLXDをsnapインストールするみたいです。
まずsnapdをインストールします。
sudo apt install snapd -y


3.LXDをsnapインストール

snapを使用してLXDをインストールします。
sudo snap install lxd


インストールプロセスが完了後再起動します。
sudo reboot now


4.sudoの環境変数を修正します

snapインストールされたLXDの実行バイナリは「/snap/bin」に格納されています。
インストール作業をしたユーザーの環境変数にパスは通っていますが、SUDOの環境変数には含まれていません。 そのため「/etc/sudoers」を「visudo」コマンドで修正する必要があります。

sudo visudo


secure_pathに「:/snap/bin」を追加します。

修正前:
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
修正後:
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

「visodo」を起動すると、「/etc/sudoers.tmp」が操作対象となっています。
保存する場合は「Ctrl+o」で別名保存を選び、ファイル名を「/etc/sudoers」に修正して上書き保存します。


5.「pi」ユーザーを「lxd」グループに追加

lxcコマンドを実行するとエラーが表示されます。

ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.


関連ソケットへの許可がrootとlxdグループのみとパーミッションが設定されているそうです。「pi」ユーザーでラズパイを操作しているのでLXDグループに追加します。

sudo gpasswd -a pi lxd
一旦ログオフしてログイン(再度SSH接続)すると、グループに追加した設定が有効になります。 


6.LXDの初期設定

LXDの初期設定は下記のコマンドから初めます。
sudo lxd init


「lxd init」設定内容
Would you like to use LXD clustering? (yes/no) [default=no]: yes
Do you want to configure a new storage pool? (yes/no) [default=yes]: yes
Name of the new storage pool [default=default]: default
Name of the storage backend to use (btrfs, ceph, dir, lvm) [default=btrfs]: btrfs 
Create a new BTRFS pool? (yes/no) [default=yes]: yes
Would you like to use an existing block device? (yes/no) [default=no]: no
Size in GB of the new loop device (1GB minimum) [default=15GB]: 15GB
Would you like to connect to a MAAS server? (yes/no) [default=no]: no
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like LXD to be available over the network? (yes/no) [default=no]: no
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] : yes
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: no

「Name of the existing bridge or host interface:」で、作成したブリッジインターフェースの「br0」を指定することでコンテナ仮想マシンもホストと同セグメントのネットワークに属することになります。

7.コンテナマシンの作成と実行

下記コマンドは、OSを「Ubuntu18.04」、名称を「ubuntu-sv」という仮想マシンを作成し、実行します。
lxc launch ubntu:18.0 ubuntu-sv

Translate

QooQ