ubuntuでlxd/lxcの動作確認をしました
1.概要
仮想環境は、PC自体をシミュレートする仮想マシンとアプリケーションの実行環境を提供するコンテナの2種類があると認識しています。ubuntuでは、前者はKVM環境、後者はdocker環境です。しかし、仮想マシンでもコンテナでもある環境としてlxdがあります。lxdではlxcコマンドを利用し、ちょっと不思議な感じです。
2.詳細
lxdは仮想マシンイメージとコンテナイメージが提供されます。例えば、ubuntu-20.04の仮想マシンとubuntu20.04のコンテナです。しかし、標準提供されるイメージはLinuxだけであり、lxdはLinuxに特化した環境と言うことができます。現状はKVMなどのようにisoファイルから仮想マシンを構築できないようです。
lxdのメリットは仮想マシンを構築した際のディスク使用量です。ubuntu-20.04の仮想マシンイメージファイルは300MB程度であり、Download後、展開しても1GB程度です。また、仮想マシンのようにisoファイルから導入する必要もなく利用できるので、短時間に必要な試験をするには適していると感じています。今回はlxdに関して記述します。
(1) 導入
参考資料に従って、aptで導入します。
$ sudo apt install lxd
4.0を選択するとsnap経由の導入になります。
次に、初期設定をします。
$ sudo lxd init
(2) ubuntu仮想マシン作成
$ lxc launch images:ubuntu/focal/amd64 ubuntu20 --vm
上記コマンドでlxdのubuntu-20.04の仮想マシンを導入します。
(3) 仮想マシンへのlogin
$ lxc exec ubuntu20 bash
上記コマンドで仮想マシンへrootログインします
3.所見
lxd/lxcは良くわかっていません。仮想マシンとコンテナを混在管理できるようです。そう言えば、VMwareも仮想マイン管理にコンテナ管理を追加する方向性を示していました。もしかすると、lxd/lxcを利用しているのかお知れません。
4.追加
この機会にlxd/lxc関連の検証を行いました。内容を記述します。
(1) ubuntuのlxd/lxc環境でkubernatesは動作するか
lxdはubuntu20.04の仮想マシンを提供するのでkubernateを動かすこともできるのではないかと考えました。以前、master nodeだけのkubernates環境をubuntu desktopk上に構築したことがあり、同じことをlxd上のubuntu-20.04で実現できないかを試しました。しかし、kubernatesの導入ができない結果でした。lxdの仮想マシンは、オンプレPCとはちょっと違うようです。
(2) ubuntuのlxd/lxcでmicroK8sは動作するか
microk8sをlxdで動作させる場合、lxd上のubuntuコンテナ上でpodを動作させます。pod自体がコンテナなので、コンテナの上でコンテナが動作するような形に見えます。最初、lxdのubuntu-VM上で動作させると思っていたのですが、構成が異なることに気が付きました。
kubernatesはmaster nodeとworker nodeに分かれています。しかし、microk8sは全てがmaster nodeであり、worker nodeでもあるようです。kubernatesのmaster nodeの弱点をカバーできそうな気がしました。master nodeが停止しても他のnodeがmaster nodeとして機能しそうな気がします。
(a) lxd導入
本ブログの資料を参考にして、lxdをubuntu-20.04 desktopに導入します
(b) プロファイル設定
参考資料の通りに実施します
$ lxc profile create microk8s
$ wget https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s-zfs.profile -O microk8s.profile
$ cat microk8s.profile | lxc profile edit microk8s
$ rm microk8s.profile
(c) コンテナ作成と設定内容修正
k8s0の名称でubuntu20.04のコンテナを作成します。
$ lxc launch -p default -p microk8s ubuntu:20.04 k8s0
規定値の設定が大きいので修正をします。
$ lxc stop k8s0
$ lxc config set k8s0 limits.cpu=2
$ lxc config set k8s0 limits.memory=2GiB
$ lxc start k8s0
同様にk8s1も作成します。
d) microk8s導入
k8s0にmicrok8sを導入します
$ lxc exec k8s0 -- sudo snap install microk8s --classic
次にk8s0上に/etc/rc.localを作成します
$ cat << EOF > rc.local
#!/bin/bash
apparmor_parser --replace /var/lib/snapd/apparmor/profiles/snap.microk8s.*
exit 0
EOF
$ lxc file push rc.local k8s0/etc/rc.local
$ lxc exec k8s0 -- sh -c 'chown root.root /etc/rc.local'
$ lxc exec k8s0 -- sh -c 'chmod +x /etc/rc.local'
$ lxc exec k8s0 -- sh -c 'reboot'
$ rm rc.local
同様にk8s1にもmicrok8sを導入します
(e) node追加
k8s0にk8s1を接続します
$ lxc exec k8s0 microk8s add-node | tail -n1 | xargs lxc exec k8s1
(f) 試験
試験できる環境ができたので、必要な試験をします。
参考資料
[本ブログ内参照]・ubuntultsとは何かと考えました
コメント
コメントを投稿