Multipass を使った仮想環境構築
はじめに
みなさん IaC やってますでしょうか?
IaCとは何ぞやという方は Chat GPTくんが教えてくれましたので、参考にしてください。
IaC を実現するツールは色々とありますが、今入っている案件では Ansible を使ってサーバ内の設定やミドルウェアの管理を行なっています。
そのため設定変更や新しくミドルウェアを入れる場合、Playbook を更新する必要があります。
この際、冪等性を検証したい、新しく使うモジュールをちょっと試したいといったことがあります。
ただ開発チームやビジネスチームが触りうる検証環境では気軽に試せないため、まずはローカル端末に仮想環境を立てて Ansible を検証するようにしています。
ここではローカル端末に仮想環境を立てる際に利用している Multipass について紹介します。
Multipassとは
Multipass は Ubuntu を支援している Canonical 社が提供しているVM管理ソフトになります。
詳細な使い方は公式ドキュメントを確認してください。
概要
CLI のみのインターフェイスで気軽に Ubuntu の仮想環境を作成可能
cloud-init にも対応しているためクラウド環境でサーバを立てたりする際の実験台としても利用可能
ただし利用できる OS は Ubuntu のみ
CentOS や他の OS を使いたい場合は Vagrant などが選択肢になると思います
インストール手順
Mac の場合は brew でサクッとインストールできます。
$ brew install multipass
仮想環境を作ってみる
ここでは Multipass による仮想環境を扱うにあたり、最低限のコマンドを紹介します。
イメージの確認
multipass find で利用可能な Ubuntu イメージを確認
$ multipass find
Image Aliases Version Description
20.04 focal 20231129 Ubuntu 20.04 LTS
22.04 jammy,lts 20231211 Ubuntu 22.04 LTS
23.04 lunar 20231205 Ubuntu 23.04
Blueprint Aliases Version Description
anbox-cloud-appliance latest Anbox Cloud Appliance
charm-dev latest A development and testing environment for charmers
docker 0.4 A Docker environment with Portainer and related tools
jellyfin latest Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube latest minikube is local Kubernetes
ros-noetic 0.1 A development and testing environment for ROS Noetic.
ros2-humble 0.1 A development and testing environment for ROS 2 Humble.
仮想環境の作成
multipass launch で仮想環境を作成
オプションでメモリなどを設定可能
デフォルトだと LTS のイメージが使われる
設定できる内容は multipass launch -h を見ればOK
$ multipass launch --name test --cpus 2 --memory 3G --disk 5G
仮想環境を確認
multipass ls で仮想環境の状況を確認
multipass info ${name} とすることで詳細も確認可能
$ multipass ls
Name State IPv4 Image
test Running 192.168.64.3 Ubuntu 22.04 LTS
$ multipass info test
Name: test
State: Running
IPv4: 192.168.64.3
Release: Ubuntu 22.04.3 LTS
Image hash: f885a8e8f62a (Ubuntu 22.04 LTS)
CPU(s): 2
Load: 0.31 0.14 0.05
Disk usage: 1.4GiB out of 4.8GiB
Memory usage: 148.1MiB out of 2.9GiB
Mounts: --
アクセスする
普通に作成すると ubuntu ユーザーが作成されており、multipass shell ${name} でアクセス可能
鍵を配置すればその鍵を使って SSH することもできます
$ multipass shell test
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Dec 15 14:09:26 JST 2023
System load: 0.037109375
Usage of /: 30.1% of 4.68GB
Memory usage: 6%
Swap usage: 0%
Processes: 95
Users logged in: 0
IPv4 address for enp0s1: 192.168.64.3
IPv6 address for enp0s1: fd90:17d1:1711:a077:5054:ff:feab:4841
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@test:~$
仮想環境の停止と再開
multipass stop ${name} で停止
multipass start ${name} で再開
$ multipass stop test
$ multipass ls
#=> State が Stopped に
Name State IPv4 Image
test Stopped -- Ubuntu 22.04 LTS
$ multipass start test
$ multipass ls
#=> State が Running に
Name State IPv4 Image
test Running 192.168.64.3 Ubuntu 22.04 LTS
リソース変更
作成した仮想環境で後からメモリやボリュームを変更したい場合は multipass set を使う
# まずは停止
$ multipass stop test
# リソースの変更
$ multipass set local.test.cpus=4
$ multipass set local.test.disk=10G
$ multipass set local.test.memory=6G
# 再起動
$ multipass start test
$ multipass info test
Name: test
State: Running
IPv4: 192.168.64.3
Release: Ubuntu 22.04.3 LTS
Image hash: f885a8e8f62a (Ubuntu 22.04 LTS)
CPU(s): 4
Load: 0.07 0.03 0.01
Disk usage: 1.4GiB out of 9.6GiB
Memory usage: 149.3MiB out of 5.8GiB
Mounts: --
仮想環境の削除
multipass delete ${name} で削除対象となる
ゴミ箱に入れるようなイメージ
multipass recover ${name} で削除対象から復元
ゴミ箱から戻すようなイメージ
multipass purge で削除対象を完全に削除
ゴミ箱を空にするようなイメージ
$ multipass delete test
$ multipass ls
#=> State が Deleted に
Name State IPv4 Image
test Deleted -- Not Available
$ multipass recover test
$ multipass ls
#=> State が Stopped に
Name State IPv4 Image
test Stopped -- Ubuntu 22.04 LTS
$ multipass delete test
$ multipass purge
#=> State が Deleted のものが完全削除
$ multipass ls
No instances found.
おわりに
Ubuntu の仮想環境を気軽に立てることのできる Multipass を紹介しました。
自分は Ansible の検証用途で使うことが多いですが、他にも利用用途はたくさんあるかと思います。
例えば Linux に慣れていない方はコマンドの練習をしてみたり、皆が使うサーバで操作する前に壊しても良い環境で検証をしてみたりなどなど...
Docker などによるコンテナ活用も便利ですが、用途によってはVM活用も視野に入れつつ楽しい仮想環境ライフを送っていきましょう。
#multipass #ubuntu #vm #ansible